跳到正文
AI 图鉴
03 深度学习进阶本域第 2 篇

反向传播

让“求梯度”从数学苦役变成一次函数调用,这是深度学习真正起飞的那一刻

定义

反向传播是一种高效计算梯度的算法。它在计算图上先做一遍前向计算得到损失,再从输出往输入反向走一遍,用链式法则把“损失对每一层参数的偏导”逐层算出。有了它,无论网络有多少层、多少参数,一次反向扫描就能拿到全部梯度。

直观理解

把它想成一条工厂流水线:产品(输入)经过一道道工序(各层)变成成品(预测),质检再算出与标准的差距(损失)。要追溯“哪道工序该改多少”,就从最后一道往回查,把责任按贡献比例逐道分配。每一道工序只需知道“下游传回来的误差”,乘上自己那一环的局部导数,再往上游传——不必重算整条线。反向传播做的就是这件事,只不过每一步都用链式法则精确地完成。

图 1

一次训练迭代的两遍扫描:实线为前向(算出损失),虚线为反向(把梯度按链式法则逐层传回)

图 2

梯度沿深度衰减:同样 8 层,用 Sigmoid 时越靠近输入的层梯度越小(指数级);换成 ReLU 并把激活归一到稳定范围后,各层梯度可基本持平(纵轴为对数刻度)

  • Sigmoid(深层衰减)
  • ReLU + 归一化(保持稳定)

工作原理

  1. 01

    前向计算:得到损失并缓存中间结果

    按顺序逐层做线性变换与非线性,得到预测与一个标量损失,同时把每层的中间结果(激活值)缓存下来,供反向使用。

  2. 02

    反向遍历:链式法则逐层求梯度

    从损失出发,把“损失对该层输出的梯度”乘以该层的局部导数,得到“损失对该层输入的梯度”,再往上一层传。每一层只做一次局部乘法。

  3. 03

    得到参数梯度:直接交给优化器

    用缓存的输入与传回的梯度做一次外积(卷积网络中则是卷积),就得到损失对权重与偏置的梯度,直接交给梯度下降类优化器更新。

  4. 04

    自动微分的意义:结构不再受限

    框架把任意计算记录成图,反向传播全自动完成。正是这一步把人从手工推导偏导中解放出来,可以放心地设计任意深、任意结构的网络。

关键公式

∂L/∂W⁽ˡ⁾ = δ⁽ˡ⁾ (a⁽ˡ⁻¹⁾)ᵀ, δ⁽ˡ⁾ = ((W⁽ˡ⁺¹⁾)ᵀ δ⁽ˡ⁺¹⁾) ⊙ f′(z⁽ˡ⁾)
第 l 层的误差 δ 由上一层误差经权重转置回传,再乘以本层激活导数。⊙ 为逐元素乘。

应用场景

  • 训练一切神经网络(CNN、RNN、Transformer)的公共引擎
  • 与自动微分库(PyTorch、TensorFlow、JAX)绑定,构成标准训练循环
  • 支撑微调与参数高效微调(如 LoRA),在已有权重上继续反传
  • 分析梯度流:诊断梯度消失/爆炸,或绘制显著性图解释预测

常见误区

  • 反向传播只负责“求梯度”,与优化算法(SGD、Adam)是两件事。前者给出方向,后者决定怎么用这个方向。
  • 反向传播要保存前向的中间激活,显存随深度与批量增长;梯度检查点正是用“重算”换取“少存”的折中。
  • 梯度是局部信息。它告诉你脚下最陡的方向,并不保证这个方向通往全局最优。

关键术语

计算图
把一次计算表示为节点与有向边的图,求导即在图上传播
链式法则
复合函数的导数等于各层局部导数之积
自动微分
让框架自动、精确地算出梯度,而非数值近似
梯度流
梯度沿网络逐层传播的大小与稳定性

延伸阅读