交叉熵损失如何影响卷积核权重和偏置的梯度计算——反向传播全流程详解
一、前言
大家好,今天咱来讨论下,深度学习中一个特别核心的东西:交叉熵损失是怎么反向传递影响到卷积核权重和偏置的?
我尝试推导、尽量讲清楚每个公式和数学运算,配合具体例子,希望笔者和读者在推过程中能真正理解背后原理,不再云里雾里。
二、问题拆解与关键公式
训练卷积神经网络的目标是不断调整卷积核权重 wi,jw_{i,j}wi,j 和偏置 bbb,使得预测输出更接近真实标签。
最关键的是要计算出损失函数 LLL 对卷积核权重和偏置的梯度,即:
∂L∂wi,j,∂L∂b
\frac{\partial L}{\partial w_{i,j}}, \quad \frac{\partial L}{\partial b}
∂wi,j∂L,∂b∂L
关键链式法则公式:
卷积输出 Zp,qZ_{p,q}Zp,q 由输入 xxx 和权重 www 计算得到:
Zp,q=∑i,jwi,j⋅xp+i,q+j+b
Z_{p,q} = \sum_{i,j} w_{i,j} \cdot x_{p+i, q+j} + b
Zp,q=i,j∑wi,j⋅xp+i,q+j+b
那么权重梯度公式为:
∂L∂wi,j=∑p,q∂L∂Zp,q⋅∂Zp,q∂wi,j
\boxed{
\frac{\partial L}{\partial w_{i,j}} = \sum_{p,q} \frac{\partial L}{\partial Z_{p,q}} \cdot \frac{\partial Z_{p,q}}{\partial w_{i,j}}
}
∂wi,j∂L=p,q∑∂Zp,q∂L⋅∂wi,j∂Zp,q
∂Zp,q∂wi,j=xp+i,q+j \frac{\partial Z_{p,q}}{\partial w_{i,j}} = x_{p+i, q+j} ∂wi,j∂Zp,q=xp+i,q+j
∂L∂wi,j=∑p,q∂L∂Zp,q⋅xp+i,q+j \frac{\partial L}{\partial w_{i,j}} = \sum_{p,q} \frac{\partial L}{\partial Z_{p,q}} \cdot x_{p+i, q+j} ∂wi,j∂L=p,q∑∂Zp,q∂L⋅xp+i,q+j
偏置梯度公式为:
:
∂L∂b=∑p,q∂L∂Zp,q⋅∂Zp,q∂b
\frac{\partial L}{\partial b} = \sum_{p,q} \frac{\partial L}{\partial Z_{p,q}} \cdot \frac{\partial Z_{p,q}}{\partial b}
∂b∂L=p,q∑∂Zp,q∂L⋅∂b∂Zp,q
∂Zp,q∂b=1 \frac{\partial Z_{p,q}}{\partial b} = 1 ∂b∂Zp,q=1
∂L∂b=∑p,q∂L∂Zp,q \boxed{ \frac{\partial L}{\partial b} = \sum_{p,q} \frac{\partial L}{\partial Z_{p,q}} } ∂b∂L=p,q∑∂Zp,q∂L
三、公式推导细节
1. ∂L∂Zp,q\frac{\partial L}{\partial Z_{p,q}}∂Zp,q∂L 的含义和推导(误差信号 δp,q\delta_{p,q}δp,q)
这里定义:
δp,q:=∂L∂Zp,q
\delta_{p,q} := \frac{\partial L}{\partial Z_{p,q}}
δp,q:=∂Zp,q∂L
它表示的是“损失函数 LLL 对卷积层输出 Zp,qZ_{p,q}Zp,q 的梯度”,也即该位置输出对应的误差大小。
以交叉熵损失和softmax输出为例
- 网络最终输出的logits展开成向量 z=[Z0,0,Z0,1,…]\mathbf{z} = [Z_{0,0}, Z_{0,1}, \ldots]z=[Z0,0,Z0,1,…]
- softmax计算概率:
pi=ezi∑jezj p_i = \frac{e^{z_i}}{\sum_j e^{z_j}} pi=∑jezjezi
- 交叉熵损失:
L=−∑iyilogpi L = -\sum_i y_i \log p_i L=−i∑yilogpi
其中 yiy_iyi 是真实标签的 one-hot 编码。
利用链式法则和softmax+交叉熵的性质,我们有经典的梯度公式:
δi=∂L∂zi=pi−yi
\delta_i = \frac{\partial L}{\partial z_i} = p_i - y_i
δi=∂zi∂L=pi−yi
这个梯度 δi\delta_iδi 正是误差信号,从最终输出反传回每个卷积输出元素。
2. ∂Zp,q∂wi,j\frac{\partial Z_{p,q}}{\partial w_{i,j}}∂wi,j∂Zp,q 的含义和推导
回到卷积输出计算公式:
Zp,q=∑i,jwi,j⋅xp+i,q+j+b
Z_{p,q} = \sum_{i,j} w_{i,j} \cdot x_{p+i, q+j} + b
Zp,q=i,j∑wi,j⋅xp+i,q+j+b
对 wi,jw_{i,j}wi,j 求偏导,其他项看作常数:
∂Zp,q∂wi,j=xp+i,q+j
\frac{\partial Z_{p,q}}{\partial w_{i,j}} = x_{p+i, q+j}
∂wi,j∂Zp,q=xp+i,q+j
意思是卷积输出某个位置对应权重的梯度,是该位置对应卷积核覆盖的输入元素的值。
四、结合例子手算权重梯度
假设输入和卷积核如下:
x=[123456789],w=[10−11],b=0
x = \begin{bmatrix}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{bmatrix},
\quad
w = \begin{bmatrix}
1 & 0 \\
-1 & 1
\end{bmatrix},
\quad b=0
x=147258369,w=[1−101],b=0
1. 卷积输出计算(stride=1, no padding)
Z0,0=1∗1+0∗2+(−1)∗4+1∗5=2Z0,1=1∗2+0∗3+(−1)∗5+1∗6=3Z1,0=1∗4+0∗5+(−1)∗7+1∗8=5Z1,1=1∗5+0∗6+(−1)∗8+1∗9=6 \begin{aligned} Z_{0,0} &= 1*1 + 0*2 + (-1)*4 + 1*5 = 2 \\ Z_{0,1} &= 1*2 + 0*3 + (-1)*5 + 1*6 = 3 \\ Z_{1,0} &= 1*4 + 0*5 + (-1)*7 + 1*8 = 5 \\ Z_{1,1} &= 1*5 + 0*6 + (-1)*8 + 1*9 = 6 \end{aligned} Z0,0Z0,1Z1,0Z1,1=1∗1+0∗2+(−1)∗4+1∗5=2=1∗2+0∗3+(−1)∗5+1∗6=3=1∗4+0∗5+(−1)∗7+1∗8=5=1∗5+0∗6+(−1)∗8+1∗9=6
2. 假设真实标签是 y=[0,1,0,0]y = [0,1,0,0]y=[0,1,0,0],对应softmax概率和误差
计算softmax概率:
输出位置 | Zp,qZ_{p,q}Zp,q | 计算概率 pip_ipi | 标签 yiy_iyi | 误差 δi=pi−yi\delta_i = p_i - y_iδi=pi−yi |
---|---|---|---|---|
(0,0) | 2 | 0.0127 | 0 | 0.0127 |
(0,1) | 3 | 0.0347 | 1 | -0.9653 |
(1,0) | 5 | 0.2562 | 0 | 0.2562 |
(1,1) | 6 | 0.6964 | 0 | 0.6964 |
3. 计算权重梯度 ∂L∂w0,0\frac{\partial L}{\partial w_{0,0}}∂w0,0∂L
根据公式:
∂L∂w0,0=∑p,qδp,q⋅xp+0,q+0
\frac{\partial L}{\partial w_{0,0}} = \sum_{p,q} \delta_{p,q} \cdot x_{p+0, q+0}
∂w0,0∂L=p,q∑δp,q⋅xp+0,q+0
输出位置 | δp,q\delta_{p,q}δp,q | 对应输入 xp,qx_{p,q}xp,q | 贡献 δp,q×xp,q\delta_{p,q} \times x_{p,q}δp,q×xp,q |
---|---|---|---|
(0,0) | 0.0127 | 1 | 0.0127 |
(0,1) | -0.9653 | 2 | -1.9306 |
(1,0) | 0.2562 | 4 | 1.0248 |
(1,1) | 0.6964 | 5 | 3.482 |
最终梯度值:
0.0127−1.9306+1.0248+3.482=2.589
0.0127 - 1.9306 + 1.0248 + 3.482 = 2.589
0.0127−1.9306+1.0248+3.482=2.589
4.后台有人询问的计算其他w权重的过程,为了更加清晰的表现权重的变化和计算方式,我们现在要计算 ∂L∂w0,1\frac{\partial L}{\partial w_{0,1}}∂w0,1∂L。其中卷积核 www(2×2)结构为:
w=[w0,0w0,1w1,0w1,1] w = \begin{bmatrix} w_{0,0} & w_{0,1} \\ w_{1,0} & w_{1,1} \end{bmatrix} w=[w0,0w1,0w0,1w1,1]
🧾 1. 找出所有输出位置 (p,q)(p,q)(p,q)
我们使用 stride = 1, padding = 0,输出是:
Z=[Z0,0Z0,1Z1,0Z1,1]
Z =
\begin{bmatrix}
Z_{0,0} & Z_{0,1} \\
Z_{1,0} & Z_{1,1}
\end{bmatrix}
Z=[Z0,0Z1,0Z0,1Z1,1]
对应的误差项(δ)为:
输出位置 (p,q)(p,q)(p,q) | δp,q\delta_{p,q}δp,q(假设) |
---|---|
(0,0) | 0.0127 |
(0,1) | -0.9653 |
(1,0) | 0.2562 |
(1,1) | 0.6964 |
🔍 2. 分析每个输出位置中 w0,1w_{0,1}w0,1 乘到的输入元素 xp+0,q+1=xp,q+1x_{p+0,q+1} = x_{p,q+1}xp+0,q+1=xp,q+1
输出位置 (p,q)(p,q)(p,q) | 输入元素 xp,q+1x_{p,q+1}xp,q+1 | 元素值 | 贡献(δ × 输入) |
---|---|---|---|
(0,0) | x0,1x_{0,1}x0,1 | 2 | 0.0127×2=0.02540.0127 × 2 = 0.02540.0127×2=0.0254 |
(0,1) | x0,2x_{0,2}x0,2 | 3 | −0.9653×3=−2.8959-0.9653 × 3 = -2.8959−0.9653×3=−2.8959 |
(1,0) | x1,1x_{1,1}x1,1 | 5 | 0.2562×5=1.2810.2562 × 5 = 1.2810.2562×5=1.281 |
(1,1) | x1,2x_{1,2}x1,2 | 6 | 0.6964×6=4.17840.6964 × 6 = 4.17840.6964×6=4.1784 |
✅ 3. 累加这些贡献:
∂L∂w0,1=0.0254−2.8959+1.281+4.1784=2.5889 \frac{\partial L}{\partial w_{0,1}} = 0.0254 - 2.8959 + 1.281 + 4.1784 = 2.5889 ∂w0,1∂L=0.0254−2.8959+1.281+4.1784=2.5889
至此w0,1w_{0,1}w0,1计算结束
****5.还有朋友问输出大小是怎么计算的?和输出位置 (p,q)(p,q)(p,q)是怎么确定的四个点,对此我多啰嗦两句
我按照我的理解解答一下
对于 2D 卷积操作,输出大小由下面的公式计算:
输出高度=⌊输入高−卷积核高+2×paddingstride⌋+1
\text{输出高度} = \left\lfloor \frac{\text{输入高} - \text{卷积核高} + 2 \times \text{padding}}{\text{stride}} \right\rfloor + 1
输出高度=⌊stride输入高−卷积核高+2×padding⌋+1
代入数值:
输出高度=⌊3−2+01⌋+1=2
\text{输出高度} = \left\lfloor \frac{3 - 2 + 0}{1} \right\rfloor + 1 = 2
输出高度=⌊13−2+0⌋+1=2
✅ 所以输出是 2 × 2
输出张量 ZZZ 的大小是:
Z=[Z0,0Z0,1Z1,0Z1,1]
Z =
\begin{bmatrix}
Z_{0,0} & Z_{0,1} \\
Z_{1,0} & Z_{1,1}
\end{bmatrix}
Z=[Z0,0Z1,0Z0,1Z1,1]
也就是说,输出有 4 个位置,分别位于:
- 第 0 行第 0 列:(0,0)(0,0)(0,0)
- 第 0 行第 1 列:(0,1)(0,1)(0,1)
- 第 1 行第 0 列:(1,0)(1,0)(1,0)
- 第 1 行第 1 列:(1,1)(1,1)(1,1)
4. 同理,其他权重和偏置梯度计算类似 推导为:
∂L∂b=∑p,q∂L∂Zp,q⋅∂Zp,q∂b=∑p,qδp,q⋅1=∑p,qδp,q \frac{\partial L}{\partial b} = \sum_{p,q} \frac{\partial L}{\partial Z_{p,q}} \cdot \frac{\partial Z_{p,q}}{\partial b} = \sum_{p,q} \delta_{p,q} \cdot 1 = \sum_{p,q} \delta_{p,q} ∂b∂L=p,q∑∂Zp,q∂L⋅∂b∂Zp,q=p,q∑δp,q⋅1=p,q∑δp,q
偏置梯度为所有 δp,q\delta_{p,q}δp,q 的和(此处省略计算过程,即走完神经网络后得出向量的交叉熵的所有导数相加):
∂L∂b=∑p,qδp,q=0.0127−0.9653+0.2562+0.6964≈0.000
\frac{\partial L}{\partial b} = \sum_{p,q} \delta_{p,q} = 0.0127 - 0.9653 + 0.2562 + 0.6964 \approx 0.000
∂b∂L=p,q∑δp,q=0.0127−0.9653+0.2562+0.6964≈0.000
五、全流程总结
步骤 | 数学表达 | 说明 |
---|---|---|
预测输出 | Zp,qZ_{p,q}Zp,q | 卷积核权重和输入计算得到卷积输出 |
计算softmax概率 | pi=ezi∑ezjp_i = \frac{e^{z_i}}{\sum e^{z_j}}pi=∑ezjezi | 将logits转为概率 |
计算交叉熵损失 | L=−∑yilogpiL = -\sum y_i \log p_iL=−∑yilogpi | 衡量预测与标签差距 |
误差信号计算 | δi=pi−yi\delta_i = p_i - y_iδi=pi−yi | 损失对卷积输出的梯度,反向传播起点 |
计算卷积核权重梯度 | ∂L∂wi,j=∑δp,q⋅xp+i,q+j\frac{\partial L}{\partial w_{i,j}} = \sum \delta_{p,q} \cdot x_{p+i, q+j}∂wi,j∂L=∑δp,q⋅xp+i,q+j | 误差乘以对应输入累加 |
计算偏置梯度 | ∂L∂b=∑δp,q\frac{\partial L}{\partial b} = \sum \delta_{p,q}∂b∂L=∑δp,q | 误差累加 |
梯度下降更新参数 | wi,j:=wi,j−η∂L∂wi,jw_{i,j} := w_{i,j} - \eta \frac{\partial L}{\partial w_{i,j}}wi,j:=wi,j−η∂wi,j∂L | 用学习率 η\etaη 调整权重 |
六、线性层权重与偏置(扩展)
线性层计算:
z=Wx+b
z = Wx + b
z=Wx+b
权重梯度:
∂L∂W=δ⋅xT
\frac{\partial L}{\partial W} = \delta \cdot x^T
∂W∂L=δ⋅xT
偏置梯度:
∂L∂b=δ
\frac{\partial L}{\partial b} = \delta
∂b∂L=δ
这里 δ\deltaδ 是线性层输出的误差向量。
之前纳闷为什么在同一流程中,卷积的偏置是个
数字,而线性层的偏置是个向量,经过多方寻找答案,说说我的理解
我认为在反向传播时 ## 混淆了两个不同层的 δ:
层级 | δ 是什么 | 形状 | 说明 |
---|---|---|---|
全连接层输出 | δi=pi−yi\delta_i = p_i - y_iδi=pi−yi | 向量 (N,) | 输出的 softmax + 交叉熵误差(如分类问题中每个类别的误差) |
卷积输出层 | δp,q=∂L∂Zp,q\delta_{p,q} = \frac{\partial L}{\partial Z_{p,q}}δp,q=∂Zp,q∂L | 矩阵 (H×W) | 卷积特征图每个位置的误差,是误差向量反向传播进来的结果 |
在反向传播过程中,这些 δ 会被 reshape 回去成 2×2 特征图误差:
这就变成了卷积层的每个输出位置的误差 δp,q\delta_{p,q}δp,q。
七、结语
我尽量用详尽数学推导和实际数值例子,说明下交叉熵损失如何反向传递影响卷积核权重和偏置的计算过程。理解这些,就可以对卷积神经网络训练的核心机制理解的更加深刻。有哪里写的不清楚欢迎随时交流!
觉得有用的朋友点个赞吧,谢谢!!