WMX · 随记
·AI· 3 分钟阅读

Sigmoid:概率形状与饱和区的梯度

把任意实数映射到零和一之间,可用 sigmoid。输入绝对值很大时输出接近端点,梯度也会变小。

▶ 本文含视频讲解
▶ 教学视频手动播放 · 英语讲解

But what is a neural network?

结合模型讲解理解本文实验的背景;正文提供可独立运行的简化示例。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。

播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。

AI 系列概览:模型机制、系统边界与效果评估
AI 系列概览:模型机制、系统边界与效果评估 点击图片查看大图 ↗

问题从哪里出现

把任意实数映射到零和一之间,可用 sigmoid。输入绝对值很大时输出接近端点,梯度也会变小。

理解核心机制

sigmoid(x)=1/(1+exp(-x))。为避免极大负输入导致 exp 溢出,可以按正负分支使用等价表达式。导数为 p*(1-p),在中心最大,在两端趋近零。

动手做一个小实验

Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。数字与样本均为教学演示,不代表真实模型或服务器的测量结果。

Python10 行 · 可横向滚动
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 的导数,再讨论为什么把很多饱和激活层串起来可能影响梯度传播。

参考资料

阅读相关官方文档或原始资料 ↗

← 返回文章归档