跳转至

反向传播

反向传播是在计算图上高效应用链式法则的算法:一次前向记下中间量,一次反向得到所有参数梯度。数学基础见 微积分与求导。

一层的梯度传递

对线性层 \(z = Wa + b\):

\[ \frac{\partial L}{\partial a} = W^\top \frac{\partial L}{\partial z} \]
\[ \frac{\partial L}{\partial W} = \frac{\partial L}{\partial z}\, a^\top, \qquad \frac{\partial L}{\partial b} = \frac{\partial L}{\partial z} \]
  • 对输入的梯度:用 \(W^\top\) 把误差传回上一层。
  • 对权重的梯度:上游误差与本层输入的外积。

算法步骤

  1. 前向:计算并缓存每层激活。
  2. 损失:得到标量 \(L\)。
  3. 反向:从最后一层逐层回传。
  4. 更新:交给优化器。

梯度消失与爆炸

链式法则是一长串乘积。缓解手段:ReLU/GELU、残差连接、归一化、梯度裁剪、更好初始化。

自动微分

loss.backward() 自动完成反传。注意:

  • 不要误用 detach / numpy 切断需要梯度的路径。
  • 训练循环里及时 zero_grad()。