2026-5-7重启深度学习,随笔记录一些不理解且容易遗忘的知识点,学习路线跟随复旦大学邱锡鹏老师
此文记录深度学习中的反向传播,以及自己的迷惑点和解答,参考csdn-blog
:::
1.反向传播基本概念
前向传播
在前向传播中,输入数据从输入层通过隐藏层传递到输出层。网络通过层与层之间的连接(即权重)来计算每个节点的输出,最终生成网络的预测结果。也就是从头走到尾,逐层计算输出。
计算损失
将网络的预测输出与真实值进行比较,计算损失函数(如均方误差) ,用来衡量网络的预测输出与真实值的差距。
反向传播
反向传播的过程主要由链式法则驱动。它通过逐层计算误差对权重的偏导数(梯度),从输出层反向传递到隐藏层,再传递到输入层(与前向传播顺序相反),以反向更新每层的权重,减少预测误差。
- 前向传播相当于将输入数据从输入层逐步传递到输出层,得到预测结果。
- 反向传播相当于从输出层开始反向传递误差,更新每一层的权重,使得网络在下次预测时能够减少误差。
权重更新
使用优化算法(如梯度下降)根据梯度更新权重。使得下一次前向传播时损失函数值减小。
2.反向传播计算
反向传播图示

- 前向传播: 蓝色,负责计算经过神经元后的输出值
- 反向传 播:红色,输出误差,逐层反向传递给前面的隐藏层神经元,计算权重梯度,后续更新
反向传播示例

如上图是一个简单的两层神经网络:
- 输入层(x):一个节点,输入值为 x。
- 隐藏层(a):一个节点,激活函数为 Sigmoid 函数。
- 输出层(y):一个节点,激活函数为线性函数,输出值为 y。
- 权重(w):输入w1,w2
隐藏层输入:
z=w1⋅x
隐藏层的激活输出(使用 Sigmoid 函数):
a=σ(z)=1+e−z1
计算输出层的输入和输出:
y=w2⋅a
计算损失:
L=21(y−t)2
计算输出层对权重 w2 的梯度
∂w2∂L=∂y∂L⋅∂w2∂y
计算隐藏层对权重w2的梯度
∂w1∂L=∂a∂L⋅∂z∂a⋅∂w1∂z
代入数据计算梯度,同时引入η,也就是学习率,更新步长,计算更新梯度w2(new)
w2(new)=w2−η⋅∂w2∂L
然后代入新权重计算新的层,计算输出,计算损失函数的值,如果loss有变小,说明更新方向正确,也就是有在变好。
3.为什么是反向传播
我一开始的疑惑就是,为什么是反向传播?为什么梯度更新是从后往前推,而且对于隐藏层神经元,为什么不是在当前的神经元上更新自己的梯度?再推导下去?(思考之后发现自己的这个问题确实很蠢)
3.1.链式核心
反向传播的核心就是求导的链式法则,计算梯度求偏导,在最后一层,就可以抽茧剥丝的逐层往前计算梯度,因为当前层梯度计算,可以往前递用计算。我们的目标是求出损失函数 L 对网络中每一个权重 w 和偏置 w 的偏导数(梯度),然后用梯度下降法更新它们。
3.2. 求输出层的梯度(从后往前第一步)
设两层神经元
首先,我们计算损失 L 对输出层参数 w1(2),w2(2),b(2) 的偏导。
引入中间误差项 δ(2)(表示损失对输出层未激活值 z(2) 的导数):
δ(2)=∂z(2)∂L=∂y^∂L⋅∂z(2)∂y^=(y^−y)⋅f′(z(2))
有了 δ(2),输出层权重的梯度就很简单了:
∂w1(2)∂L=∂z(2)∂L⋅∂w1(2)∂z(2)=δ(2)⋅a1(1)
∂w2(2)∂L=δ(2)⋅a2(1)
∂b(2)∂L=δ(2)⋅1=δ(2)