概念界定
反向传播是利用链式法则高效计算神经网络中所有参数梯度的方法。它先执行前向计算得到 loss,再从 loss 出发沿计算图反向传播梯度。
背景与问题
神经网络由大量嵌套函数组成,每个参数都会影响最终 loss。直接手工推导每个参数的梯度既困难又低效。反向传播把复杂模型拆成局部运算,并通过链式法则组合局部梯度。
定义与记号
如果:
y = f(u), u = g(x)则链式法则为:
dy/dx = dy/du · du/dx在神经网络中,loss 对参数的梯度可以沿计算图逐层传回:
∂L/∂W = ∂L/∂y · ∂y/∂W直观解释
前向传播负责计算“模型输出和 loss 是多少”,反向传播负责计算“每个参数应该如何改变才能降低 loss”。它不是新的优化目标,而是计算梯度的高效算法。
基本性质
- 反向传播依赖前向过程中保存的中间激活。
- 保存激活会消耗显存。
- 梯度检查点通过重算部分前向来节省显存。
- 深层网络中梯度可能消失或爆炸。
- 自动微分框架会根据计算图自动执行反向传播。
示例
线性层:
y = xW
L = loss(y)反向传播会计算:
∂L/∂W
∂L/∂x其中 ∂L/∂W 用于更新权重,∂L/∂x 用于继续向前一层传播梯度。
常见误解
- 误解:反向传播就是优化器。
- 正确理解:反向传播计算梯度,优化器使用梯度更新参数。
- 误解:反向传播不需要保存中间结果。
- 正确理解:许多梯度计算依赖前向激活,因此训练显存远高于推理。
- 误解:自动微分意味着不用理解反向传播。
- 正确理解:理解反向传播有助于分析显存、梯度流和训练稳定性。
相关概念
- 计算图与自动微分 — 框架如何组织反向传播。
- 梯度下降 — 使用反向传播得到的梯度更新参数。
- 梯度裁剪 — 控制反向传播得到的梯度范数。
- FSDP 分布式训练 — 训练中梯度和参数状态的分布式管理。