Sigmoid:概率形状与饱和区的梯度
把任意实数映射到零和一之间,可用 sigmoid。输入绝对值很大时输出接近端点,梯度也会变小。
▶ 本文含视频讲解▶ 教学视频手动播放 · 英语讲解
But what is a neural network?
结合模型讲解理解本文实验的背景;正文提供可独立运行的简化示例。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。
播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。
问题从哪里出现
把任意实数映射到零和一之间,可用 sigmoid。输入绝对值很大时输出接近端点,梯度也会变小。
理解核心机制
sigmoid(x)=1/(1+exp(-x))。为避免极大负输入导致 exp 溢出,可以按正负分支使用等价表达式。导数为 p*(1-p),在中心最大,在两端趋近零。
动手做一个小实验
Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。数字与样本均为教学演示,不代表真实模型或服务器的测量结果。
import math
def sigmoid(x):
if x >= 0:
return 1 / (1 + math.exp(-x))
e = math.exp(x)
return e / (1 + e)
for x in (-1000, -2, 0, 2, 1000):
p = sigmoid(x)
print(x, p, p * (1 - p))
assert sigmoid(0) == 0.5适用边界与常见误区
输出在零和一之间不代表已经校准为真实概率。二分类训练中宜使用稳定的 logits 损失实现,避免自己拼接可能失稳的对数表达式。
继续练习
比较 x=0 与 x=10 的导数,再讨论为什么把很多饱和激活层串起来可能影响梯度传播。