Deep Learning Notes

CNN 卷积神经网络:从直觉到考试计算

这页按“先直觉解释,再数学解释,再例题训练”的顺序学习 CNN。读完后,你应该能说清卷积核、padding、stride、pooling、feature map,也能稳定解决输出尺寸计算题。

局部特征 卷积窗口 输出尺寸公式 8 道练习 交互计算器
输入图片
10-1 10-1 10-1
卷积层
特征图
分类结果
核心直觉:CNN 不是一次性看完整张图,而是用小窗口在图上滑动,反复寻找局部模式,再把局部模式组合成更高级的形状和语义。

一、CNN 是什么

直觉解释:卷积神经网络 CNN 是一种特别适合处理图像的神经网络。它像一个会移动的小探测器:先在局部区域中找边缘、角点、纹理,再逐层组合成眼睛、轮廓、物体等更复杂的模式。

和普通全连接神经网络 MLP 的区别:MLP 通常把图片摊平成一长串数字,位置关系容易被打散;CNN 保留图片的二维空间结构,用卷积核在局部区域上重复扫描。

为什么图像不能只依赖 MLP?

  • 图像像素有强烈的空间关系:相邻像素常共同构成边缘、纹理和局部形状。
  • 把图片拉平成向量后,上下左右的邻近关系不再明显。
  • 全连接层参数量很大,容易计算量高、过拟合。

图像中的局部结构

  • 边缘:亮暗变化明显的位置,如物体轮廓。
  • 纹理:重复出现的小模式,如布料纹路、草地纹理。
  • 形状:由多个边缘和纹理组合出的局部或整体结构。
考试表述:CNN 通过局部连接和参数共享保留图像空间结构,能高效提取边缘、纹理、形状等层次化特征,因此适合图像分类、检测、分割等任务。

二、卷积操作的直观理解

直觉解释:卷积核是一个小矩阵,例如 3×3。它覆盖输入图片的一小块区域,把对应元素相乘后求和,得到输出特征图中的一个值。然后卷积核向右或向下滑动,重复这个过程。

5×5 输入矩阵与 3×3 卷积核滑动

12013 01231 10120 21012 03101

当前窗口位置:第 1 行,第 1 列。这个 3×3 区域就是一个局部感受野。

一次窗口计算如何得到一个输出值

120 012 101
输入窗口
×
10-1 10-1 10-1
竖线/边缘卷积核
=
-1
输出值
1×1 + 2×0 + 0×(-1) + 0×1 + 1×0 + 2×(-1) + 1×1 + 0×0 + 1×(-1) = -1

局部感受野:某个输出值只“看见”输入中的一个局部区域。这里 3×3 窗口就是该输出值的感受野。

数学解释:卷积输出的每个元素 = 输入局部窗口与卷积核逐元素相乘再求和。一个卷积核常对应一种局部模式探测器,例如竖线、横线、边缘、角点。

三、卷积核如何提取局部特征

直觉解释:不同卷积核会学习不同特征。一个核可能对竖直边缘敏感,另一个核可能对水平边缘敏感,还有的核会对纹理、角点或颜色变化敏感。

浅层特征

边缘、亮暗变化、简单纹理。

中层特征

角点、局部形状、重复结构。

深层特征

物体部件、整体轮廓、语义类别。

Feature map 是什么?

某个卷积核扫完整张图后,会得到一张新的二维结果图,这张图叫 feature map。它记录“这个卷积核要找的模式在各个位置出现得多强”。

多个卷积核会怎样?

如果一个卷积层有 16 个卷积核,就会产生 16 张 feature maps。每张图关注一种特征,最后堆叠成输出的 16 个通道。

例题表述:若输入经过一个包含 32 个 filter 的卷积层,空间尺寸按公式计算,输出通道数通常为 32,即产生 32 张 feature maps。

四、输出尺寸计算

直觉解释:输出尺寸取决于卷积核能在输入上放多少个合法位置。输入越大,位置越多;卷积核越大,位置越少;padding 会让边界变宽;stride 越大,跳得越远,位置越少。

O = (I - K + 2P) / S + 1 一维尺寸公式;二维图像的高和宽分别套用一次
IInput size
输入尺寸
KKernel size
卷积核尺寸
PPadding
每侧补零数量
SStride
滑动步长
OOutput size
输出尺寸
重要结论:如果计算结果不是整数,通常说明参数组合不匹配,或需要按具体框架设置向下取整。例如很多深度学习框架的默认公式会用 floor,但考试题通常希望参数使结果为整数。

四类必会例题

1. 无 padding,stride = 1

输入 I = 32,卷积核 K = 3,padding P = 0,stride S = 1。

O = (32 - 3 + 2×0) / 1 + 1 = 29 + 1 = 30

直觉:3×3 卷积核在 32 个位置长度上,最多从第 1 个格子放到第 30 个格子。

2. 有 padding,stride = 1

输入 I = 32,卷积核 K = 3,padding P = 1,stride S = 1。

O = (32 - 3 + 2×1) / 1 + 1 = 31 / 1 + 1 = 32

直觉:左右各补 1 个格子后,3×3 卷积保持原尺寸,这常被称为 same convolution。

3. 无 padding,stride = 2

输入 I = 32,卷积核 K = 3,padding P = 0,stride S = 2。

O = (32 - 3 + 2×0) / 2 + 1 = 29 / 2 + 1 = 15.5

结果不是整数,说明标准整齐滑动时参数不匹配。若框架向下取整,则输出为 floor(15.5) = 15。

4. 有 padding,stride = 2

输入 I = 32,卷积核 K = 3,padding P = 1,stride S = 2。

O = (32 - 3 + 2×1) / 2 + 1 = 31 / 2 + 1 = 16.5

结果仍不是整数。若框架向下取整,则输出为 floor(16.5) = 16;考试中要先指出不整除。

五、Padding

直觉解释:padding 就是在输入边缘周围补一圈或多圈数值,最常见是补 0。它像给图片加边框,让卷积核也能更充分地覆盖边缘像素。

为什么需要 padding?

  • 保留边缘信息:边缘像素不再只被少量窗口看到。
  • 控制输出尺寸:选择合适 P 可以让输出变大、变小或保持不变。
  • 防止尺寸下降太快:深层网络连续卷积时更稳定。

Valid vs Same

类型 含义
valid convolution 通常 P = 0,不补边,输出尺寸会变小。
same convolution 选择合适 P,使 S = 1 时输出尺寸与输入相同。

5×5 输入加 P = 1 后变成 7×7

12013 01231 10120 21012 03101
原始 5×5
0000000 0120130 0012310 0101200 0210120 0031010 0000000
P = 1 后,等效尺寸 7×7
例:I = 5, K = 3, P = 1, S = 1,则 O = (5 - 3 + 2×1) / 1 + 1 = 5

六、Stride

直觉解释:stride 是卷积核每次移动的步长。stride = 1 表示一步一格;stride = 2 表示每次跳两格。跳得越远,能放置窗口的位置越少,输出尺寸越小。

stride = 1
stride = 2
计算题 1

I = 28,K = 5,P = 0,S = 1。

O = (28 - 5 + 2×0) / 1 + 1 = 23 + 1 = 24
计算题 2

I = 28,K = 5,P = 0,S = 2。

O = (28 - 5 + 2×0) / 2 + 1 = 23 / 2 + 1 = 12.5,不是整数;若 floor,则为 12。
考试提醒:看到 S 变大,先在脑中判断“输出会变小”,再代入公式确认具体数值。

七、Pooling

直觉解释:pooling 是对局部区域做摘要。max pooling 取最大值,保留最强响应;average pooling 取平均值,保留整体水平。

Pooling 的作用

  • 降低空间尺寸。
  • 减少后续计算量。
  • 保留主要特征响应。
  • 提高一定程度的位置鲁棒性。

是否有可学习参数?

通常 pooling 没有可学习参数。它不像卷积核那样通过训练学习权重,而是按固定规则取最大值或平均值。

4×4 矩阵做 2×2 max pooling,stride = 2

1320 2514 0231 1206
每个 2×2 区域取最大值
54 26
输出 2×2
尺寸变化:I = 4, K = 2, P = 0, S = 2,所以 O = (4 - 2 + 0) / 2 + 1 = 2

八、CNN 为什么适合图像

1. 局部连接

图像中局部像素关系强。CNN 每个神经元只连接一小块局部区域,符合边缘和纹理的形成方式。

2. 参数共享

同一个卷积核在整张图上重复使用。无论边缘出现在左上角还是右下角,都用同一组参数检测。

3. 平移等变性

物体位置改变时,feature map 中的响应位置也随之移动,特征仍能被检测到。

参数数量对比

模型方式 例子 参数量 含义
MLP 全连接 32×32×3 图片连接到 100 个神经元 32×32×3×100 + 100 = 307,300 每个神经元都连接所有像素,参数很多。
CNN 卷积 一个 3×3 卷积核处理 RGB 三通道,产生 1 张 feature map 3×3×3 + 1 = 28 卷积核小,并在整张图共享参数。
CNN 多 filter 若有 100 个 3×3 filter (3×3×3 + 1)×100 = 2,800 仍远少于同例 MLP 的 307,300。
考试可用句:CNN 利用局部连接减少单个神经元的连接范围,利用参数共享大幅减少参数量,并通过滑动卷积在不同位置检测同类特征。

九、考试重点:输出尺寸题

做题步骤固定三步:先写公式,再代入 I、K、P、S,最后判断结果是否为整数。

十、交互式输出尺寸计算器

输入参数后自动计算 O。二维图像做题时,高和宽分别用这个计算器算一次;若高宽相同,只算一次即可。

O = 32
O = (32 - 3 + 2×1) / 1 + 1 = 32
结果是整数,可以作为标准卷积输出尺寸。

十一、CNN 总结表

概念 考试可用解释
convolution 卷积是用卷积核在输入上滑动,对局部窗口逐元素相乘并求和,从而提取局部特征的操作。
kernel 卷积核是一个小的权重矩阵,可学习某类局部模式,如边缘、纹理或角点。
feature map feature map 是某个卷积核扫描输入后得到的响应图,表示该特征在不同位置的强弱。
padding padding 是在输入边缘补值,用于保留边缘信息、控制输出尺寸、防止尺寸过快变小。
stride stride 是卷积核每次移动的步长;stride 越大,输出空间尺寸通常越小。
pooling pooling 对局部区域做最大值或平均值摘要,用于降低尺寸、减少计算并保留主要特征。
channel channel 是输入或输出的通道维度,例如 RGB 图片有 3 个输入通道。
filter filter 通常指一组跨所有输入通道的卷积核权重;一个 filter 产生一张输出 feature map。

十二、最后复习清单

  • 我能解释卷积核如何通过局部窗口提取边缘、纹理、形状等局部特征。
  • 我能熟练使用公式 O = (I - K + 2P) / S + 1 计算输出尺寸。
  • 我能解释 padding、stride、pooling 的含义、作用和对尺寸的影响。
  • 我能说明 CNN 为什么适合图像:局部连接、参数共享、平移等变性。
  • 我能完成常见考试计算题,并能写出完整代入过程。

考前速记版

1. 输出尺寸公式:O = (I - K + 2P) / S + 1。先算分子,再除以 stride,最后 +1。

2. padding:补边。P 越大,输出越大;P = 0 常叫 valid;K = 3, S = 1, P = 1 常可保持尺寸。

3. stride:步长。S 越大,窗口跳得越远,输出越小。

4. pooling:通常无参数,max pooling 取最大值,average pooling 取平均值,用于降尺寸和保留主要特征。

5. CNN 适合图像:局部连接看局部结构,参数共享减少参数,滑动卷积能在不同位置检测同一特征。

6. 不整除:考试中先写“结果不是整数,参数可能不匹配”;若题目说明按框架默认,则常见处理是向下取整。