深度学习核心必懂!交叉熵+卷积层权重偏置梯度详解与完整推导

交叉熵损失如何影响卷积核权重和偏置的梯度计算——反向传播全流程详解


一、前言

大家好,今天咱来讨论下,深度学习中一个特别核心的东西:交叉熵损失是怎么反向传递影响到卷积核权重和偏置的?

我尝试推导、尽量讲清楚每个公式和数学运算,配合具体例子,希望笔者和读者在推过程中能真正理解背后原理,不再云里雾里。


二、问题拆解与关键公式

训练卷积神经网络的目标是不断调整卷积核权重 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,jL,bL


关键链式法则公式:

卷积输出 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,jwi,jxp+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,jL=p,qZp,qLwi,jZp,q

∂Zp,q∂wi,j=xp+i,q+j \frac{\partial Z_{p,q}}{\partial w_{i,j}} = x_{p+i, q+j} wi,jZp,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,jL=p,qZp,qLxp+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} bL=p,qZp,qLbZp,q

∂Zp,q∂b=1 \frac{\partial Z_{p,q}}{\partial b} = 1 bZp,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}} } bL=p,qZp,qL


三、公式推导细节

1. ∂L∂Zp,q\frac{\partial L}{\partial Z_{p,q}}Zp,qL 的含义和推导(误差信号 δ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,qL
它表示的是“损失函数 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=−∑iyilog⁡pi L = -\sum_i y_i \log p_i L=iyilogpi

其中 yiy_iyi 是真实标签的 one-hot 编码。


利用链式法则和softmax+交叉熵的性质,我们有经典的梯度公式:
δi=∂L∂zi=pi−yi \delta_i = \frac{\partial L}{\partial z_i} = p_i - y_i δi=ziL=piyi
这个梯度 δi\delta_iδi 正是误差信号,从最终输出反传回每个卷积输出元素。


2. ∂Zp,q∂wi,j\frac{\partial Z_{p,q}}{\partial w_{i,j}}wi,jZp,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,jwi,jxp+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,jZp,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=[1101],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=11+02+(1)4+15=2=12+03+(1)5+16=3=14+05+(1)7+18=5=15+06+(1)8+19=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=piyi
(0,0)20.012700.0127
(0,1)30.03471-0.9653
(1,0)50.256200.2562
(1,1)60.696400.6964

3. 计算权重梯度 ∂L∂w0,0\frac{\partial L}{\partial w_{0,0}}w0,0L

根据公式:
∂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,0L=p,qδp,qxp+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.012710.0127
(0,1)-0.96532-1.9306
(1,0)0.256241.0248
(1,1)0.696453.482

最终梯度值:
0.0127−1.9306+1.0248+3.482=2.589 0.0127 - 1.9306 + 1.0248 + 3.482 = 2.589 0.01271.9306+1.0248+3.482=2.589

4.后台有人询问的计算其他w权重的过程,为了更加清晰的表现权重的变化和计算方式,我们现在要计算 ∂L∂w0,1\frac{\partial L}{\partial w_{0,1}}w0,1L。其中卷积核 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,120.0127×2=0.02540.0127 × 2 = 0.02540.0127×2=0.0254
(0,1)x0,2x_{0,2}x0,23−0.9653×3=−2.8959-0.9653 × 3 = -2.89590.9653×3=2.8959
(1,0)x1,1x_{1,1}x1,150.2562×5=1.2810.2562 × 5 = 1.2810.2562×5=1.281
(1,1)x1,2x_{1,2}x1,260.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,1L=0.02542.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 输出高度=132+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} bL=p,qZp,qLbZp,q=p,qδp,q1=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 bL=p,qδp,q=0.01270.9653+0.2562+0.69640.000


五、全流程总结

步骤数学表达说明
预测输出Zp,qZ_{p,q}Zp,q卷积核权重和输入计算得到卷积输出
计算softmax概率pi=ezi∑ezjp_i = \frac{e^{z_i}}{\sum e^{z_j}}pi=ezjezi将logits转为概率
计算交叉熵损失L=−∑yilog⁡piL = -\sum y_i \log p_iL=yilogpi衡量预测与标签差距
误差信号计算δi=pi−yi\delta_i = p_i - y_iδi=piyi损失对卷积输出的梯度,反向传播起点
计算卷积核权重梯度∂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,jL=δp,qxp+i,q+j误差乘以对应输入累加
计算偏置梯度∂L∂b=∑δp,q\frac{\partial L}{\partial b} = \sum \delta_{p,q}bL=δ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,jL用学习率 η\etaη 调整权重

六、线性层权重与偏置(扩展)

线性层计算:
z=Wx+b z = Wx + b z=Wx+b
权重梯度:
∂L∂W=δ⋅xT \frac{\partial L}{\partial W} = \delta \cdot x^T WL=δxT
偏置梯度:
∂L∂b=δ \frac{\partial L}{\partial b} = \delta bL=δ
这里 δ\deltaδ 是线性层输出的误差向量。

之前纳闷为什么在同一流程中,卷积的偏置是个
数字,而线性层的偏置是个向量
,经过多方寻找答案,说说我的理解
我认为在反向传播时 ## 混淆了两个不同层的 δ:

层级δ 是什么形状说明
全连接层输出δi=pi−yi\delta_i = p_i - y_iδi=piyi向量 (N,)输出的 softmax + 交叉熵误差(如分类问题中每个类别的误差)
卷积输出层δp,q=∂L∂Zp,q\delta_{p,q} = \frac{\partial L}{\partial Z_{p,q}}δp,q=Zp,qL矩阵 (H×W)卷积特征图每个位置的误差,是误差向量反向传播进来的结果

在反向传播过程中,这些 δ 会被 reshape 回去成 2×2 特征图误差:
这就变成了卷积层的每个输出位置的误差 δp,q\delta_{p,q}δp,q


七、结语

我尽量用详尽数学推导和实际数值例子,说明下交叉熵损失如何反向传递影响卷积核权重和偏置的计算过程。理解这些,就可以对卷积神经网络训练的核心机制理解的更加深刻。有哪里写的不清楚欢迎随时交流!


觉得有用的朋友点个赞吧,谢谢!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值