关于深度学习:为神经网络选择正确的激活函数

8次阅读

共计 4008 个字符,预计需要花费 11 分钟才能阅读完成。

咱们都晓得神经网络模型中应用激活函数的次要目标是将非线性个性引入到咱们的网络中,强化网络的学习能力。激活函数利用于暗藏层和输入层中每个节点的称为 z 的输出加权和(此处输出能够是原始数据或前一层的输入)。

在本篇文章中咱们将探讨神经网络中常见的激活函数,并应用可视化技术帮忙你理解激活函数的函数定义和不同的应用场景。

在看完本文章后,你能够将分明地理解何时应用哪种激活函数,并理解不同激活函数的定义。

神经网络中不同层的激活函数

神经网络通常由三种类型的层组成:输出层、暗藏层和输入层。

输出层只保留输出数据,不执行任何计算。因而不须要应用激活函数。

在神经网络的暗藏层中须要应用非线性激活函数,这是因为须要在网络中引入非线性来学习简单的模式。如果没有非线性激活函数,具备许多暗藏层的神经网络将成为一个微小的线性回归模型,这对于从事实世界数据中学习简单模式毫无用处。依据咱们在暗藏层中应用的激活函数的类型,神经网络模型的性能会有很大差别。

在神经网络的输入层内应用激活函数的抉择取决于咱们要解决的问题类型。

线性与非线性函数

大多数激活函数是非线性的。然而有时也在神经网络中应用线性激活函数,例如在解决回归问题的神经网络模型的输入层中应用线性激活函数。

一个线性函数(称为 f)承受输出 z 并返回输入 cz,它是输出乘以常数 c。在数学上,这能够示意为 f(z) = cz。当 c=1 时,函数按原样返回输出,并且不对输出进行任何更改。二维空间中线性函数的图形是一条直线。

任何不是线性的函数都能够归类为非线性函数。非线性函数的图形不是一条直线。它能够是一个简单的模式,也能够是两个或多个线性组件的组合。

不同类型的激活函数

上面将探讨神经网络中罕用的激活函数。

1、Sigmoid

次要特点:

  • 也是逻辑回归模型中应用的逻辑函数。
  • 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 函数存在梯度隐没问题。这也称为梯度饱和。
  • sigmoid 函数收敛慢。
  • 它的输入不是以零为核心的。因而,它使优化过程更加艰难。
  • 因为蕴含了 e^z 项,因而该函数的计算成本很高。

2、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 项,因而该函数的计算成本很高。

3、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,导致前面也不再更新)

4、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 函数。

5、参数 ReLU (PReLU) 激活函数

次要特点:

  • 这是 ReLU 函数的另一个变体。
  • 这简直相似于 leaky ReLU 函数。惟一的区别是值 α 成为可学习的参数(因而得名)。咱们将 α 设置为网络中每个神经元的参数。因而,α 的最优值从网络中学习。

6、Relu6

次要特点:

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

7、SoftMax

次要特点:

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

用法:

  • 必须在多类分类问题的输入层应用 softmax 函数。
  • 不在暗藏层中应用 softmax 函数。

8、二元阶梯激活函数

次要特点:

  • 该函数也称为阈值激活函数。咱们能够将任何值设置为阈值,在这里咱们指定值 0。
  • 如果输出大于阈值,此函数输入值 1。如果输出等于或小于阈值,此函数输入值 0。
  • 这函数输入一个二进制值,0 或 1。
  • 函数由两个线性重量组成。因而该函数是分段线性函数。所以二元阶跃函数是非线性函数,并且不是平滑函数。

用法:

  • 通常不会在古代神经网络模型中应用这个函数。
  • 然而能够应用这个函数来解释诸如“激发神经元”、“感知器的外部工作”等实践概念。因而,阶跃函数在实践上很重要。

9、恒等激活函数

次要特点:

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

用法:

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

10、Swish

次要特点:

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

用法:

  • 仅在暗藏层中应用。
  • 不在神经网络模型的输入层应用这个函数。

毛病:

  • Swish 函数的次要毛病是计算量很大,因为函数中蕴含了 e^z 项。这能够通过应用上面定义的称为“Hard Swish”的非凡函数来防止。

12、H-Swish

次要特点:

  • 与 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 函数。
  • hard swish 是最新的钻研后果,能够试试

https://www.overfit.cn/post/602befa98870469eaad78c612895b748

作者:Rukshan Pramoditha

正文完
 0