神经网络

sigmoid 函数(sigmoid function)

/ SIG-moyd FUNK-shun /

sigmoid 是一条平滑的 S 形曲线,它能把任何数字——无论巨大、微小、正还是负——都温柔地压进 0 与 1 之间的范围。想象一道滑梯,顶端几乎平坦,中段陡峭,到底端又几乎平坦。喂进一个大的正数,出来时接近 1;一个大的负数,出来时接近 0;零则正好出来在 0.5。由于输出看起来像一个概率,sigmoid 是表达「我有多大把握答案是『是』」的一种自然方式。

在历史上,sigmoid 曾是神经网络的主力激活函数,而它至今仍是「是/否」(二分类)问题的标准收尾一步——在那里你想要一个可以读作概率的单一输出。它正是驱动逻辑回归的同一条曲线。这种平滑确实有用:因为曲线处处都有一个缓和的斜率,学习算法总能判断该往哪个方向去拧动权重。

但这份平滑藏着一个陷阱。在那两端平坦处——对很大的正输入或很大的负输入而言——斜率几乎为零。当斜率接近零时,沿网络反向流动的学习信号会被乘上一个几乎等于零的数,于是几近消失。叠上几层 sigmoid,这些细小的斜率会彼此相乘,使最靠前的那几层几乎学不到任何东西。这就是梯度消失问题,也是 ReLU 在现代深层网络的隐藏层里取代了 sigmoid 的主要原因。如今 sigmoid 大多只活跃在输出端。

一个判断邮件是否为垃圾的模型,输出一个 sigmoid 值 0.92。你把它读作「有 92% 的把握这是垃圾邮件」。要是原始分数是个很大的负数,sigmoid 会返回大约 0.03 这样的值——「几乎可以肯定不是垃圾邮件」。这条 S 形曲线把一个无界的分数,变成了一个 0 到 1 之间利落的概率。

sigmoid 把任意分数映射到 0–1 的「概率」——非常适合最终的「是/否」判断。

接近 0 或接近 1 的 sigmoid 输出,未必就是一个校准良好的概率——它只是看起来像。而它那平坦的两端,恰恰是人们不再在深层隐藏层里用它的原因:它会扼住梯度。

又称
logistic functionlogistic sigmoidS 形函数对数几率函数邏輯函數