反向传播¶
反向传播是在计算图上高效应用链式法则的算法:一次前向记下中间量,一次反向得到所有参数梯度。数学基础见 微积分与求导。
一层的梯度传递¶
对线性层 \(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\) 把误差传回上一层。
- 对权重的梯度:上游误差与本层输入的外积。
算法步骤¶
- 前向:计算并缓存每层激活。
- 损失:得到标量 \(L\)。
- 反向:从最后一层逐层回传。
- 更新:交给优化器。
梯度消失与爆炸¶
链式法则是一长串乘积。缓解手段:ReLU/GELU、残差连接、归一化、梯度裁剪、更好初始化。
自动微分¶
loss.backward() 自动完成反传。注意:
- 不要误用
detach/numpy切断需要梯度的路径。 - 训练循环里及时
zero_grad()。