反向传播(Backprop)
反向传播训练神经网络的方法
亦作、亦称:Backprop
反向传播(Backpropagation,简称 Backprop)是训练神经网络的核心算法,通过链式法则从损失函数出发,逐层向输入方向计算各参数的梯度,再由优化器更新权重。它将深度网络训练从理论设想变为工程现实,是现代深度学习的基石。
概述
反向传播(Backpropagation,简称 Backprop)是训练神经网络的核心算法,通过链式法则从损失函数出发,逐层向输入方向计算各参数的梯度,再由优化器更新权重。它将深度网络训练从理论设想变为工程现实,是现代深度学习的基石。
核心定义
反向传播本质上是对计算图应用链式法则的系统化过程。
- 前向传播:输入数据逐层流经网络,产生预测输出并计算损失值,同时缓存中间激活
- 反向传播:从输出层开始,将损失的梯度沿计算图逐层向输入方向传递
- 链式法则:复合函数导数等于各层局部梯度之积,使深层网络梯度计算成为可能
- 参数更新:所有层的权重与偏置均可在一次反向过程中高效计算出对应梯度,交由优化器更新
发展脉络
反向传播的历史跨越数十年,经历了多次独立发现与重新普及。
- 1970:Seppo Linnainmaa 在硕士论文中提出反向模式自动微分,是现代实现的理论先驱
- 1974:Paul Werbos 在哈佛博士论文《Beyond Regression》中首次将该方法明确应用于神经网络,长期未受重视
- 1986:Rumelhart、Hinton、Williams 在 Nature 发表「Learning representations by back-propagating errors」,引爆第二次神经网络研究热潮
- 2012:AlexNet 借助 GPU 加速反向传播,在 ImageNet 大赛中大幅领先,标志深度学习时代正式开启
- 2017 至今:PyTorch 动态计算图、梯度检查点、混合精度训练等工程优化,使反向传播支撑起千亿参数模型的训练
算法机制
一次完整的训练迭代包含前向与反向两个阶段,交替执行。
- 损失计算:对比预测值与真实标签,得出标量损失(如交叉熵、均方误差)
- 梯度回传:从输出层开始,依次按链式法则计算每层的局部梯度 $\partial L / \partial W$
- 避免重复计算:算法复用前向阶段缓存的中间激活值,使反向传播时间复杂度与前向传播相当
- 权重更新:梯度传给梯度下降或 Adam 等优化器,按 $W \leftarrow W - \eta \nabla W$ 更新参数
常见问题与挑战
反向传播在实践中面临若干固有挑战,催生了大量改进技术。
- 梯度消失:多层网络中梯度逐层相乘趋近于零,早期深层网络浅层几乎无法学习; ReLU 激活函数和残差连接是主要应对手段
- 梯度爆炸 : 梯度连乘后数值过大,导致训练发散;常用梯度裁剪(Gradient Clipping) 缓解
-内存开销 :需缓存所有中间激活值用于反向计算; 梯度检查点(Gradient Checkpointing)以重新计算换节省显存
- 不可微操作: 离散采样、argmax 等操作无法直接反向传播,需借助直通估计器或强化学习目标替代
自动微分与现代框架
当代深度学习框架通过自动微分引擎将反向传播完全自动化。
- 动态计算图:PyTorch 的 Autograd 在前向传播时动态构建计算图,调用
.backward()即可自动获取所有梯度 - 静态计算图:TensorFlow 早期采用静态图,先定义图再执行,便于跨平台优化与部署
- 即时编译:
torch.compile、XLA 等在自动微分基础上进一步提升反向传播的运行效率 - 混合精度训练:以 FP16/BF16 进行前向运算,FP32 累计梯度,在保持数值稳定的同时大幅加速训练
与相关概念的关系
反向传播并非孤立算法,而是与多个核心概念紧密耦合。
- 梯度下降:反向传播提供梯度方向,梯度下降利用梯度更新参数,两者共同构成训练的完整闭环
- 自动微分:反向传播是反向模式自动微分在神经网络上的具体应用,范围比「手写链式法则」更广
- 批归一化 / 层归一化:通过稳定中间层分布,间接缓解梯度消失,与反向传播协同工作
- Transformer 与大模型:现代大语言模型参数量达千亿级,其训练仍完全依赖反向传播与分布式自动微分
常见误解
日常交流中容易听到的简化说法,未必准确,但能帮助理解误解从何而来。
- 「训练神经网络的方法」
- 「深度学习必修课」
- 「跟 反向传播 是一回事吗」
相关术语
和本术语关联紧密的其他词条,便于串联理解。
🎯 考点练习
含该术语的高频面试题,含标准答案与追问。
- 高级编码高频查看详解 →
手撕代码:实现一个两层 MLP 的前向与反向传播
面试里先说主线:前向缓存中间量,反向从 Softmax+CE 的 p-y 开始,一层层按链式法则传回去。
- 中级概念高频查看详解 →
反向传播(Backpropagation)是如何工作的?
用链式法则从输出层向输入层逐层计算梯度,高效更新神经网络权重。
- 高级概念查看详解 →
PyTorch 中反向传播的过程是怎样的?
PyTorch 反向传播:前向计算 loss → loss.backward() 沿计算图用链式法则累加梯度到各参数 .grad → optimizer.step() 更新权重;每步前需 optimizer.zero_grad() 清零旧梯度。
- 高级概念查看详解 →
什么是前向传播与反向传播?
前向传播按网络结构从输入算出预测和损失;反向传播用链式法则从损失往回算每层参数梯度,供优化器更新权重。二者构成神经网络训练的核心循环。
延伸阅读
从知识库精选 2 篇文章,帮助深入理解该术语。
外部参考
维基百科:查看「反向传播」词条本页内容为本站原创撰写;维基百科链接仅作延伸参考。
