常用激活函數
1.sigmoid函数
\[\sigma(x) = \frac{1}{1+e^{-x}}\,
\]
过去反向传播很流行使用,但随着神经网络层数增加,反向传播过程中会出现梯度消失。
sigmoid函数导数
梯度消失:反向传播利用的是梯度下降法,反向传播时,每经过一个sigmoid层,就需要乘以一个小于0.25的梯度(也就是sigmoid函数的导数),随着神经网络层数增加,梯度会越来越小,最后梯度衰减到接近0,即梯度消失。
2.tanh函数
\[\tanh(x) = \frac{\sinh(x)}{\cosh(x)} = \frac{e^x-e^{-x}}{e^x+e^{-x}}
\]
tanh函数的输出区间是在(-1,1)之间,整个函数是以0为中心的(一般二分类问题中,隐藏层用tanh函数)
3.relu函数
单侧抑制功能
解决梯度消失的原则就是靠梯度等于或接近1。
\[f(x) = \max(0, x)
\]
优点:
①只在大于0的区域进行传播,带来一个优点稀疏性。稀疏性不仅对网络性能提高有帮助,而且从神经科学角度,神经元的激活率非常低,这是一种仿生的模拟。
②由于relu函数只有线性关系,所以不管是前向传播还是反向传播,计算速度都比sigmod和tanh要快很多(sigmod和tanh是计算指数)。
缺点:
③在输入小于0区域,如果有很大梯度传播过来,ReLU就会死掉(Dying ReLU)。
4.ELU函数
\[f(x) = \left\{ \begin{array}{rcl}
x, & x>0 \\
\alpha(e^x-1), & x\leq0
\end{array}\right.
\]
可以消除ReLU死掉的问题,不过还是有梯度爆炸和指数运算的问题。
梯度爆炸:如果反向传播的梯度是大于1的,随着神经网络层数增加,梯度越来越大。
5.PReLU函数
\[f(x) = \max(ax, x)
\]
优点:
①避免ReLU死掉的问题。
②相比于ELU,PReLU在负数区域内是线性运算,计算速度快。
③当α=0.01时,算是特殊情况,我们叫PReLU为Leaky ReLU(用非常小的系数让信息和梯度的传播不至于中断)
总体来说,这些激活函数都有优点和缺点,应该看具体情况具体分析。

浙公网安备 33010602011771号