什么是 反向传播?

反向传播是神经网络目标常用的反向模式梯度计算方法。它逆序遍历已记录的计算图,应用链式法则,累积标量损失相对于参数和中间值的导数;真正使用这些梯度更新参数的是优化器,而不是反向传播本身。

快速了解

全称Backpropagation Algorithm
创建时间1986 年由 Rumelhart、Hinton 和 Williams 提出
规范文档官方规范

工作原理

反向传播、自动微分与优化器

自动微分是更广义的方法族,通过组合基础操作的导数规则对程序求导。反向传播是其中常用于「大量参数影响一个标量损失」场景的反向模式。它只负责产出梯度;梯度下降、Adam 或其他优化器再把梯度转成参数更新。因此,Backward 正确不代表目标函数合理,也不保证训练收敛。

历史与术语边界

反向累积与自动微分技术早于 1986 年。Rumelhart、Hinton 和 Williams 在 1986 年发表于 Nature 的论文,让 Backpropagation 作为多层神经网络的实用训练方法获得广泛关注。

计算与内存权衡

标量损失训练适合反向模式,因为一次逆向遍历可以为大量参数累积导数。但反向过程通常需要保留前向中间值,或保存足够信息以便重算。Activation Checkpointing 用额外前向计算换取更少的保留内存;Gradient Accumulation 则改变执行更新的时机,并要求正确处理 Loss Reduction 与缩放。

不可微与数值边界

真实计算图包含 ReLU 边界、Clipping、索引、控制流、混合精度,以及可能产生 NaN 或 Infinity 的操作。框架会为部分不可微点选择梯度或次梯度,具体行为属于实现契约。无效数值一旦进入计算图,事后 Mask 不一定能阻止无效梯度;应在执行危险操作前处理输入。

如何验证

自定义导数应先在微小、确定性的案例上验证:检查 Tensor Shape 与 Reduction 系数,在远离不可微点的位置把解析梯度与中心有限差分比较,并运行 Tiny-Batch Overfit Test。完整训练还要监控梯度范数、非有限值、Loss Scaling、意外 Detach、冻结参数和优化器实际更新的参数集合。

主要特点

  • 按计算图的逆拓扑顺序应用链式法则
  • 当一个值通过多条路径影响损失时累加所有梯度贡献
  • 使用局部 Vector-Jacobian Product,无需构造完整 Jacobian Matrix
  • 适合大量参数对应一个标量目标的常见神经网络训练结构
  • 需要保存或重算前向信息,因此存在计算与内存权衡
  • 只计算梯度,不负责选择目标、学习率、优化器或更新策略

常见用途

  1. 为前馈网络、卷积网络、循环网络与 Transformer 训练计算梯度
  2. 对自定义损失、Layer 和可微分模拟求导
  3. 在迁移学习或微调中冻结指定参数
  4. 实现 Gradient Accumulation、Activation Checkpointing 与混合精度训练
  5. 通过有限差分 Gradient Check 调试自定义导数

示例

loading...
Loading code...

常见问题

反向传播和梯度下降是一回事吗?

不是。反向传播通过沿计算图逆向应用链式法则,计算损失对参数的导数;梯度下降或其他优化器读取这些导数,再决定参数如何更新。一次训练 Step 通常同时需要两者,但它们解决的是不同问题。

反向传播和自动微分有什么区别?

自动微分是对程序求导的更广义技术族。反向传播是反向模式自动微分在神经网络等复合计算中的常见形式,通常面对大量参数和一个标量损失。框架的 Autograd 还可能支持前向模式、高阶导数与非神经网络程序。

反向传播是在逐层传递预测误差吗?

不准确。反向过程传播的是标量目标对中间值的敏感度。每个操作把上游敏感度与局部导数相乘,并累加来自所有下游路径的贡献。「误差」是历史上的简写,容易掩盖实际执行的 Vector-Jacobian Product。

反向传播为什么会出现梯度消失或爆炸?

深层复合函数会连续组合许多局部 Jacobian。有效范数反复收缩时,梯度可能趋近于零;反复放大时,梯度可能增长。激活函数、初始化、归一化、残差连接、序列长度、数值精度和架构都会影响结果,不存在单一万能修复。

如何验证手写反向传播是否正确?

在双精度、微小且确定性的计算图上,把解析梯度与中心有限差分逐参数比较。测试点要避开不可微位置,同时检查绝对误差、相对误差、Tensor Shape 和 Batch Reduction 系数,并确认微型模型可以过拟合一小份干净数据。

相关术语

相关文章