1.Sigmoid型函数
Sigmoid 型函数是指一类S 型曲线函数,为两端饱和函数.常用的Sigmoid型函数有Logistic 函数和Tanh 函数.
1.1 Hard-Logistic 函数和Hard-Tanh 函数
图4.2给出了Logistic 函数和Tanh 函数的形状.Tanh 函数的输出是零中心化的(Zero-Centered),而Logistic函数的输出恒大于0.非零中心化的输出会使得其后一层的神经元的输入发生偏置偏移(Bias Shift),并进一步使得梯度下降的收敛速度变慢.
Logistic 函数和Tanh 函数都是Sigmoid 型函数,具有饱和性,但是计算开销较大.因为这两个函数都是在中间(0 附近)近似线性,两端饱和.因此,这两个函数可以通过分段函数来近似.
Logistic 函数
图4.3给出了Hard-Logistic 函数和Hard-Tanh 函数的形状.
2.1 ReLU 函数
ReLU(Rectified Linear Unit,修正线性单元)[Nair et al., 2010],也叫Rectifier 函数[Glorot et al., 2011],是目前深度神经网络中经常使用的激活函数.ReLU 实际上是一个斜坡(ramp)函数,定义为
优点 采用ReLU 的神经元只需要进行加、乘和比较的操作,计算上更加高效.ReLU 函数也被认为具有生物学合理性(Biological Plausibility),比如单侧抑制、宽兴奋边界(即兴奋程度可以非常高).在生物神经网络中,同时处于兴奋状态的神经元非常稀疏.人脑中在同一时刻大概只有1% ∼ 4% 的神经元处于活跃状态.Sigmoid 型激活函数会导致一个非稀疏的神经网络,而ReLU 却具有很好的稀疏性,大约50% 的神经元会处于激活状态.
在优化方面,相比于Sigmoid 型函数的两端饱和,ReLU 函数为左饱和函数,且在𝑥 > 0 时导数为1,在一定程度上缓解了神经网络的梯度消失问题,加速梯度下降的收敛速度.
缺点 ReLU 函数的输出是非零中心化的,给后一层的神经网络引入偏置偏移,会影响梯度下降的效率.此外,ReLU 神经元在训练时比较容易“死亡”.在训练时,如果参数在一次不恰当的更新后,第一个隐藏层中的某个ReLU 神经元在所有的训练数据上都不能被激活,那么这个神经元自身参数的梯度永远都会是0,在以后的训练过程中永远不能被激活.这种现象称为死亡ReLU问题(Dying 参见公式(4.66).ReLU Problem),并且也有可能会发生在其他隐藏层.
在实际使用中,为了避免上述情况,有几种ReLU 的变种也会被广泛使用.