Sigmoid函数
Sigmoid函数定义如下:
其图形如下:
Sigmoid 函数优点很多:
1.作为 Activation Function,它是单调递增的,能够很好地描述被激活的程度;
2.Sigmoid 能将(
−∞,+∞
)转换为(0,1),避免数据在传递过程中太过发散,同时输出还能被理解成某种概率;
3.Sigmoid 在定义域内处处可导,而且导数很好算。
f′(x)=f(x)(1−f(x))
,图形如下,可以看出
f′(x)<1
但是,Sigmoid 的导数也带来了一些问题。当 DNN 比较深的时,较前层的参数求出的梯度会非常小,几乎不会再更新,这种现象被称为梯度消失(Gradient Vanish)。
tanh函数
tanh函数是sigmoid函数的变形,tanh函数定义如下:
其图形如下:
在具体应用中,tanh函数相比于Sigmoid函数往往更具有优越性,这主要是因为Sigmoid函数在输入处于[-1,1]之间时,函数值变化敏感,一旦接近或者超出区间就失去敏感性,处于饱和状态,影响神经网络预测的精度值。而tanh函数的输出和输入能够保持非线性单调上升和下降关系,符合BP网络的梯度求解,容错性好,有界,渐进于0、1,符合人脑神经饱和的规律,但比sigmoid函数延迟了饱和期。
ReLU函数
为了缓解 Gradient Vanish 现象,现在大家都会使用 ReLU(Rectified Linear Unit),其定义如下:
对应的图形如下:
ReLU 除了具有 Sigmoid 函数大部分的优点外,还有
1.对某个神经元,当x>0时,其导数为1,因而缓解了 Gradient Vanish 现象;
2.对某个神经元,当x<0时,其输出也是0,也就是对后续的网络不起作用,可以看作从网络中被移除了。因此在整个训练过程结束后,整个网络会呈现出一种稀疏的状态,也就是会有很多的神经元由于在网络中不起作用,可以当成不存在。这种稀疏也表明 ReLU 对避免网络过拟合有一定作用。
同时,ReLU 也有自己的缺陷:
1.可以看出当x<0时,不仅输出为0,ReLU 的导数也为0。即对应的参数不再更新。因此这个神经元再也没有被激活的机会了,这种现象被称为dying ReLU;
2.第二个现象叫 Bias shift。在将数据输入 DNN 时我们一般会进行高斯归一,但是由于 ReLU 的输出恒大于0,会导致后续层输出的数据分布发生偏移。对于很深的网络,这可能会导致无法收敛。
其他
Activation Function针对不同的任务中有不同的选择,还有一些其它的 Activation Function 比如 Maxou、ELU 等。
参考文献: