深度学习之常用的激活函数

目录

激活函数

torch.nn.Sigmoid()

torch.nn.Tanh()

 torch.nn.ReLU()

 torch.nn.LeakReLU()

Relu6

torch.nn.Softmax()

恒等激活函数

 torch.nn.Swish()

 torch.nn.Hardswish ()

总结


激活函数

torch.nn.Sigmoid()

也叫logistic激活函数

主要特点:

  • 也是逻辑回归模型中使用的逻辑函数。
  • sigmoid 函数是一个 s 形图。
  • 这是一个非线性函数。
  • sigmoid 函数将其输入转换为 0 到 1 之间的概率值。
  • 它将大的负值转换为 0,将大的正值转换为 1。
  • 对于输入 0,它返回 0.5。所以 0.5 被称为阈值,它可以决定给定的输入属于什么类型的两个类。

用法:

  • 早期,Sigmoid 函数被用作 MLP、CNN 和 RNN 中隐藏层的激活函数。
  • 现在,sigmoid 函数仍在 RNN 中使用。
  • 我们通常不将 sigmoid 函数用于 MLP 和 CNN 中的隐藏层,因为太慢了,我们在那里使用 ReLU 或 Leaky ReLU。
  • 当我们构建二进制分类器时,输出层必须使用 sigmoid 函数,其中输出被解释为类标签,具体取决于函数返回的输入的概率值。

由于以下缺点,我们通常不在隐藏层中使用 sigmoid 函数。

  • sigmoid 函数存在梯度消失问题。 这也称为梯度饱和。
  • sigmoid 函数收敛慢。
  • 它的输出不是以零为中心的。 因此,它使优化过程更加困难。
  • 由于包含了 e^z 项,因此该函数的计算成本很高。

torch.nn.Tanh()

双曲正切函数

主要特点:

  • tanh(正切双曲线)函数的输出始终介于 -1 和 +1 之间。
  • 像 sigmoid 函数一样,它有一个 s 形图。这也是一个非线性函数。
  • 与 sigmoid 函数相比,使用 tanh 函数的一个优点是 tanh 函数以零为中心。这使得优化过程更加容易。
  • tanh 函数的梯度比 sigmoid 函数的梯度更陡。

用法:

  • 目前tanh 函数还被用作 MLP、CNN 和 RNN 中隐藏层的激活函数。
  • tanh 函数也在 RNN 中使用。
  • 我们通常不将 tanh 函数用于 MLP 和 CNN 中的隐藏层。
  • 我们从不在输出层使用 tanh 函数。

由于以下缺点,我们通常不在隐藏层中使用 tanh 函数。

  • tanh 函数存在梯度消失问题。
  • 由于包含了 e^z 项,因此该函数的计算成本很高。

 torch.nn.ReLU()

修正线性单元,收敛速度快,计算速度快,目前深度学习最常用的激活函数

主要特点:

  • ReLU(整流线性单元)激活函数是 sigmoid 和 tanh 激活函数的绝佳替代品。
  • ReLU 发明是深度学习领域最重要的突破之一。
  • 不存在梯度消失问题。
  • 计算成本很低。认为 ReLU 的收敛速度比 sigmoid 和 tanh 函数快 6 倍。
  • 如果输入值为 0 或大于 0,则 ReLU 函数按原样输出输入。如果输入小于 0,则 ReLU 函数输出值 0。
  • ReLU 函数由两个线性分量组成。因此,ReLU 函数是一个分段线性函数。所以ReLU 函数是一个非线性函数。
  • ReLU 函数的输出范围可以从 0 到正无穷大。
  • 收敛速度比 sigmoid 和 tanh 函数快。这是因为 ReLU 函数对一个线性分量具有固定导数(斜率),而对另一个线性分量具有零导数。因此,使用 ReLU 函数的学习过程要快得多。
  • 使用 ReLU 可以更快地执行计算,因为函数中不包含指数项。

用法:

  • ReLU 函数是MLP 和 CNN 神经网络模型中隐藏层的默认激活函数。
  • 我们通常不会在 RNN 模型的隐藏层中使用 ReLU 函数。相反,我们在那里使用 sigmoid 或 tanh 函数。
  • 我们从不在输出层使用 ReLU 函数。

缺点:

  • 使用 ReLU 函数的主要缺点是它有一个dying ReLU问题。(当梯度值过大时,权重更新后为负数,经relu后变为0,导致后面也不再更新)

 

 torch.nn.LeakReLU()

ReLU是将所有的负值都设为零,Leaky ReLU是给所有负值赋予一个非零斜率

主要特点:

  • leaky ReLU 激活函数是默认 ReLU 函数的修改版本。
  • 与 ReLU 激活函数一样,该函数不存在梯度消失问题。
  • 如果输入值是 0 大于 0,leaky ReLU 函数会像默认的 ReLU 函数一样输出输入。 但是如果输入小于 0,leaky ReLU 函数会输出一个由 αz 定义的小负值(其中 α 是一个小的常数值,通常为 0.01,z 是输入值)。
  • 它没有任何具有零导数(斜率)的线性分量。 因此它可以避免dying ReLU 问题。
  • 使用leaky ReLU 的学习过程比默认的 ReLU 更快。

用法:

  • ReLU 函数的相同用法也适用于leaky ReLU 函数。

 

Relu6

主要特点:

  • ReLU 和 ReLU6 之间的主要区别在于,ReLU 允许正侧的值非常高,而 ReLU6 限制为正侧的值 6。 任何 6 或大于 6 的输入值都将被限制为值 6(因此得名)。
  • ReLU6 函数由三个线性分量组成。 它是一个非线性函数。

torch.nn.Softmax()

用于多分类神经网络的输出

 

 

主要特点:

  • 这也是一个非线性激活函数。
  • softmax 函数计算一个事件(类)在 K 个不同事件(类)上的概率值。 它计算每个类别的概率值。 所有概率的总和为 1,这意味着所有事件(类)都是互斥的。

用法:

  • 必须在多类分类问题的输出层使用 softmax 函数。
  • 不在隐藏层中使用 softmax 函数。

恒等激活函数

主要特点:

  • 这也被称为线性激活函数。
  • 当我们讨论激活函数时,这是唯一一个被认为是线性函数的函数。
  • 这个函数按原样输出输入值。对输入不做任何更改。

用法:

  • 该函数仅用于解决回归问题的神经网络模型的输出层。
  • 不要在隐藏层中使用这个函数。

 

 torch.nn.Swish()

主要特点:

  • 该函数是通过将 sigmoid 函数乘以输入 z 构成的。
  • 这是一个非线性函数。
  • 该图与 ReLU 激活函数的图非常相似。
  • 曲线比 ReLU 激活函数更平滑。 在训练模型时,这种平滑度很重要。 该函数在训练时很容易收敛。

用法:

  • 仅在隐藏层中使用。
  • 不在神经网络模型的输出层使用这个函数。

缺点:

  • Swish 函数的主要缺点是计算量很大,因为函数中包含了 e^z 项。 这可以通过使用下面定义的称为“Hard Swish”的特殊函数来避免。

 torch.nn.Hardswish ()

 

主要特点:

  • 与 Swish 函数的曲线基本相同。这在计算上很便宜,因为 sigmoid 函数被线性模拟取代。

用法:

  • H-Swish的用法类似于 Swish 激活函数的用法。

总结

选择正确的激活函数可以被认为是一种超参数调整,通过理解问题定义并考虑模型的性能和损失函数的收敛性来手动选择激活函数。
这里总结了上面讨论的不同激活函数的使用场景。当训练神经网络模型时,可以作为参考:

  • 神经网络的输入层节点不需要激活函数,在定义输入层时无需担心激活函数。
  • 输出层激活函数取决于我们要解决的问题类型。在回归问题中,我们使用线性(恒等)激活函数。在二元分类器中,我们使用 sigmoid 激活函数。在多类分类问题中,我们使用 softmax 激活函数。在多标签分类问题中,我们使用 sigmoid 激活函数,为每个类输出一个概率值。
  • 隐藏层中使用非线性激活函数,通过考虑模型的性能或损失函数的收敛性来做出选择。可以从 ReLU 激活函数开始,如果你有一个Dying ReLU 问题,试试leaky ReLU。
  • 在 MLP 和 CNN 神经网络模型中,ReLU 是隐藏层的默认激活函数。
  • 在 RNN 神经网络模型中,我们对隐藏层使用 sigmoid 或 tanh 函数。 tanh 函数具有更好的性能。
  • 只有恒等激活函数被认为是线性的。所有其他激活函数都是非线性的。
  • 不要在隐藏层中使用 softmax 和恒等函数,在隐藏层中使用 tanh、ReLU、ReLU 的变体、swish 和 hard swish 函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值