神经网络中常见激活函数及特点

从最开始的逻辑回归到后来的CNN,RNN,我们经常会听到激活函数这个词,也经常会听到sigmod函数会造成神经网络梯度消失,BN为什么能缓解梯度消失问题,这些都和激活函数相关,接下来我们来讲解下激活函数。
学习激活函数前,我们带着这几个问题?
1.什么是激活函数


在神经网络中,神经元的前向传播计算如上图所示,
z_1=w_1x_1+w_2x_2+b

y=g(z_1)
,其中
g(x)
为激活函数。
2.激活函数有什么作用?

  • 加入激活函数可以给模型加入非线性因素,提升模型表达能力。

3.有哪些激活函数,这些激活函数有什么特点?

  • (1)sigmod 函数


  • (2)tanh 函数


  • (3)Relu函数


  • (4)Leaky ReLU函数


  • (5)ELU 函数


    image.png
  • (6)MaxOut函数
    4.怎么选择合适的激活函数?
    3.什么是梯度爆炸和梯度消失?

    • 深层神经网络在使用梯度下降法进行反向传播时会出现梯度消失和梯度爆炸问题,网络越深,梯度消失和梯度爆炸风险越大。
  • 梯度消失:


    假设在一个4层单神经元的网络模型中。
    y_i=σ(w_ix_i+bi)
    σ(x)=\frac{1}{1+e^-x}
    \frac{∂c}{∂y_1}=\frac{∂c}{∂y_4}\frac{∂y_4}{∂z_4}\frac{∂z_4}{∂x_4}\frac{∂x_4}{∂z_3}\frac{∂z_3}{∂x_3}\frac{∂x_3}{∂z_2}\frac{∂z_2}{∂x_2}\frac{∂x_2}{∂z_1}\frac{∂z_1}{∂x_z}=\frac{∂c}{∂y_4}*σ'(z_4)*w_4*σ'(z_3)*w_3*σ'(z_2)*w_2*σ'(z_1)*w_1
    σ(x)为sigmod函数
    0<=σ'(x)=σ'(x)*(1-σ'(x))=-(σ'(x)-\frac12)+\frac14<=\frac14
    因此每次进行梯度更新时,传到前面网络的梯度值会越来越小,导致梯度消失,浅层的参数更新缓慢甚至无法更新,使用其他激活函数,其导函数值也是[0,1]之间,因此同样存在梯度消失问题,sigmod函数最为明显,同时如wi过大时,反向求导时会发生梯度爆炸

  • 在神经网络中,梯度消失更容易出现。

  • 怎么解决梯度消失和梯度爆炸

    • 用ReLU、Leaky ReLU、PReLU、RReLU、Maxout等替代sigmoid函数。
    • 用Batch Normalization。
    • 可以通过添加正则项,避免梯度爆炸,压缩wi权重大小。
    • LSTM的结构设计也可以改善RNN中的梯度消失问题。
    • 使用残差结构
    • 使用更有的初始化方式,或者采用pre_train,fine_tuning模式

未完成,待完善
参考文章:
https://cloud.tencent.com/developer/article/1335704
https://blog.csdn.net/tyhj_sf/article/details/79932893
https://www.cnblogs.com/makefile/p/activation-function.html