PyTorch — 最常见激活函数的选择

作者 : admin 本文共924个字,预计阅读时间需要3分钟 发布时间: 2024-06-16 共31人阅读
  • 首先,简单复习下什么是梯度:梯度是偏微分的集合

    • 举例说明:对于

      z

      =

      y

      2

      x

      2

      :

      z

      =

      (

      z

      x

      ,

      z

      y

      )

      =

      2

      x

      ,

      2

      y

      z = y^2-x^2:
      abla z= (\frac{\partial z}{\partial x}, \frac{\partial z}{\partial y}) = (2x, 2y)

      z=y2x2:z=(xz,yz)=2x,2y

  • 获取极小值 minima 的方法核心:

    θ

    t

    +

    1

    =

    θ

    t

    α

    f

    (

    θ

    t

    )

    heta_{t+1}= heta_t-\alpha
    abla f( heta_t)

    θt+1=θtαf(θt)


  • torch.sigmoid(x)

    Sigmoid

    (

    x

    )

    =

    1

    1

    +

    e

    x

    ext{Sigmoid}(x)=\frac{1}{1+e^{-x}}

    Sigmoid(x)=1+ex1
    PyTorch — 最常见激活函数的选择插图

    • 优点:连续函数,便于求导,可以用作输出层
    • 缺点:在变量取绝对值非常大时会出现饱和现象(函数会变得很平),且对输入的微小改变会变得不敏感;在反向传播时,当梯度接近于0,容易出现梯度消失,从而无法完成深层网络训练
    • 对应类 torch.nn.Sigmoid (layer = torch.nn.Sigmoid(), layer(x) )
  • torch.tanh(x)

    Tanh

    (

    x

    )

    =

    e

    x

    e

    x

    e

    x

    +

    e

    x

    ext{Tanh}(x) = \frac{e^x-e^{-x}}{e^x+e^{-x}}

    Tanh(x)=ex+exexex, sigmoid 经过缩放平移获得
    PyTorch — 最常见激活函数的选择插图(1)

    • 优点:同 sigmoid 且均值是0 (更好)
    • 缺点:仍存在饱和问题
    • 对应类 torch.nn.Tanh(layer = torch.nn.Tanh(), layer(x) )
  • torch.relu(x)

    ReLU

    (

    x

    )

    =

    max

    (

    0

    ,

    x

    )

    ext{ReLU}(x)=\max(0,x)

    ReLU(x)=max(0,x)
    PyTorch — 最常见激活函数的选择插图(2)

    • 优点:高效;在x>0区域上,不会出现梯度饱和、梯度消失
    • 缺点:Dead ReLU Problem (在x<0时,梯度为0:这个神经元及之后的神经元梯度永远为0,不再对任何数据有所响应,导致相应参数永远不会被更新)
    • 对应类 torch.nn.ReLU(layer = torch.nn.ReLU(), layer(x) )

  • B站视频参考资料
本站无任何商业行为
个人在线分享-虚灵IT资料分享 » PyTorch — 最常见激活函数的选择
E-->