神经网络

tanh(双曲正切,tanh)

/ tanch (or "tan-AYCH") /

tanh——双曲正切的简称——是 sigmoid 的近亲。它是同样平滑的 S 形,但不是把输入压进 0 到 1 的范围,而是压进 -1 到 1 的范围。大的正输入出来时接近 +1,大的负输入接近 -1,而输入为零时正好出来在零。就这一处不同——它以零为中心,而非以 0.5 为中心——结果却很要紧。

为什么以零为中心会有帮助?当某一层的输出以零为中心时,下一层收到的便是正负信号均衡的混合,学习算法往往能取得更干净、更直接的进展。sigmoid 则相反,它只会吐出正数,这会微妙地使更新偏向一侧,并可能拖慢训练。正因如此,在较早的网络里,隐藏层一般偏好用 tanh 而非 sigmoid;它至今仍出现在某些架构内部,尤其是一些处理文本或音频这类序列的循环网络。

不过,tanh 也分担了 sigmoid 的弱点。它的两端同样平坦,所以对很大的输入而言斜率接近零,在深层堆叠里学习信号仍可能消失——还是那个梯度消失的陷阱。这就是为什么对今天普通的深层网络来说,更简单的 ReLU 通常更胜一筹。可以把 tanh 看作 S 形曲线家族里更乖巧的那一员,但它终究还是一条 S 形曲线,带着这意味着的种种局限。

把数字 -3、0、3 喂进 tanh,你大致得到 -0.995、0、+0.995。把同样的数字喂进 sigmoid,你大致得到 0.05、0.5、0.95。注意 tanh 是对称地跨在零的两侧,而 sigmoid 整个都待在零之上——这种对称,正是 tanh 往往比 sigmoid 训练得稍好一点的实际原因。

tanh 是以零为中心的 S 形曲线(-1 到 1);sigmoid 是同样的形状往上挪(0 到 1)。

tanh 本质上就是一个经过缩放和平移的 sigmoid——它字面上等于 2·sigmoid(2x) − 1。它以零为中心的输出是优势,但它也继承了 sigmoid 平坦的两端,以及随之而来的梯度消失风险。

又称
hyperbolic tangent双曲正切雙曲正切