目录
一、前言
二、为什么需要反向传播
三、卷积层训练的本质
四、卷积前向传播回顾
五、反向传播要解决什么问题
六、卷积反向传播核心思想
七、理解卷积核梯度
八、卷积核更新过程
九、输入层梯度如何计算
十、为什么卷积核要旋转180度
十一、多通道卷积反向传播
十二、多卷积核梯度计算
十三、池化层如何反向传播
十四、平均池化反向传播
十五、卷积反向传播完整流程
十六、PyTorch自动求导示例
十七、验证参数更新
十八、为什么CNN能够自动学习边缘检测
十九、面试高频问题
卷积层中的参数是什么?
卷积核如何更新?
卷积反向传播核心是什么?
输入梯度如何计算?
最大池化如何回传梯度?
为什么需要反向传播?
二十、总结
在前面的文章中,我们已经学习了:
感知器 神经网络 梯度下降 反向传播算法 二维卷积 多通道卷积 池化层我们知道:
CNN之所以能够识别图像 本质上是因为能够不断学习卷积核参数那么问题来了:
卷积核中的参数 究竟是如何更新的? 卷积层如何参与反向传播? 卷积神经网络如何知道卷积核该往哪个方向调整?答案就是:
卷积反向传播(Convolution Backpropagation)它是整个 CNN 训练过程的核心。
本文将系统讲解:
卷积层训练过程 卷积前向传播 卷积反向传播原理 梯度如何计算 卷积核如何更新 多通道卷积梯度计算 PyTorch自动求导实现二、为什么需要反向传播
神经网络训练过程:
目标:
让预测结果 越来越接近真实值例如:
真实标签: 1模型预测:
0.3误差:
0.7此时需要:
调整卷积核参数让预测结果变得更准确。
三、卷积层训练的本质
假设输入图像:
1 2 3 4 5 6 7 8 9卷积核:
1 0 0 1前向传播:
输入矩阵 × 卷积核 ↓ 特征图此时:
卷积核中的数字 实际上就是模型参数例如:
1 0 0 1训练过程就是不断调整:
卷积核权重使损失函数最小。
四、卷积前向传播回顾
输入:
1 2 3 4 5 6 7 8 9卷积核:
1 0 0 1第一次卷积:
1×1 + 2×0 +4×0 +5×1结果:
6最终得到:
6 8 12 14这就是:
前向传播五、反向传播要解决什么问题
训练时我们已经知道:
损失函数 Loss例如:
Loss = 10此时需要计算:
Loss 对卷积核参数的影响即:
∂Loss/∂W含义:
卷积核参数变化一点点 损失会变化多少这就是:
梯度六、卷积反向传播核心思想
反向传播核心:
链式法则(Chain Rule)公式:
∂Loss/∂W = ∂Loss/∂Output × ∂Output/∂W理解:
损失对输出的影响 × 输出对权重的影响即可得到:
损失对权重的影响七、理解卷积核梯度
假设:
输入:
1 2 3 4卷积核:
w1 w2 w3 w4卷积结果:
Output = 1*w1 +2*w2 +3*w3 +4*w4如果:
Loss对Output梯度 = 2则:
∂Loss/∂w1 = 2 × 1 =2同理:
∂Loss/∂w2 = 2 × 2 =4∂Loss/∂w3 = 2 × 3 =6∂Loss/∂w4 = 2 × 4 =8因此:
梯度矩阵 = 2 4 6 8可以发现:
输入值越大 产生的梯度越大八、卷积核更新过程
梯度已经得到:
2 4 6 8学习率:
0.01更新公式:
Wnew = Wold - LearningRate × Gradient例如:
1 - 0.01×2 = 0.98更新后:
卷积核变成 0.98 ...如此不断迭代。
九、输入层梯度如何计算
不仅卷积核需要梯度。
输入也需要梯度。
原因:
上一层网络 还需要继续反向传播计算方式:
输入梯度 = 输出梯度 与旋转180度卷积核再次卷积示意:
flowchart LR 输出梯度 --> 旋转卷积核 --> 输入梯度因此:
卷积既出现在前向传播 也出现在反向传播十、为什么卷积核要旋转180度
假设卷积核:
1 2 3 4旋转后:
4 3 2 1这是卷积数学定义决定的。
在推导过程中:
输入梯度 = 误差图 与翻转卷积核卷积因此:
反向传播时 需要卷积核翻转十一、多通道卷积反向传播
前面讲过:
RGB图片:
R G B对应:
3个输入通道卷积核:
3 × 3 × 3结构:
反向传播时:
每个通道分别计算梯度 最后累加十二、多卷积核梯度计算
假设:
16个卷积核则:
产生16张特征图反向传播时:
16张误差图分别计算:
每个卷积核梯度因此:
卷积核越多 计算量越大十三、池化层如何反向传播
最大池化:
1 3 5 6输出:
6反向传播时:
梯度只传给最大值位置即:
0 0 0 1误差:
仅回传给6十四、平均池化反向传播
输入:
1 3 5 7输出:
4反向传播:
梯度平均分配例如:
误差 = 4则:
1 1 1 1每个位置获得:
4 / 4 =1十五、卷积反向传播完整流程
整个训练过程:
循环执行:
前向传播 ↓ 计算损失 ↓ 反向传播 ↓ 更新参数最终收敛。
十六、PyTorch自动求导示例
创建卷积层:
import torch import torch.nn as nn conv = nn.Conv2d( in_channels=1, out_channels=1, kernel_size=3 )输入:
x = torch.randn( 1, 1, 5, 5, requires_grad=True )前向传播:
y = conv(x) loss = y.sum()反向传播:
loss.backward()查看卷积核梯度:
print(conv.weight.grad)输出:
卷积核梯度矩阵十七、验证参数更新
优化器:
optimizer = torch.optim.SGD( conv.parameters(), lr=0.01 )训练:
optimizer.zero_grad() loss.backward() optimizer.step()其中:
step() 负责更新卷积核本质:
W = W - η × Gradient十八、为什么CNN能够自动学习边缘检测
训练初期:
卷积核随机初始化例如:
0.12 -0.34 0.22经过:
数万次反向传播逐渐变成:
边缘检测核 纹理检测核 轮廓检测核因此:
CNN无需人工设计特征能够:
自动学习图像特征十九、面试高频问题
卷积层中的参数是什么?
卷积核权重卷积核如何更新?
梯度下降 反向传播卷积反向传播核心是什么?
链式法则输入梯度如何计算?
误差图 与翻转卷积核卷积最大池化如何回传梯度?
仅回传给最大值位置为什么需要反向传播?
计算梯度 更新参数 降低损失函数二十、总结
卷积神经网络训练的核心在于:
前向传播 ↓ 计算损失 ↓ 反向传播 ↓ 计算梯度 ↓ 更新卷积核其中:
卷积层负责提取特征 池化层负责压缩特征 反向传播负责学习特征整个流程可以概括为:
输入图像 ↓ 卷积 ↓ 池化 ↓ 预测结果 ↓ 计算损失 ↓ 反向传播 ↓ 更新卷积核 ↓ 持续优化可以说:
如果卷积层是 CNN 的“眼睛”,那么反向传播就是 CNN 的“学习能力”。正是因为卷积反向传播算法的存在,卷积核才能从随机数字逐渐演化成边缘检测器、纹理检测器和高级语义特征提取器,最终让 CNN 拥有强大的图像识别能力。