1151 字
6 分钟
深度直击:后向传播算法(Backpropagation)全解析

引言#

后向传播算法(Backpropagation,简称 BP)是深度神经网络能够高效训练的关键。自1986年 Rumelhart 等人的经典论文以来,它已成为深度学习事实上的标准训练方法。

BP 的本质是通过链式法则(chain rule)高效计算损失函数对网络中每一个可训练参数的偏导数(梯度),从而支持任意深度的梯度下降优化。

即使到了2026年,尽管出现了 Forward-Forward、NoProp、Predictive Coding、Equilibrium Propagation 等不依赖传统 BP 的探索性方法,绝大多数实际工业级模型(包括大语言模型、视觉基础模型、生成模型等)仍然依赖自动微分 + BP 的组合。理解 BP 仍是深入掌握深度学习不可或缺的一环。


1. 前向传播与损失计算(回顾)#

给定输入 x\mathbf{x},网络通过多层变换得到预测 y^\hat{\mathbf{y}}

z(l)=W(l)a(l1)+b(l),a(l)=σ(z(l))\mathbf{z}^{(l)} = \mathbf{W}^{(l)} \mathbf{a}^{(l-1)} + \mathbf{b}^{(l)}, \quad \mathbf{a}^{(l)} = \sigma(\mathbf{z}^{(l)})

最终损失(以均方误差为例):

L=12y^y2\mathcal{L} = \frac{1}{2} \|\hat{\mathbf{y}} - \mathbf{y}\|^2

(分类任务通常使用交叉熵损失)


2. 后向传播数学核心:链式法则的高效应用#

BP 的天才之处在于从输出层向输入层递归地计算误差项(error term 或 sensitivity),避免了显式计算所有中间复合导数。

2.1 输出层误差项 δ#

对于第 LL 层(输出层),误差项定义为:

δ(L)=Lz(L)=(y^y)σ(z(L))\delta^{(L)} = \frac{\partial \mathcal{L}}{\partial \mathbf{z}^{(L)}} = (\hat{\mathbf{y}} - \mathbf{y}) \odot \sigma'(\mathbf{z}^{(L)})

(⊙ 表示逐元素相乘;对于 MSE + identity 激活则简化为 y^y\hat{\mathbf{y}} - \mathbf{y}

2.2 隐藏层误差项的递归传递#

对于任意隐藏层 ll(从后向前):

δ(l)=((W(l+1))δ(l+1))σ(z(l))\delta^{(l)} = \left( (\mathbf{W}^{(l+1)})^\top \delta^{(l+1)} \right) \odot \sigma'(\mathbf{z}^{(l)})

这正是链式法则的体现:当前层的误差 = 下一层误差通过权重“反向投影”后,再乘以本层激活函数的导数。

2.3 参数梯度计算#

一旦有了 δ,就可以非常高效地计算权重和偏置的梯度:

LW(l)=δ(l)(a(l1))\frac{\partial \mathcal{L}}{\partial \mathbf{W}^{(l)}} = \delta^{(l)} (\mathbf{a}^{(l-1)})^\topLb(l)=δ(l)\frac{\partial \mathcal{L}}{\partial \mathbf{b}^{(l)}} = \delta^{(l)}

然后使用任意优化器(SGD、Adam、AdamW、Lion 等)更新:

W(l)W(l)ηLW(l)\mathbf{W}^{(l)} \leftarrow \mathbf{W}^{(l)} - \eta \frac{\partial \mathcal{L}}{\partial \mathbf{W}^{(l)}}

3. 现代框架中的自动实现(PyTorch 示例)#

现代框架(如 PyTorch、JAX、TensorFlow)通过计算图 + 自动微分(autograd)自动完成上述过程。

import torch
import torch.nn as nn
# 简单两层 MLP 示例
model = nn.Sequential(
nn.Linear(784, 256),
nn.ReLU(),
nn.Linear(256, 10)
)
optimizer = torch.optim.AdamW(model.parameters(), lr=3e-4, weight_decay=0.01)
criterion = nn.CrossEntropyLoss()
# 训练一步
def train_step(images, labels):
optimizer.zero_grad()
logits = model(images) # 前向
loss = criterion(logits, labels) # 损失
loss.backward() # 自动后向传播(BP)
optimizer.step() # 更新
return loss.item()

关键点loss.backward() 这一行就完成了完整的链式求导 + 梯度累加。


4. BP 在深度网络中的经典痛点与2026年解决方案#

问题核心原因现代主流解决方案(2025–2026)
梯度消失深层网络 + sigmoid/tanh → 导数 <1 连乘 → →0ReLU / GELU / SwiGLU / Mish 等非饱和激活函数
残差连接(ResNet)、LayerNorm、Skip connections
梯度爆炸权重初始化不当或深层累积梯度裁剪(gradient clipping by norm/value)
Xavier/He/Kaiming 初始化
梯度中心化技术(某些优化器内置)
计算内存开销大保存所有中间激活用于 backwardActivation checkpointing / Gradient checkpointing
混合精度训练(bf16 / fp16)
FlashAttention-2 等内核优化
生物学不合理需要全局误差反传,不符合局部学习仍在活跃研究:Forward-Forward、Predictive Coding、Equilibrium Propagation、NoProp 等
但尚未大规模取代 BP

2026 年工业共识

  • 99%+ 的生产级模型仍然使用标准的自动微分 + BP
  • 梯度消失问题已通过架构设计(残差、归一化、非饱和激活)基本解决
  • 真正限制深层训练的瓶颈已转移到:优化器稳定性、数据质量、初始化、学习率调度、数值稳定性等

5. 总结与进阶方向#

后向传播算法是深度学习能够规模化训练多层网络的基石。它将复杂的链式求导问题转化为高效的递归计算,为后续所有优化算法提供了梯度基础。

2026 年建议的学习路径

  1. 彻底理解链式法则在多层网络中的递归展开(动手推导 3–4 层网络的 δ 计算)
  2. 掌握 PyTorch / JAX 中的 backward()grad 机制
  3. 能够自己实现一次简易的从零 BP(不依赖框架)
  4. 了解梯度问题的主要解决方案与现代架构设计思想
  5. 关注不依赖 BP 的前沿探索(如 Forward-Forward、NoProp、生物启发学习),但不必急于在生产中使用

掌握 BP,你就真正打开了深度学习“从黑箱到可微分编程”的大门。

深度直击:后向传播算法(Backpropagation)全解析
https://sw.rscclub.website/posts/rgznzhxcbsf/
作者
杨月昌
发布于
2016-10-12
许可协议
CC BY-NC-SA 4.0