• 一些激活函数


    摘要

    本篇博客对一些激活函数进行总结,以便加深理解和记忆

    激活函数分类

    • 饱和激活函数:sigmoid、tanh

    • 非饱和激活函数:ReLU、LeakyRelu、ELU、PReLU、RReLU…

    • 饱和的概念:设激活函数f(x),当x趋近于正负无穷时,f(x)趋近于0

    • 非饱和激活函数的优点

      • 非饱和激活函数能解决深层网络带来的梯度消失问题
        • 非饱和激活函数有助于加快收敛速度

    sigmoid

    • 公式: f ( x ) = 1 1 + e − x f(x)= \frac 1 {1+e^{-x}} f(x)=1+ex1
    • 导数公式: f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) f'(x)=f(x)(1-f(x)) f(x)=f(x)(1f(x))
    • 何时使用
      • 将模型的值压缩到[0,1]范围内的概率值,适用于二分类或置信度
      • 梯度平滑,便于求导
    • 缺点
      • 容易造成梯度消失。我们从导函数图像中了解到sigmoid的导数都是小于0.25的,那么在进行反向传播的时候,梯度相乘结果会慢慢的趋向于0。这样几乎就没有梯度信号通过神经元传递到前面层的梯度更新中,因此这时前面层的权值几乎没有更新,这就叫梯度消失。除此之外,为了防止饱和,必须对于权重矩阵的初始化特别留意。如果初始化权重过大,可能很多神经元得到一个比较小的梯度,致使神经元不能很好的更新权重提前饱和,神经网络就几乎不学习
      • 函数输出不是以 0 为中心的,梯度可能就会向特定方向移动,从而降低权重更新的效率
      • 执行指数运算,计算机运行得较慢,比较消耗计算资源

    Sigmoid函数在历史上曾非常常用,但是现在它已经不太受欢迎,实际中很少使用

    Tanh

    • 公式: f ( x ) = e x − e − x e x + e − x        ( = 2 s i g m o i d ( 2 x ) − 1 ) f(x) = \frac {e^x - e^{-x}} {e^x + e^{-x}} \;\;\;(=2sigmoid(2x)-1) f(x)=ex+exexex(=2sigmoid(2x)1)
    • 何时使用
      • 映射范围为[-1,1],且函数以0为中心,比sigmoid更好
      • 负输入将被强映射为负,而零输入被映射为接近零
    • 缺点
      • 仍然存在梯度饱和的问题
      • 依然进行的是指数运算

    Softsign

    • 公式: f ( x ) = x 1 + ∣ x ∣ f(x) = \frac x {1+|x|} f(x)=1+xx
    • 导数: f ′ ( x ) = 1 ( 1 + ∣ x ∣ ) 2 f'(x)= \frac 1 {(1+|x|)^2} f(x)=(1+x)21
    • Softsign函数是Tanh函数的另一个替代选择,是反对称、去中心、可微分,并返回-1和1之间的值。其更平坦的曲线与更慢的下降导数表明它可以更高效地学习,比tTanh函数更好的解决梯度消失的问题
    • Softsign函数的导数的计算比Tanh函数更复杂

    Softmax

    • 公式: f ( x ) = e X i ∑ i e X i f(x)= \frac {e^{X_i}} {\sum_i e^{X_i}} f(x)=ieXieXi

    Softmax函数常在神经网络输出层充当激活函数,将输出层的值通过激活函数映射到0-1区间,将神经元输出构造成概率分布,用于多分类问题中

    ReLU

    • 公式: f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)
    • 何时使用
      • ReLU解决了梯度消失的问题,当输入值为正时,神经元不会饱和
      • 由于ReLU线性、非饱和的性质,在SGD中能够快速收敛
      • 计算复杂度低,不需要进行指数运算
    • 缺点
      • 输出不是以0为中心的
      • Dead ReLU 问题。当输入为负时,梯度为0。这个神经元及之后的神经元梯度永远为0,不再对任何数据有所响应,导致相应参数永远不会被更新

    训练神经网络的时候,一旦学习率没有设置好,第一次更新权重的时候,输入是负值,那么这个含有ReLU的神经节点就会死亡,再也不会被激活。所以,要设置一个合适的较小的学习率,来降低这种情况的发生

    Softplus

    • 公式: f ( x ) = l o g ( 1 + e x ) f(x)=log(1+e^x) f(x)=log(1+ex)

    Softplus函数可以看作是ReLU函数的平滑

    Noisy ReLU

    • 公式: f ( x ) = m a x ( 0 , x + Y ) , Y   N ( 0 , σ ( x ) ) f(x)=max(0,x+Y),Y~N(0,σ(x)) f(x)=max(0,x+Y),Y N(0,σ(x))

    ReLU被扩展以包括高斯噪声(Gaussian noise),在受限玻尔兹曼机解决计算机视觉任务中得到应用,实验结果表明Maxout与Dropout组合使用可以发挥比较好的效果

    Leaky ReLU

    • 公式: f ( x ) = m a x ( a x , x ) f(x)=max(ax,x) f(x)=max(ax,x)
    • 何时使用
      • 解决了ReLU输入值为负时神经元出现的死亡的问题
      • Leaky ReLU线性、非饱和的性质,在SGD中能够快速收敛
      • 计算复杂度低,不需要进行指数运算
    • 缺点
      • 函数中的α,需要通过先验知识人工赋值(一般设为0.01)
      • 有些近似线性,导致在复杂分类中效果不好

    从理论上讲,Leaky ReLU 具有 ReLU 的所有优点,而且 Dead ReLU 不会有任何问题,但在实际操作中,尚未完全证明 Leaky ReLU 总是比 ReLU 更好

    PRelu

    • 公式
      f ( a , x ) = [ a x ,        x < 0 x , x ≥ 0 ] f(a,x) =
      [ax,x<0x,x0]" role="presentation" style="position: relative;">[ax,x<0x,x0]
      f(a,x)=[ax,x<0x,x0]

    PRelu激活函数也是用来解决ReLU带来的神经元坏死的问题。与Leaky ReLU激活函数不同的是,PRelu激活函数负半轴的斜率参数α 是通过学习得到的,而不是手动设置的恒定值

    ELU

    • 公式

    f ( a , x ) = [ a ( e x − 1 ) ,      x ≤ 0 x , x > 0 ] f(a,x)=

    [a(ex1),x0x,x0]" role="presentation">[a(ex1),x0x,x0]
    f(a,x)=[a(ex1),x0x,x0]

    • 何时使用
      • ELU试图将激活函数的输出均值接近于零,使正常梯度更接近于单位自然梯度,从而加快学习速度
      • ELU 在较小的输入下会饱和至负值,从而减少前向传播的变异和信息
    • 缺点
      • 计算的时需要计算指数,计算效率低

    与Leaky ReLU和PRelu激活函数不同的是,ELU激活函数的负半轴是一个指数函数而不是一条直线

    SELU

    • 公式

    f ( a , x ) = λ [ a ( e x − 1 ) ,      x ≤ 0 x , x > 0 ] ,      λ = 1.0507 , a = 1.6733 f(a,x)=λ

    [a(ex1),x0x,x0]" role="presentation" style="position: relative;">[a(ex1),x0x,x0]
    ,\;\;λ=1.0507,a=1.6733 f(a,x)=λ[a(ex1),x0x,x0],λ=1.0507,a=1.6733

    • SELU 允许构建一个映射 g,其性质能够实现 SNN(自归一化神经网络)
    • SNN 不能通过ReLU、sigmoid 、tanh 和 Leaky ReLU 实现
    • 这个激活函数需要有:
      • 负值和正值,以便控制均值
      • 饱和区域(导数趋近于零),以便抑制更低层中较大的方差
      • 大于 1 的斜率,以便在更低层中的方差过小时增大方差
      • 连续曲线。后者能确保一个固定点,其中方差抑制可通过方差增大来获得均衡。通过乘上指数线性单元(ELU)来满足激活函数的这些性质,而且 λ>1 能够确保正值净输入的斜率大于 1

    SELU激活函数是在自归一化网络中定义的,通过调整均值和方差来实现内部的归一化,这种内部归一化比外部归一化更快,这使得网络能够更快得收敛

    Swish

    • 公式: f ( x ) = x ∗ s i g m o i d ( x ) f(x)=x*sigmoid(x) f(x)=xsigmoid(x)
    • Swish激活函数无界性有助于防止慢速训练期间,梯度逐渐接近 0 并导致饱和
    • 有界性也是有优势的,因为有界激活函数可以具有很强的正则化(防止过拟合, 进而增强泛化能力),并且较大的负输入问题也能解决
    • Swish激活函数在x=0附近更为平滑,而非单调的特性增强了输入数据和要学习的权重的表达能力

    GELU

    • 公式
      f ( x ) = x ∗ p = x Φ ( x ) ,      Φ 为标准正态分布的积累分布函数 Φ ( x ) = 1 2 Π ∫ − ∞ x e − t 2 2 d t = 1 2 ( 1 + e r f ( x 2 ) ) e r f ( x ) = 1 Π ∫ − x x e − t 2 d t = 2 Π ∫ 0 x e − t 2 d t ,高斯误差函数 , 与 t a n h ( x ) 比较接近 f(x)=x*p=xΦ(x),\;\;Φ为标准正态分布的积累分布函数\\ Φ(x)=\frac 1 {\sqrt{2Π}} \int_{-∞}^xe^{-\frac {t^2} 2} dt = \frac 1 2(1+erf(\frac x {\sqrt 2}))\\ erf(x)=\frac 1 {\sqrt Π}\int_{-x}^xe^{-t^2}dt=\frac 2{\sqrt Π}\int_0^xe^{-t^2}dt,高斯误差函数,与 tanh(x) 比较接近 f(x)=xp=xΦ(x),Φ为标准正态分布的积累分布函数Φ(x)= 1xe2t2dt=21(1+erf(2 x))erf(x)=Π 1xxet2dt=Π 20xet2dt,高斯误差函数,tanh(x)比较接近
    • GELU(高斯误差线性单元)是一个非初等函数形式的激活函数,是RELU的变种,被GPT-2、BERT、RoBERTa、ALBERT 等NLP模型所采用,将ReLU及其变种与Dropout合二为一
    • GELU 与 Swish 激活函数的函数形式和性质非常相像,一个是固定系数 1.702,另一个是可变系数 β(可以是可训练的参数,也可以是通过搜索来确定的常数),两者的实际应用表现也相差不大

    GLU

    • 公式
      G L U ( a , b ) = a ⊙ s i g m o i d ( b ) G L U ( x , W , V ) = s i g m o i d ( x W ) ⊙ x V GLU(a,b)=a⊙sigmoid(b)\\ GLU(x,W,V)=sigmoid(xW)⊙xV GLU(a,b)=asigmoid(b)GLU(x,W,V)=sigmoid(xW)xV
    • GLU通过门控机制对输出进行把控,像Attention一样可看作是对重要特征的选择。其优势是不仅具有通用激活函数的非线性,而且反向传播梯度时具有线性通道,类似ResNet残差网络中的加和操作传递梯度,能够缓解梯度消失问题
    • 由于 sigmoid和tanh的导数会downscaling,导致梯度消失问题。而GLU相比sigmoid多出一个线性乘积项,因此能够加速收敛

    GEGLU

    • 公式
      G E G L U ( x , W , V ) = G E L U ( x W ) ⊙ x V GEGLU(x,W,V)=GELU(xW)⊙xV GEGLU(x,W,V)=GELU(xW)xV
    • GEGLU是GLU激活函数的变体,将GLU中的sigmoid替换为GELU,Google的T5 Transformer模型中对Feed-Forward Network采用了GEGLU,性能提升比较显著
    • 除了用GELU替代GLU中的sigmoid外,还可用ReLU、Swish等,甚至取消其中的激活函数(Bilinear(x, W, V) = xW · xV),但是这些变体相比GLU差异不是特别显著

    Mish

    • 公式: f ( x ) = x ∗ t a n h ( l n ( 1 + e x ) ) f(x)=x*tanh(ln(1+e^x)) f(x)=xtanh(ln(1+ex))

    Mish激活函数的函数图像与Swish激活函数类似,但要更为平滑一些,缺点是计算复杂度要更高一些

    Maxout

    • 公式: h i ( x ) = m a x j ∈ [ 1 , k ] z i j , z i j = x T W i j + b i j , W ∈ R d ∗ m ∗ k h_i(x)=max_{j∈[1,k]}z_{ij},z_{ij}=x^TW_{ij}+b_{ij},W∈R^{d*m*k} hi(x)=maxj[1,k]zij,zij=xTWij+bij,WRdmk
    • 优点
      • 拟合能力非常强,可以拟合任意的凸函数
      • 具有ReLU的所有优点,线性、不饱和性
      • 没有ReLU的一些缺点,如:神经元的死亡
    • 缺点:每个神经元中有两组(w,b)参数,那么参数量就增加了一倍,导致了整体参数的数量激增

    Maxout可以看做是在深度学习网络中加入一层激活函数层,包含一个参数k.这一层相比ReLU,sigmoid等,其特殊之处在于增加了k个神经元,然后输出激活值最大的值

  • 相关阅读:
    数据交易是什么?看这篇文章
    《网络运维 - 基础知识》
    vue配置环境变量
    Django项目使用uwsgi+nginx部署上线
    水声功率放大器的应用场景是什么
    python将xml格式文件转成png或者pdf格式
    拦 截 器
    Scrapy 2.6.2 代理设置,Proxy-Authorization 安全漏洞修复
    无需租用云服务器:使用Linux本地搭建web服务并实现内网穿透发布公网访问的详细教程
    快速完成工信部APP备案流程_以阿里云APP备案为例
  • 原文地址:https://blog.csdn.net/qq_44930244/article/details/139740131