深度学习激活函数 深入浅出 通俗易懂 教你如何选择合适的激活函数

在这里插入图片描述


梯度消失问题
Sigmoid
梯度爆炸问题
ReLU整流
解决梯度消失
死亡ReLU问题,有利有弊
ELU指数
计算成本高
无死亡ReLU问题
Leaky ReLU渗透
微分两部分都是线性相比ELU
无死亡ReLU问题
SELU扩展指数
没有梯度消失/爆炸问题

图看不懂不要紧,把文章看完就肯定理解了。这是一个方便总结的图


1 概述

本文会介绍六种激活函数,并且比较他们的区别。

1.1 梯度消失问题

w ( L ) = w ( L ) − l e a r n i n g r a t e × ∂ C ∂ w ( L ) w^{(L)} = w^{(L)} - learning rate \times \frac{\partial C}{\partial w^{(L)}} w(L)=w(L)learningrate×w(L)C

  • ∂ C ∂ w ( L ) \frac{\partial C}{\partial w^{(L)}} w(L)C很小的时候,就会出现梯度消失的问题,其中许多权重和偏置只能收到非常小的更新。
  • 而且不同层的学习速率不同,隐藏层n的学习速率会高于隐藏层n-1。这意味着后面的层几乎肯定会被网络中更前面的层受到更多的优待。
  • 同样的会出现梯度爆炸的案例。

2 Sigmoid

s i g m o i d ( x ) = 1 1 + e − x sigmoid(x) = \frac{1}{1+e^{-x}} sigmoid(x)=1+ex1
sigmoid这样的函数会遇到严重的梯度消失问题,这个问题使得sigmoid函数在神经网络中并不实用,我们应该用后面介绍的其他激活函数。

3 ReLU整流线性单元

R e L U ( X ) = m a x ( 0 , x ) ReLU(X) = max(0,x) ReLU(X)=max(0,x)

  • 这个是为了解决梯度消失的问题
  • 会出现死亡ReLU问题,计算梯度的时候大多数值都小于0,我们会得到相当多不会更新的权重和偏置。
  • 但是死亡ReLU可以带来稀疏性,因为神经网络激活矩阵会有很多0,所以计算成本和效率优化。
  • 但是ReLU不能避免梯度爆炸问题

4 ELU指数线性单元

E L U ( x ) = { x i f x > 0 α ( e x − 1 ) i f x < 0 ELU(x) = \left\{ \begin{aligned} x \quad ifx>0\\ \alpha(e^x-1) \quad if x < 0 \end{aligned} \right. ELU(x)={xifx>0α(ex1)ifx<0
α ∈ [ 0.1 , 0.3 ] \alpha \in [0.1,0.3] α[0.1,0.3]这是经验结论

  • 因为引入了指数,所以ELU的计算成本高于ReLU
  • 能避免死亡ReLU问题
  • 神经网络不学习 α \alpha α
  • 不能解决梯度爆炸问题

5 Leaky ReLU渗漏型整流线性单元

L R e L U ( x ) = { x x > 0 α x x < 0 LReLU(x) = \left\{ \begin{aligned} x \quad x>0\\ \alpha x \quad x<0 \end{aligned} \right. LReLU(x)={xx>0αxx<0
α ∈ [ 0.1 , 0.3 ] \alpha \in [0.1,0.3] α[0.1,0.3]

  • 避免死亡ReLU问题
  • 运算速度快于ELU
  • 无法避免梯度爆炸问题
  • 神经网络不学习 α \alpha α
  • 微分后,两部分都是线性的,ELU一部分是线性一部分是非线性的。

6 SELU扩展型指数线性单元激活函数

S E L U ( x ) = λ { x x > 0 α ( e x − 1 ) x < 0 SELU(x) = \lambda\left\{ \begin{aligned} x \quad x>0\\ \alpha (e^x-1) \quad x<0 \end{aligned} \right. SELU(x)=λ{xx>0α(ex1)x<0
α = 1.673263.... \alpha=1.673263.... α=1.673263....
λ = 1.0507009... \lambda=1.0507009... λ=1.0507009...

  • SELU可以对神经网络进行子归一化,其输出值为均值为0,标准差为1.。内部归一化比外部归一化快,这意味着网络可以更快的收敛
  • 不可能出现梯度爆炸或者消失的问题
  • 相对较新,需要更多论文比较性的探索其在CNN和RNN等架构中的应用
  • 使用SELU在CNN中应用的论文

7 GELU高斯误差线性单元激活函数

GELU在最近的Transformer模型(谷歌的BERT和OpenAI的GPT-2)中得到了应用
G E L U ( x ) = 0.5 x ( 1 + tanh ⁡ ( 2 / π × ( x + 0.044715 x 3 ) ) ) GELU(x) = 0.5x(1+\tanh(\sqrt{2/\pi}\times(x+0.044715x^3))) GELU(x)=0.5x(1+tanh(2/π ×(x+0.044715x3)))
这个函数的图形非常有意思:
在这里插入图片描述
微分函数非常复杂,在此不做赘述。

  • 在NLP领域最佳,在Transformer模型中表现最好。
  • 避免梯度消失问题
  • 相当新颖的一个激活函数

梯度消失问题
Sigmoid
梯度爆炸问题
ReLU整流
解决梯度消失
死亡ReLU问题,有利有弊
ELU指数
计算成本高
无死亡ReLU问题
Leaky ReLU渗透
微分两部分都是线性相比ELU
无死亡ReLU问题
SELU扩展指数
没有梯度消失/爆炸问题

如果有能力的小伙伴请看下面这篇进阶版本哦!
有数学基础像更深研究的朋友点这里看这个博文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值