有限差分:用数值近似检查梯度方向
手写一个求导公式后,符号或系数错误可能让优化器朝反方向走。有限差分能作为小规模梯度检查工具。
▶ 本文含视频讲解▶ 教学视频手动播放 · 英语讲解
Gradient descent, how neural networks learn
结合模型讲解理解本文实验的背景;正文提供可独立运行的简化示例。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。
播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。
问题从哪里出现
手写一个求导公式后,符号或系数错误可能让优化器朝反方向走。有限差分能作为小规模梯度检查工具。
理解核心机制
中心差分用 f(x+h) 与 f(x-h) 的变化估算导数。h 太大时截断误差明显,太小时相减会放大浮点误差,因此它适合检查而不是替代大模型反向传播。
动手做一个小实验
Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。数字与样本均为教学演示,不代表真实模型或服务器的测量结果。
def loss(x):
return (x - 3.0) ** 2
x, h = 1.0, 1e-5
numeric = (loss(x + h) - loss(x - h)) / (2 * h)
analytic = 2 * (x - 3.0)
assert abs(numeric - analytic) < 1e-6
updated = x - 0.1 * analytic
assert loss(updated) < loss(x)
print(numeric, analytic, updated)适用边界与常见误区
非光滑点、随机层和状态更新会使检查复杂化。应先固定随机性,并避免把数值差分的误差直接认作自动微分错误。
继续练习
将 h 从 1e-1 改到 1e-12,记录误差趋势;再对绝对值函数在零点附近尝试,说明导数假设哪里失效。