神经网络中的 Tanh 激活函数

Tanh(双曲正切)是一种激活函数,它能将输入值转换为介于 -1 和 1 之间的数值。

从数学上讲,它的定义如下:

f(x) = \tanh(x) = \frac{e^x – e^{-x}}{e^x + e^{-x}} = \frac{\sinh(x)}{\cosh(x)}

其中:

  • e 是欧拉数(约等于 2.718)。
  • x 是函数的输入值。

Tanh 激活函数的图像如下所示:

!tanhTanh 激活函数图像

  • 随着输入变得越来越正,输出会趋近于 1。
  • 随着输入变得越来越负,输出会趋近于 -1。
  • 当 x=0 时,输出为 0,这是函数的中心点。

该函数具有以下特性:

  • 形状:它呈现 S 形曲线,通常被称为类似 Sigmoid 的曲线。
  • 对称性:tanh 函数围绕原点 (0) 对称,这一点与其他激活函数(如输出范围在 0 到 1 之间的 Sigmoid 函数)不同。

为什么要在神经网络中使用 Tanh?

Tanh 函数拥有几个显著的优势,这使其在神经网络中得到了广泛应用:

  • 非线性:Tanh 为模型引入了非线性,这使得神经网络能够学习数据中的复杂模式和关系。如果没有非线性激活函数,无论神经网络有多少层,它在本质上都将表现为一个线性模型。
  • 零中心化:与输出值介于 0 和 1 之间的 Sigmoid 函数不同,Tanh 函数的输出是围绕 0 对称的。这使得 Tanh 激活函数在许多类型的任务中更为实用,因为其输出均值更接近于零,从而有助于提高训练效率并加快收敛速度。
  • 梯度表现:与 Sigmoid 激活函数相比,Tanh 有助于缓解梯度消失问题(在一定程度上)。这是因为 tanh 函数的梯度通常高于 sigmoid 函数的梯度,能够在反向传播过程中实现更好的权重更新。

Tanh 的导数

Tanh 函数的导数在训练神经网络的反向传播步骤中也非常有用:

\frac{d}{dx} \tanh(x) = 1 – \tanh^2(x)

!Derivative-of-Tanh-Tanh 激活函数的导数图像

该导数始终为正,且在 x=0 处达到最大值,这有助于基于梯度的优化。然而,与 Sigmoid 类似,当输入值过大或过小时,tanh 也会受到梯度消失问题的困扰。这会导致梯度变得非常小,从而在深层网络中减缓训练速度。

使用 Tanh 的优势

  • 零点对称:由于输出围绕零对称,网络更有可能平衡权重。这有助于确保梯度不会持续增大或减小幅度,从而使训练更快、更稳定。
  • 改进的收敛性:Tanh 函数是可微的,使其成为使用随机梯度下降(SGD)等基于梯度的优化算法训练深度网络的理想选择。
  • 梯度下降效率:与限制在 0 和 1 之间的 Sigmoid 不同,tanh 函数介于 -1 和 1 之间的输出有助于在训练期间更好地更新权重,从而提高收敛速度。

Tanh 的劣势

  • 梯度消失问题:与 Sigmoid 函数类似,当输入值较大(无论是正还是负)时,tanh 会遭受梯度消失问题。当 tanh 函数的输入非常大或非常小时,梯度会趋近于零,这可能会在反向传播期间减慢或停止学习,特别是在深层网络中。
  • 并非适用于所有任务:虽然 tanh 在很多情况下效果良好,但对于所有类型的神经网络架构来说,它可能不是最佳选择。例如,ReLU(线性整流单元)由于其在缓解梯度消失问题上的简单性和高效性,在深度网络中越来越受欢迎。
  • 对异常值敏感:输入中的极端值可能导致梯度接近零的饱和区域,从而使学习变得缓慢或无效。如果 tanh 函数的输入没有得到适当的缩放,就可能会发生这种情况。

何时使用 Tanh?

在以下情况下,Tanh 函数非常有用:

  • 数据已经归一化或围绕零中心化。
  • 我们正在构建浅层神经网络(即层数较少的网络)。
  • 我们正在处理负值很重要且需要保留的数据。

然而,对于更深层的网络,ReLULeaky ReLU 等替代方案可能更好,因为它们能更有效地避免梯度消失问题。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/42734.html
点赞
0.00 平均评分 (0% 分数) - 0