链式法则如何传递参数误差 —— 深入理解神经网络中的梯度传播

目录

前言

一、神经网络训练到底在做什么

二、损失函数如何衡量误差

三、为什么需要求导

四、链式法则登场

五、误差如何传递

六、梯度为什么能指导参数更新

七、多层神经网络中的误差传播

八、为什么叫误差传播

九、自动微分是如何实现链式法则的

十、梯度消失与梯度爆炸

十一、链式法则与现代大模型

十二、代码验证链式法则

总结


前言

学习深度学习时,我们经常会听到这样一句话:

反向传播的本质就是链式法则

很多初学者看到这里会产生疑问:

链式法则不是高中求导知识吗?

为什么它能训练神经网络?

为什么它能更新数百万参数?

误差到底是如何传递到每一层的?

事实上,神经网络训练的核心并不复杂。

无论是:

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影响很大

则:

梯度大

如果某个参数:

几乎没影响

则:

梯度小

因此:

误差会沿计算图不断传递

最终到达每个参数。


九、自动微分是如何实现链式法则的

假设:

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 验证。

import torch

x = torch.tensor(
    2.0,
    requires_grad=True
)

y = x * 3

z = y ** 2

z.backward()

print(x.grad)

输出:

tensor(36.)

手工计算:

z=(3x)^2

=9x²

dz/dx

=18x

=36

与自动微分结果完全一致。


这说明:

Autograd

实际上就是链式法则的自动化实现

总结

神经网络训练的本质,其实可以归结为一个简单问题:

如何知道每个参数应该往哪个方向调整?

答案就是:

链式法则

它通过:

Loss
↓
输出层
↓
隐藏层
↓
输入层

将误差逐层传播。

并计算出:

每一个参数

对Loss的贡献程度

最终得到梯度。

整个训练过程可以概括为:

前向传播
↓
计算Loss
↓
链式法则反向传播
↓
得到梯度
↓
梯度下降更新参数
↓
Loss不断减小

而 PyTorch 的 Autograd、本质上的反向传播算法、乃至 GPT 等大型神经网络的训练,都建立在这一数学思想之上。

理解了链式法则如何传递参数误差,也就真正理解了深度学习训练的核心机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Calvad0s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值