反向传播(Backpropagation):AI如何追踪错误的“罪魁”,以及链式法则的妙用
1. 引言:罪魁就在这里
在上一篇文章中,我们了解到微分是“告诉我们参数应该朝哪个方向调整才能降低误差的指南针”。
然而深度学习面临的一个致命问题是:模型太深(Deep)。
从输入层到输出层的层数可能是几十甚至几百。
场景:输出层出现“哇!结果与正确答案相差10多点!”的误差(Loss)。
问题:到底是谁的错?
我们无法判断是靠近输入层的参数导致的蝴蝶效应,还是靠近输出层的参数在最后一刻搞了个“恶作剧”。
此时,深度学习会用一种非常巧妙的方法来找罪魁。那就是“把责任推给后面的人(Chain Rule)”。
2. 链式法则(Chain Rule):“责任转嫁”的数学定义
数学教材里写的链式法则是:
$$\frac{dz}{dx} = \frac{dz}{dy} \cdot \frac{dy}{dx}$$
对我们开发者来说,这看起来像是一个普通的数学公式,但从组织管理的角度来看,它就是“责任分配”。
想象一下:A团队负责人(输入) -> B部门经理(隐藏) -> C董事(输出) 的审批链。
- C董事(输出层) 让项目失败(出现错误)。
- C董事不想全责,于是分析说:“B部门经理给的报告太烂,我的结果也烂。”($\frac{dz}{dy}$:我的结果被B影响了多少)
- B部门经理不服,反驳:“不,A团队负责人给的基础数据怪异,我的报告也怪异!”($\frac{dy}{dx}$:我的结果被A影响了多少)
最终,A团队负责人对整个项目(z)的负面影响($\frac{dz}{dx}$)可以用(C责B的程度)×(B责A的程度)来计算。
这就是微分的链式法则。它把远距离的原因(A)和结果(z)通过中间步骤的乘法连接起来。
3. 反向传播(Backpropagation):倒着点燃的调试
把这种“责任转嫁”过程扩展到整个系统,就是反向传播。
- Forward(顺向传播):输入数据,得到结果。(先干活)
- Loss Calculation:与正确答案比较,计算误差。(事故发生)
- Backward(反向传播):从输出层往输入层方向回溯,告诉“你导致了这么多误差”。
对开发者来说,这就像从堆栈跟踪(Stack Trace)的最底层往上读,找出根本原因(Root Cause)。
从最后的错误信息(Loss)开始,追溯调用链,像 git blame 一样一步步往上走。
4. PyTorch 的 Autograd:自动化的审计团队
当我们用 numpy 写深度学习时,最痛苦的就是手动推导微分公式并编码(矩阵微分会让人掉发)。
PyTorch 的伟大之处在于,它把这复杂的“责任转嫁”过程绘制成Computational Graph(计算图),并自动完成。
- 当你调用
loss.backward()时, - PyTorch 的 Autograd 引擎(审计团队) 启动。
- 从图的末端开始,逆向遍历每个节点,执行链式法则(乘法)。
- 最后给每个参数(Weight)贴上“你的责任份额(Gradient)是 0.003” 的标签。
我们只需根据这些梯度值更新参数(optimizer.step()),其余工作交给 Autograd。
5. 结语:但如果责任消失了?(Vanishing Gradient)
即使系统看似完美,也有致命缺陷。
在多次责任转嫁(乘法)后,层数过深会导致责任变为 0 的现象。
“不是我的错” × 0.1 × 0.1 × 0.1 … 继续下去,前面的层会收到“没有可修复的东西(Gradient = 0)”的错误信号。
这就是著名的 梯度消失(Vanishing Gradient) 问题。现代 AI 如何解决它?(提示:ReLU 与 ResNet)

目前没有评论。