反向传播算法与自动微分实用指南
反向传播算法与自动微分实用指南
1 核心概念
反向传播(Backpropagation)是以链式法则为基础的高效梯度计算方法,通常在计算图上以反向模式自动微分实现,用于最小化损失函数并更新模型参数。
2 从链式法则到计算图
给定复合函数 y = f(g(h(x))),有 dy/dx = (dy/df)*(df/dg)*(dg/dh)*(dh/dx)。在计算图里,自顶向下记录前向中间量,自底向上累积局部梯度乘积即可得到全局梯度。
2.1 局部梯度与反向累计
每个结点 i 维护 ∂L/∂z_i,其父结点 j 仅需 ∂z_i/∂z_j,从输出层把 ∂L/∂z_out=1 反向乘到输入层即可。
3 反向模式自动微分
目标是高效计算标量损失 L(θ) 对大量参数 θ 的梯度。反向模式通过一次反向传播就能得到所有参数的梯度,本质是向量-雅可比积(VJP)的系统化应用。
3.1 VJP 与 JVP
VJP(向量乘雅可比)适合标量输出多参数输入;JVP(雅可比乘向量)适合多输出少参数场景。深度学习训练通常使用 VJP(即反向模式)。
4 数值梯度检验
用中心差分近似 ∂L/∂θ ≈ (L(θ+ε) - L(θ-ε)) / (2ε) 检验实现是否正确。选择合适 ε(如 1e-4)并在小模型上抽查。
5 训练稳定性与实用技巧
- 参数初始化:Xavier/He 初始化匹配激活分布;
- 归一化:BatchNorm/LayerNorm 缓解梯度消失/爆炸;
- 梯度裁剪:限制范数,避免 RNN 等序列梯度爆炸;
- 学习率计划:Warmup + 余弦退火/多段下降;
- 数值稳定:log-sum-exp、稳定的 softmax 交叉熵;
6 小结
反向传播就是在计算图上利用链式法则做一次高效的 VJP 聚合。理解局部梯度、缓存前向中间量、以及数值校验与稳定性技巧,是写对写快的关键。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 GT-Kai的暗黑洞穴!