目录
前言
学习深度学习时,我们经常会听到这样一句话:
反向传播的本质就是链式法则
很多初学者看到这里会产生疑问:
链式法则不是高中求导知识吗?
为什么它能训练神经网络?
为什么它能更新数百万参数?
误差到底是如何传递到每一层的?
事实上,神经网络训练的核心并不复杂。
无论是:
CNN
RNN
Transformer
GPT
DeepSeek
其参数更新本质上都依赖于:
链式法则(Chain Rule)
本文将通过一个简单神经网络,深入理解:
-
什么是误差传播
-
链式法则如何工作
-
为什么误差能够传递到每一个参数
-
自动微分如何利用链式法则计算梯度
一、神经网络训练到底在做什么
假设我们有一个简单样本:
输入:
x = 2
真实值:
y = 10
神经网络:
ŷ = wx + b
初始参数:
w = 1
b = 1
前向传播:
ŷ = 1×2 + 1
ŷ = 3
显然:
预测值 = 3
真实值 = 10
出现误差:
误差 = 7
训练的目标:
调整参数
让预测越来越接近真实值
问题来了:
参数应该增加还是减少?
增加多少?
这就是梯度需要解决的问题。
二、损失函数如何衡量误差
通常使用均方误差:
L=(\hat y-y)^2
其中:
L
=
Loss
损失函数
代入:
ŷ = 3
y = 10
得到:
L = (3-10)²
L = 49
此时:
损失越大
说明预测越差
训练目标:
让Loss不断减小
三、为什么需要求导
假设我们只关注参数:
w
问题变成:
w增加
Loss会变大还是变小?
这就是导数的意义。
如果:
dL/dw > 0
说明:
w增大
Loss增大
应该减小参数。
如果:
dL/dw < 0
说明:
w增大
Loss减小
应该增大参数。
因此:
梯度决定参数更新方向
四、链式法则登场
神经网络并不是:
Loss直接依赖w
而是:
w
↓
预测值
↓
Loss
关系如下:
w
→ ŷ
→ L
即:
L = f(ŷ)
ŷ = g(w)
因此:
L = f(g(w))
这是一个复合函数。
根据链式法则:
\frac{dL}{dw}=\frac{dL}{d\hat y}\cdot\frac{d\hat y}{dw}
这就是神经网络梯度传播的基础。
五、误差如何传递
继续上面的例子。
预测函数:
ŷ = wx+b
损失函数:
L=(ŷ-y)²
首先求:
dL/dŷ
得到:
2(ŷ-y)
代入:
ŷ=3
y=10
得到:
dL/dŷ=-14
这表示:
Loss对预测值的敏感程度
接下来求:
dŷ/dw
因为:
ŷ=wx+b
所以:
dŷ/dw=x
代入:
x=2
得到:
dŷ/dw=2
根据链式法则:
dL/dw
=
-14 × 2
=
-28
最终得到:
参数w的梯度
六、梯度为什么能指导参数更新
计算出:
dL/dw=-28
说明:
如果增大w
Loss会减小
因此:
应该增大w
梯度下降公式:
w=w-\eta\frac{dL}{dw}
其中:
η
=
学习率
假设:
η = 0.1
更新:
w
=
1 - 0.1×(-28)
=
3.8
参数自动向正确方向移动。
七、多层神经网络中的误差传播
真正的神经网络更复杂。
例如:
输入层
↓
隐藏层
↓
输出层
↓
Loss
设:
x
→ z1
→ z2
→ Loss
关系:
z1=f(x)
z2=g(z1)
L=h(z2)
求:
dL/dx
根据链式法则:
\frac{dL}{dx}=\frac{dL}{dz_2}\cdot\frac{dz_2}{dz_1}\cdot\frac{dz_1}{dx}
可以看到:
误差从Loss开始
逐层向前传递
这就是:
Back Propagation
反向传播
八、为什么叫误差传播
损失函数代表:
预测错误程度
例如:
Loss = 100
说明:
模型很差
反向传播会计算:
每一个参数
对Loss贡献多少
如果某个参数:
对Loss影响很大
则:
梯度大
如果某个参数:
几乎没影响
则:
梯度小
因此:
误差会沿计算图不断传递
最终到达每个参数。
九、自动微分是如何实现链式法则的
假设:
python
x = torch.tensor(
2.0,
requires_grad=True
)
y = x * 3
z = y ** 2
此时:
x
↓
乘3
↓
y
↓
平方
↓
z
执行:
z.backward()
PyTorch 自动完成:
dz/dy
dy/dx
链式法则相乘
得到:
dz/dx
查看:
print(x.grad)
输出:
36
因为:
z=(3x)²
=9x²
求导:
dz/dx
=18x
=36
完全正确。
十、梯度消失与梯度爆炸
链式法则虽然强大。
但也带来了问题。
假设:
dL/dx
=
0.1×0.1×0.1×0.1×...
不断连乘。
结果:
趋近于0
这就是:
梯度消失
反之:
10×10×10×10...
会越来越大。
形成:
梯度爆炸
因此:
深层神经网络
训练难度远高于浅层网络。
这也是后来:
ReLU
BatchNorm
ResNet
Transformer
出现的重要原因。
十一、链式法则与现代大模型
无论是:
BERT
GPT
Llama
Qwen
DeepSeek
训练过程本质都是:
前向传播
↓
计算Loss
↓
链式法则反向传播
↓
更新参数
区别仅仅在于:
参数数量更多
网络更深
计算更复杂
但核心数学原理从未改变。
仍然是:
链式法则
十二、代码验证链式法则
下面用 PyTorch 验证。
python
import torch
x = torch.tensor(
2.0,
requires_grad=True
)
y = x * 3
z = y ** 2
z.backward()
print(x.grad)
输出:
tensor(36.)
手工计算:
python
z=(3x)^2
=9x²
dz/dx
=18x
=36
与自动微分结果完全一致。
这说明:
Autograd
实际上就是链式法则的自动化实现
总结
神经网络训练的本质,其实可以归结为一个简单问题:
如何知道每个参数应该往哪个方向调整?
答案就是:
链式法则
它通过:
Loss
↓
输出层
↓
隐藏层
↓
输入层
将误差逐层传播。
并计算出:
每一个参数
对Loss的贡献程度
最终得到梯度。
整个训练过程可以概括为:
前向传播
↓
计算Loss
↓
链式法则反向传播
↓
得到梯度
↓
梯度下降更新参数
↓
Loss不断减小
而 PyTorch 的 Autograd、本质上的反向传播算法、乃至 GPT 等大型神经网络的训练,都建立在这一数学思想之上。
理解了链式法则如何传递参数误差,也就真正理解了深度学习训练的核心机制。