跳转至

P5-3.3 tanh

Section ID: P5-3.3 Version: v2026.07.20

在 P5-3.2 里,我们已经看到 sigmoid 会把分数压到 0 与 1 之间。tanh 也会做类似的 S 形压缩,但它和 sigmoid 的关键差别在于:输出范围是 \(-1\)\(1\)

当你希望在内部表征里同时保留负值与正值,并且让表征围绕 0 展开时,tanh 就会成为一个很重要的比较基准。

tanh 的 0 中心变换问题

  • tanh 的公式与输出范围是什么?
  • 为什么它与 sigmoid 不同,会被叫作 0 中心(zero-centered)?
  • 为什么保留负号与正号会这么重要?
  • tanh 的饱和区会带来什么限制?

同时包含 sigmoid 与 ReLU 的公式比较会在 P5-3.5 一起整理。输出层选择的问题则会在 P5-3.6 单独处理。

同时保留负信号与正信号的判断标准

  • 能把 tanh 解释成一个会把值压缩到 -1 与 1 之间、并且以 0 为中心的函数
  • 能理解 tanh 比 sigmoid 更直接地保留负号与正号。
  • 能说明:在很大的正数与很大的负数区间,tanh 同样会出现饱和。
  • 能解释 tanh 会给隐藏层表征带来怎样的感觉。

tanh 的公式

tanh 的公式写成下面这样。

\[ \tanh(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}} \]

这个公式的结果永远落在 \(-1\)\(1\) 之间。

  • 如果 \(z\) 是很大的正数,输出就会接近 1。
  • 如果 \(z=0\),输出就是 0。
  • 如果 \(z\) 是很大的负数,输出就会接近 -1。

与只把值保留在 0 到 1 之间的 sigmoid 不同,tanh 会同时表达负方向与正方向。

为什么说它是 0 中心

tanh 之所以被叫作 0 中心,是因为当 \(z=0\) 时输出也是 0,负输入会保留成负输出,正输入会保留成正输出。

tanh 激活函数曲线

输入区间 输出直觉 读者首先该看的点
很大的负数 接近 -1 稳定一侧或相反方向的信号,会以负值形式保留下来。
0 附近 接近 0 较弱的变化会连同正负方向一起显现。
很大的正数 接近 1 它是很强的正向信号,但即使再变大,变化也会变迟钝。

当你想在隐藏层(hidden layer)里保留信号到底朝哪个方向偏时,这个性质会非常直观。值不会像 sigmoid 那样都被挤到正侧,而是能围绕 0 向左右两边展开。

案例与例子

假设我们在观察设备状态时,某个隐藏节点会同时表达偏向稳定的信号偏向警告的信号。可以约定:负值表示更偏向稳定侧,正值表示更偏向警告侧,而且绝对值越大,说明这种方向越强。如果输出只能停留在 0 以上,那么稳定与警告两边都容易只剩下“弱/强”的感觉,很难一眼抓住它们的方向差异。

用 tanh 时,负值就可以被读作稳定侧信号,正值则可以被读作警告侧信号。

场景 \(z\) tanh 输出的直觉 首先留下来的判断
稳定信号很强 \(-2\) 它会停在接近 -1 的位置,因此稳定侧方向会强烈留下。 它明显偏向稳定侧这个方向会立刻看见。
较弱的稳定信号 \(-0.3\) 它会略低于 0,因此仍偏向稳定侧,但不算很强。 可以读成偏向稳定,但仍接近中性
几乎中立 \(0\) 它会停在 0,因此不会明显偏向任何一侧。 暂时不强行判定方向。
较弱的警告信号 \(0.3\) 它会略高于 0,因此偏向警告侧,但并不强。 可以读成偏向警告,但仍然较弱
警告信号很强 \(2\) 它会接近 1,因此警告侧方向会强烈留下。 它明显偏向警告侧这个方向会立刻看见。

在这个案例里首先要看的,是以 0 为中心向左与向右分开\(-0.3\)\(0.3\) 都只是小值,但一个偏向稳定侧,一个偏向警告侧。tanh 会把这种很弱的方向差异也通过正负号保留下来。

另一个要点是饱和(saturation)。如果 \(z=2\) 已经很接近 1,那么再往更大的正数走,输出差异就会逐渐更难保留下来。负侧也一样:很大的负数会被压到 -1 附近。

所以这个案例真正要确认的结果是:tanh 并不只是一个把值缩小的函数,而是一个会形成围绕 0 具有方向感的内部表征的函数;同时,在较大的正数与较大的负数区间,它又会分别向两端饱和。

练习与例题

现在假设把下面这些值送进 tanh。

\(z\) 先猜会得到什么输出 首先要确认的问题
\(-4\) 非常接近 -1 很大的负数到底会往下压到什么位置?
\(-0.2\) 略低于 0 较弱的稳定侧信号会不会保留下来?
\(0\) 0 为什么它会被叫作 0 中心?
\(0.2\) 略高于 0 较弱的警告侧信号会不会保留下来?
\(4\) 非常接近 1 很大的正数到底会往上抬到什么位置?
\(8\) 更接近 1 \(4\) 相比,还剩下多少差异?

阅读这张表时,必须自己把下面两个问题真正闭合。

  1. \(-0.2\)\(0.2\) 都只是很小的值,为什么在 tanh 里却还能被分别读成较弱的稳定较弱的警告,也就是互相相反的方向?
  2. 即使把 \(z=4\) 提高到 \(z=8\),为什么输出差异还是不会像 \(z=0\)\(z=0.2\) 那样明显地保留下来?

答案方向是明确的。tanh 在 0 附近仍然会比较直接地保留小变化与它们的正负号;但到了较大的正数与较大的负数区间,它会分别逼近 1 与 -1,从而压缩差异。因此,在阅读 tanh 时,必须同时看清:它偏向哪个方向它距离 0 有多远它是不是已经进入了饱和区间

检查清单

  • 能否说出 tanh 的公式,以及它的输出范围是 \(-1\)\(1\)
  • 能否解释为什么当 \(z=0\) 时输出会变成 0?
  • 是否理解 tanh 比 sigmoid 更接近一种 0 中心表征?
  • 能否说明大正数与大负数区间都会出现饱和?
  • 能否预先判断:在 P5-3.5 的公式比较里,tanh 会按什么标准与其他函数比较?

出处与参考资料