核心要点

  • 能写出链式法则:某层参数梯度 = 上游传来的梯度 × 本层局部梯度,逐层连乘回传

  • 前向传播计算并缓存各层激活值,反向传播复用这些缓存求梯度,避免重复计算

  • 框架用自动微分在计算图上自动完成求导,无需手推每层公式

  • 能指出深层连乘小导数会导致梯度消失/爆炸,需 ReLU、残差、归一化缓解

简要回答

前向传播算输出和损失,反向传播用链式法则从损失对每层参数求梯度,再梯度下降更新权重。

标准回答

整体思路

神经网络是复合函数 y = f_n(...f_2(f_1(x))),反向传播就是对这个复合函数求导,本质是链式法则的高效实现。

前向传播

逐层计算激活值并缓存中间结果(如各层的输入、加权和),这些缓存供反向阶段复用。

反向传播

从损失 L 出发反向逐层求导:

  • 输出层直接算 ∂L/∂a;
  • 每一层用链式法则:本层参数梯度 = 上游传来的梯度 × 本层的局部梯度(如 ∂L/∂W = δ · xᵀ);
  • 误差信号 δ 逐层向前传递,每层只需做一次矩阵乘,整体复杂度与前向同阶。

工程实现

PyTorch/TensorFlow 通过自动微分构建计算图,调用 backward() 自动回传,无需手推公式。深层网络中小于 1 的局部梯度连乘会指数衰减(梯度消失),可用 ReLU 族激活、残差连接、BatchNorm/LayerNorm、合理初始化缓解。

常见误区

⚠️ 常见踩坑

把反向传播等同于梯度下降——前者只负责算梯度,后者才用梯度更新参数;以为反向传播是「另一套独立算法」,其实它就是链式法则 + 缓存复用;忘记前向必须保存中间激活,否则反向无法计算局部梯度(这也是训练比推理更耗显存的原因)。

追问

追问 1什么是计算图?

计算图是有向图:节点是运算(加减乘、激活),边是张量流动。前向传播沿图计算输出;反向传播沿图用链式法则求梯度。PyTorch 动态构图,TensorFlow 2.x 默认 eager 也可 trace 成图。

追问 2梯度消失的原因是什么?

深层网络连乘小于 1 的激活导数(如 sigmoid/tanh),梯度指数衰减;或权重初始化不当。RNN 长序列尤甚。解决:ReLU 族、残差、Norm、LSTM 门控、梯度裁剪。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。

🛠️ AI 工具

  • Pytorch

    Meta 开源的深度学习框架,100K+ stars。以动态计算图和 Pythonic 风格著称,在学术界和工业界都有广泛应用,支持分布式训练、移动端部署和 ONNX 导出

  • Tensorflow

    全球最流行的机器学习框架之一,195K+ stars。Google 开源的端到端 ML 平台,支持 TensorFlow、Keras 等多种 API,覆盖深度学习、强化学习、移动端部署等全场景,是 AI 工程师的必备工具