每日一问04
Question:激活函数ReLU和Sigmoid那个效果更好?
首先我们先了解ReLU和Sigmoid函数具体是什么样的
Sigmoid
Sigmoid函数对应的公式为:
Sigmoid函数对应的图像为:
ReLU
ReLU对应的图像为:
对比
Sigmoid不是零中心的
为什么说Sigmoid不是零中心的呢,我们可以通过对Sigmoid函数进行求导可以分析,
所以sigmoid函数的导数为
而我们通过Sigmoid函数图像可以看到,在整个坐标轴上Sigmoid时恒大于零且小于1的,所以sigmoid函数的导数是恒大与零的。
既然sigmoid函数的导数是恒大与零的这就意味着在进行梯度下降进行w参数更新的时候w的更新值只与神经元的输入有关,当输入为正时,w向x正向更新,当输入为负时w向y轴负方向更新,这就导致梯度下降权重更新时呈“Z”字型下降,从而导致权重的优化效率。
Sigmoid的梯度消失问题
Sigmoid对应的导函数图像如图
由图可以看到Sigmoid的导数只有在0附近时梯度较大具有很好的激活性,而在正负饱和区,尤其是在小于-5和大于5的区域,梯度几乎为0,而这个梯度将会与整个损失函数关于该神经元输出的梯度相乘,那么相乘的结果也会接近零,这会导致梯度消失。
ReLU的稀疏性
ReLU激活函数求导不涉及浮点运算,所以速度更快。
由ReLU图像可以看到,在x正半轴的梯度始终为1;在x负半轴梯度始终为0;z等于零时的梯度可以当成1也可以当成0,实际应用中并不影响。
所以对于隐藏层,选择ReLU作为激活函数,能够保证z大于零时梯度始终为1,从而提高神经网络梯度下降算法运算速度。而当输入z小于零时,ReLU存在梯度为0的特点,一旦神经元的激活值进入负半区,那么该激活值就不会产生梯度/不会被训练,虽然减缓了学习速率,但也造成了网络的稀疏性——稀疏激活,这有助于减少参数的相互依赖,缓解过拟合问题的发生。