首页 > 机器学习常见面试题总结——激活函数
头像
蒋豆芽
编辑于 2021-04-20 09:55
+ 关注

机器学习常见面试题总结——激活函数

1.1 激活函数


1.1.1 说一下你了解的激活函数?分别应用于什么场景?

参考回答

  1. sigmoid。sigmoid(x)型函数也称Logistic函数,公式如下:

    img

    sigmoid型函数是第一个被广泛应用于神经网络的激活函数。经过sigmoid型函数作用后,输出的值范围在[0,1]之间。但是sigmoid型函数的输出存在均值不为0的情况,并且存在梯度消失的问题,在深层网络中被其他激活函数替代。在逻辑回归中使用的该激活函数用于输出分类。

  2. tanh。tanh(x)型函数可以解决sigmoid型函数的期望(均值)不为0的情况。函数输出范围为(-1,+1)。但tanh(x)型函数依然存在梯度消失的问题。公式如下:

    img

    在LSTM中使用了tanh(x)型函数。

  3. ReLU。ReLU(x)型函数可以有效避免梯度消失的问题,公式如下:

    img

    ReLU(x)型函数的缺点是负值成为“死区”,神经网络无法再对其进行响应。Alex-Net使用了ReLU(x)型函数。当我们训练深层神经网络时,最好使用ReLU(x)型函数而不是sigmoid(x)型函数。

  4. Leaky ReLU。Leaky ReLU(x)型函数为负值增加了一个斜率,缓解了“死区”现象,公式如下:

    img

    Leaky ReLU(x)型函数缺点是,超参数a(阿尔法)合适的值不好设定。当我们想让神经网络能够学到负值信息,那么使用该激活函数。

  5. Mish激活函数。Mish激活函数同样允许负值有一定的梯度流入。公式如下:

    img

    应用场景同Leaky ReLU(x)型函数。

  6. 参数化ReLU(P-ReLU)。参数化ReLU为了解决超参数a(阿尔法)合适的值不好设定的问题,干脆将这个参数也融入模型的整体训练过程中。也使用误差反向传播和随机梯度下降的方法更新参数。

  7. 随机化ReLU(R-ReLU)。顾名思义,就是超参数a(阿尔法)随机化,让不同的层自己学习不同的超参数,但随机化的超参数的分布符合均值分布或高斯分布。

  8. 指数化线性单元(ELU)。也是为了解决死区问题,公式如下:

    img

    缺点是指数计算量大

  9. Maxout。与常规的激活函数不同,Maxout是一个可以学习的分段线性函数。其原理是,任何ReLU及其变体等激活函数都可以看成分段的线性函数,而Maxout加入的一层神经元正是一个可以学习参数的分段线性函数。
    优点是其拟合能力很强,理论上可以拟合任意的凸函数。缺点是参数量激增!在Network-in-Network中使用的该激活函数。


答案解析

为什么需要激活函数?

下图是神经元模型:

img

其中xi为第i个输入,wi为第i个神经元的权重,θ为门限。可以看到,y为线性函数,线性函数就只能处理线性问题,非线性的问题没办法处理了。所以为了让神经网络也能处理非线性的问题,才需要引入非线性激活函数,把线性函数给非线性化。这就是使用激活函数的意义

好,我们一个个分析:

  1. 首先是sigmoid函数

    img

    从函数和公式可以很清楚地看到,sigmoid函数将输入映射到了[0,1]之间,因为输出都大于0,所以sigmoid函数期望(均值)大于0的。什么意思呢?简单理解就是(0+1)/2=0.5,均值大于0。如果输出区间在[-1,1]之间,那么均值就是(-1+1)/2=0了。

    当然这只是简单理解,期望计算公式如下:

    img

    这个xk表示取值,如1,2,3,4.....;pk表示取值的概率,按照上面的公式加和,就得到我们的期望E(x)了。

    那为什么要均值为0最好呢?哈哈,以后豆芽写文章详细讲解。

    那怎么又存在梯度消失的问题呢?梯度是啥啊?梯度就是曲线斜率吧,曲线斜率就是切线吧,大家可以回忆一下高中的知识哈,那么可以看到sigmoid函数两边的斜率已经越来越趋向0了,如图:

    img

    都趋向0了,我们神经网络反向传播参数的时候参数就不更新了呀,不更新就代表网络没有继续学习了,这就是梯度消失。

  2. 继续tanh函数,可以看到函数曲线:

    img

    输出范围成了[-1,1],期望(均值)为0。梯度消失的问题同sigmoid。

  3. 后来发展出的ReLU函数改进了梯度消失的问题,函数如图:

    img

    可以看到,ReLU在大于0时,斜率固定,这有助于网络训练。再看看梯度函数:

    img

    ReLU梯度稳定,值还比sigmoid大,所以可以加快网络训练。不过ReLU的缺点就是小于0的值不再得到响应,这又不利于网络训练。我们在输入图像时就要注意,应该使用Min-Max归一化,而不能使用Z-score归一化。

  4. 大家可以注意到ReLU的正值输出为[0,无穷大],关键是我们计算机内存有限,能存储无穷大的数吗?当然不能,所以将ReLU应用到实际中时需要限定输出的最大值,所以就成了ReLU6了,如图:

    img

    就是因为最大输出限定在6,所以称为ReLU6了。要是输出限定为豆芽,就应该叫ReLU-豆芽,就是这样,自己创造的东西,想怎么皮就怎么皮。哈哈

  5. 然后解决ReLU的“死区”问题,Leaky ReLU函数如图:

    img

    可以看到,0的左边存在斜率,那么负值也可以得到响应,有利于网络学习到更多的信息。但是呢这个超参数不好设定,要根据不同的任务手动设置不同的参数。

  6. Mish函数,如图:

    img

    可以看出,在负值中,允许有一定的梯度流入。

  7. 然后就有了参数化ReLU,让网络自己学习到超参数。

  8. 然后是随机化ReLU,每个层都有自己的阿尔法参数,它们具有一定的分布,我们可以将其限定为均值分布或高斯分布,如图:

    img
  9. ELU函数,如图:

    img

    缺点计算量大。

  10. Maxout。Maxout是深度学习网络中的一层网络,就像池化层、卷积层一样等,我们可以把maxout 看成是网络的激活函数层。如图:

    img

    从图中可以看出,Maxout就像一个层一样,k个节点就对应k个参数。这个层最终表现为一个分段函数。

    img

类似的问题还有:

1.1.2 说说你平时都用过什么激活函数,各自什么特点?

参考回答

回答参考上面。


答案解析

无。


1.1.3 写一下leaky ReLU的公式,跟ReLU比有什么优势?

参考回答

回答参考上面。


答案解析

无。


1.1.4 了解ReLU6吗?

参考回答

回答参考上面。


答案解析

无。


1.1.5 sigmoid有什么缺点,有哪些解决办法?

参考回答

回答参考上面。


答案解析

无。

1.1.6 relu在零点可导吗,不可导如何进行反向传播?

参考回答

不可导。

人为将梯度规定为0.


答案解析

caffe源码~/caffe/src/caffe/layers/relu_layer.cpp倒数第十行代码:

bottom_diff[i] = top_diff[i] * ((bottom_data[i] > 0)+ negative_slope * (bottom_data[i] <= 0));

可以清楚看到,默认情况下(negative_slope=0),间断点处(<=0)的导数认为是0.

全部评论

(3) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

热门推荐