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