什么是CNN?
卷积神经网络(Convolutional Neural Network,CNN) 是一类专门处理具有网格结构数据(如图像)的深度学习模型。它通过卷积运算自动提取图像特征,是计算机视觉领域最重要的模型架构。
CNN的核心组件
1. 卷积层(Convolutional Layer)
用一个小的矩阵(卷积核/滤波器)在图像上滑动,对覆盖区域做内积运算,提取局部特征。
卷积运算:将卷积核与图像对应区域的元素逐个相乘,再求和。
不同的卷积核可以提取不同的特征:
- 边缘检测核(如 [[1,-1],[1,-1]])→ 提取边缘轮廓
- 模糊核(如 [[1,1],[1,1]])→ 平滑图像
关键参数:
- 输入通道数、输出通道数
- 卷积核大小(如 5×5)
- 步长(stride)
- 填充(padding)
输出尺寸公式:output = (input - kernel + 2×padding) / stride + 1
2. 激活层
通常在卷积层后接 ReLU 激活函数,引入非线性。
3. 池化层(Pooling Layer)
对特征图进行下采样(降维),减少参数量和计算量。
最大池化(Max Pooling):取区域内的最大值
平均池化(Average Pooling):取区域内的平均值
4. 全连接层(Fully Connected Layer)
将卷积和池化提取的特征展平,送入传统神经网络进行分类。
需要先做维度转换:x = x.view(x.size(0), -1),将四维张量展平为二维。
CNN的前向传播顺序
卷积层 → 激活(ReLU) → 池化层 → ... → 全连接层 → 输出层
可以有多个"卷积+激活+池化"块堆叠,逐步提取更高级的特征。
经典架构:LeNet-5
LeNet-5 是最早的CNN之一,用于手写数字识别:
- 卷积块1:Conv2d(1→6, 5×5) → ReLU → MaxPool(2×2)
- 卷积块2:Conv2d(6→16, 5×5) → ReLU → MaxPool(2×2)
- 全连接层:Linear(16×5×5, 120) → Linear(120, 84) → Linear(84, 10)
内积运算与卷积运算
内积(点积)
两个矩阵对应元素相乘后全部求和,结果是一个标量。
A=[[1,1],[1,-1]], B=[[1,2],[3,4]]
内积 = 1×1 + 1×2 + 1×3 + (-1)×4 = 2
卷积运算
卷积核在大矩阵上滑动,每个位置做一次内积运算,结果是一个矩阵。
考试要点
- CNN前向传播顺序:卷积层→池化层→全连接层→输出层
- 卷积核 [[1,-1],[1,-1]] 可以做边缘检测
- 输出尺寸公式:(input - kernel + 2×padding) / stride + 1
- 全连接层前需要展平:x.view(x.size(0), -1)
- Conv2d参数:输入通道、输出通道、卷积核大小