卷积神经网络 (CNN) 深度理解笔记
一、概述
卷积神经网络(Convolutional Neural Networks, CNN)是一种专门处理具有网格结构数据(如图像)的深度学习模型。其核心思想是利用局部连接(Local Connectivity)和权重共享(Weight Sharing),极大地减少了全连接网络中的参数量。
CNN 可以被理解为一个特征提取器与分类器的组合:通过多层卷积算子学习输入信号
与 MLP 的关键区别:
| 维度 | MLP(全连接) | CNN(卷积) |
|---|---|---|
| 连接方式 | 所有神经元相互连接 | 局部空间连接 |
| 权重结构 | 稠密矩阵 | 稀疏的循环卷积 |
| 参数数量 | ||
| 特性 | 无空间先验 | 平移等变性 |
二、卷积算子与特征提取
一、卷积层的正向传播
1. 张量维度定义
给定输入张量
:输入通道数(Channel),例如 RGB 图像 :输入特征图的高和宽 :卷积核的 spatial 尺寸(通常 或 )
输出特征图
2. 卷积运算的数学定义
输出特征图的一个像素点
其中:
:输出通道索引(对应第 个卷积核) :输入通道索引 :第 个卷积核在第 个通道上的 位置权重 :第 个卷积核的偏置
直观理解:每个输出通道
3. 多卷积核与多通道的关系
如果有
记忆点:卷积层的参数量
4. 输出维度计算(几何约束)
假设输入尺寸为
特例速记:
- Valid 卷积(无Padding,
): - Same 卷积(输出等于输入):当
时, - Max Pooling(
):
5. 参数共享的数学意义
在全连接层中,若输入输出均为
平移不变性的直观理解:无论一只猫出现在图像的左上角还是右下角,同一个卷积核都能检测到”猫”的特征,因为卷积核在整张图上共享权重。
二、数学推导 - 卷积层的反向传播
为了让模型学习到最优特征,我们需要通过损失函数
1. 已知量与目标
假设当前层的输出为
-
对权重
的梯度:用于更新参数。 -
对输入
的梯度:用于继续向上传递误差。
2. 权重梯度的推导
逐元素推导(适合理解原理):
根据链式法则,损失函数对卷积核中某个位置
由前向传播公式可知
用卷积表达:这个求和恰好是输入
其中
结论:权重的梯度等价于输入特征
3. 误差项(对输入 )的传递
为了将误差传给前一层,需计算
经过索引转换,可以证明:
其中
4. Im2Col 矩阵化实现(工程视角)
在 GPU 上高效实现卷积反向传播,需要将卷积转化为矩阵乘法(Im2Col 方法):
-
将输入张量展开为矩阵:
- 将每个滑动窗口(
区域)展平为一行 - 输入
被展开为矩阵
- 将每个滑动窗口(
-
将卷积核展开为矩阵:
- 每个卷积核的
参数展平为一行
- 每个卷积核的
-
前向传播:
-
反向传播:
- 权重梯度:
- 输入梯度:
,然后恢复为 的形状
- 权重梯度:
物理意义:Im2Col 将局部运算转化为全局矩阵运算,从而可以充分利用 GPU 的矩阵乘法加速单元。
三、下采样(Pooling)与感受野
1. 池化层(Pooling)
池化层通过非线性映射(Max 或 Average)实现空间维度的压缩。
-
Max Pooling:
-
作用: 增加特征对微小形变的鲁棒性,减少计算量,并强制模型学习更全局的抽象特征。
2. 感受野(Receptive Field, RF)
感受野决定了输出特征图中一个点能“看到”输入图像多大的区域。
对于第
其中
直观理解: 随着层数加深,感受野呈线性/指数级扩大,使得网络能从局部的像素点逐步演化为对整个物体的理解。
四、训练链路全流程详析
在训练模式下,CNN 遵循“前向传播 (FP) → 计算损失 → 反向传播 (BP) → 参数更新”的闭环过程。
1. 前向传播链路(Forward Pass)
数据在网络中的流动可以抽象为算子的顺序嵌套:
-
输入层 (Input):原始图像数据
进入网络。 -
卷积运算 (
): -
利用卷积核对输入进行局部加权求和。
-
作用:提取空间局部特征(如纹理、颜色梯度)。
-
-
激活层 (
): -
通常使用 ReLU,将卷积后的线性结果进行非线性映射。
-
数学性质:
。它解决了梯度消失问题并带来了神经网络的稀疏性。
-
-
池化层 (Pooling):
- 执行下采样(如 Max Pooling),在保留核心特征的同时减小特征图尺寸。
-
全连接层 (FC Layer):
-
将最后一层卷积得到的特征图“压平”(Flatten)为一维向量。
-
通过矩阵乘法
将高维特征映射到类别分数空间。
-
-
输出与 Loss 计算:
-
经过 Softmax 函数将分数转化为概率分布
。 -
使用 交叉熵损失 (Cross-Entropy Loss) 计算预测值与真实标签
的距离:
-
2. 反向传播链路(Backward Pass)
训练的核心是利用链式法则计算损失函数
A. 误差项的传递(从后往前)
首先计算输出层的梯度
-
FC 层梯度:标准的矩阵转置相乘,将误差分配给每个神经元。
-
池化层反传:
-
Max Pooling:误差只传递回前向传播时贡献最大值(Max)的那个位置,其余位置梯度为 0(这被称为“梯度掩码”)。
-
Average Pooling:误差平均分配回该池化窗口内的所有像素。
-
B. 卷积层权重梯度计算
这是更新卷积核的关键步骤。如第二部分所述,第
这意味着:卷积核的更新方向,取决于上一层的激活值与当前层误差项的相关性。
C. 梯度传播至前一层
为了让更浅的层得到更新,误差项必须穿过当前的卷积核:
其中
3. 参数更新(Optimizer)
在得到梯度
其中
训练链路总结:
-
前向:通过卷积核的平移提取局部特征,通过池化进行特征聚合,最终实现降维分类。
-
后向:误差项通过卷积核的翻转卷积逆向回传,权重通过误差与激发的互相关实现自我进化。
三、总结
CNN 的强大在于其精心设计的归纳偏置(Inductive Bias):
-
局部性: 认为相关信息存在于相邻像素间。
-
平移等变性: 无论特征出现在图像何处,相同的卷积核都能捕捉到它。
-
层次化: 通过堆叠卷积层,将复杂的非线性特征分解为简单的空间变换,这与人类视觉皮层(V1 到 V4 区域)的处理逻辑高度相似。