1、怎样选用激活函数
激活函数选用的两个考虑因素:
(1) 饱和问题
如果激活函数的输入值落在饱和区间,梯度值就趋近于0,会发生梯度消失问题(sigmoid和tanh)
(2)输出值是否关于0对称
输出值如果关于0对称会加快网络收敛,因为可以避免优化的时候走“之字形”路线
2、sigmoid
当使用sigmoid作为激活函数时,随着神经网络隐含层(hidden layer)层数的增加,训练误差反而加大。表现为:
(1)靠近输出层的隐含层梯度较大,参数更新速度快,很快就会收敛;
(2)靠近输入层的隐含层梯度较小,参数更新速度慢,几乎和初始状态一样,随机分布;
(3)在含有四个隐藏层的网络结构中,第一层比第四层慢了接近100倍!
这种现象就是梯度弥散(vanishing gradient)。而另一种情况,梯度爆炸(exploding gradient),则是前面层的梯度,通过训练变大,导致后面层的梯度,以指数级增大。
由于sigmoid的导数值小于1/4,x变化的速率要快于y变化的速率,随着层数的增加,连续不断执行sigmoid函数,就会导致,前面更新较大的幅度,后面更新较小的幅度,因此,网络在学习过程中,更倾向于更新后面(靠近输出层)的参数,而不是前面的参数(靠近输入层)。
sigmoid缺点:
激活函数的计算量较大,在反向传播中,当求误差梯度时,求导涉及除法;
在反向传播中,容易出现梯度消失,无法完成深层网络的训练;
函数的敏感区间较短,(-1,1)之间较为敏感,超过区间,则处于饱和状态,
3、tanh
导数为:
tanh,即双曲正切(hyperbolic tangent),类似于幅度增大sigmoid,将输入值转换为-1至1之间。
tanh的导数取值范围在0至1之间,优于sigmoid的0至1/4,在一定程度上,减轻了梯度消失的问题。
tanh的输出和输入能够保持非线性单调上升和下降关系,符合BP(back propagation)网络的梯度求解,容错性好,有界。
4、relu
优点:
(1)梯度计算简单:既是非线性函数,又避免了像sigmoid函数的指数计算量大的问题
(2)relu的导数,在大于0时,梯度为常数,不会导致梯度弥散。
(3)半饱和,值大于零时,不会因为饱和而导致梯度消失
(4)半区域抑制,既有优点(神经网络稀疏性)又有缺点(如果学习率较大可能会有大量神经元死亡,较小就不会有这种现象),起到了类似L1的正则化作用,可以在一定程度上缓解过拟合。
缺点:
(1)输出值不是0对称,都是正值可能走“之字形”优化路线
(2)如果学习率较大可能会有大量神经元死亡,且不可逆转,导致数据多样性丢失
总结:
在神经网络中,隐含层的激活函数,最好选择ReLU。
5、leaky ReLu
leaky ReLU是解决ReLU的负区间导致神经元dead的问题,但是用的不多,因为ReLU可以实现稀疏性。其中k是leak系数(负区间的斜率),一般选择0.01或者0.02,或者通过学习而来。
6、elu
elu激活函数也是为了解决relu的0区间带来的影响,其数学表达为:
但是elu相对于leakrelu来说,计算要更耗时间一些。
7、softmax函数
Softmax - 用于多分类神经网络输出,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解。多个分类的和为1.
原文链接:
https://blog.csdn.net/hhaowang/article/details/88697786
https://blog.csdn.net/u012370185/article/details/94558437