Lecture 3:卷积神经网络
408 学习笔记:Lecture 3:卷积神经网络。保留原有知识内容、公式与图示;有对应原件时提供查看和下载入口。
本页目录
描述:本节整理卷积核、步长、通道、特征图、padding、局部连接与权重共享,并分析 LeNet、AlexNet、VGG、GoogLeNet、ResNet 的结构演进、池化、Dropout、数据增强、感受野和迁移学习。
3.1 CNN 的基本思想
卷积神经网络(Convolutional Neural Network,CNN)在 20 世纪 80-90 年代逐步形成,LeNet 是早期代表。
传统图像处理中,卷积核往往由人工设计;CNN 的关键变化是:
- 从大量样本中自动学习卷积核参数。
- 利用图像的局部结构,让神经元只连接局部区域。
- 让同一卷积核在不同空间位置共享权重。
- 逐层把像素变为边缘、纹理、局部结构和高层语义。
3.2 图像、卷积核与特征图
3.2.1 输入张量
一张 $32\times32$ 的 RGB 图像有 3 个通道,可表示为:
$$ X\in\mathbb R^{32\times32\times3}. $$
深度学习框架常把带批次图像存为 [N,C,H,W],即:
$$ X\in\mathbb R^{N\times3\times32\times32}. $$
3.2.2 卷积核
在普通卷积(groups=1)中,若输入有 3 个通道,一个二维卷积核必须覆盖全部输入通道,例如:
$$ K\in\mathbb R^{5\times5\times3}. $$
卷积核滑到某个位置时,把核元素与覆盖区域逐元素相乘、求和,再加偏置,得到一个输出数。
严格数学卷积会翻转卷积核;主流深度学习框架实际执行互相关(cross-correlation),但习惯上仍称为卷积。
3.2.3 单通道示例与权重共享
对 $3\times3$ 输入和 $2\times2$ 核:
$$ K= \begin{bmatrix} w_1 & w_2\ w_3 & w_4 \end{bmatrix}. $$
步长为 1、无填充时:
$$ p_1=w_1x_1+w_2x_2+w_3x_4+w_4x_5+b, $$
$$ p_2=w_1x_2+w_2x_3+w_3x_5+w_4x_6+b, $$
$$ p_3=w_1x_4+w_2x_5+w_3x_7+w_4x_8+b, $$
$$ p_4=w_1x_5+w_2x_6+w_3x_8+w_4x_9+b. $$
所有位置共享同一组 $w_1,\ldots,w_4$ 和同一个输出通道偏置 $b$。
- 源课件图中把不同位置写成 $b_1,b_2,b_3,b_4$,这不符合标准 CNN 的空间权重共享。
- 一个输出通道对应一个偏置;不同输出通道可有不同偏置。
- 反向传播时,同一共享参数在所有空间位置产生的梯度要累加。
3.2.4 多通道计算
当 groups=1 时,RGB 图像中的一个滤波器分别与 R、G、B 三个通道做局部乘加,再把三通道结果相加并加偏置,生成一个特征图。分组卷积中,每个输出通道只连接其所在组的 $C_{in}/groups$ 个输入通道。
若使用 $C_{out}$ 个滤波器,就得到 $C_{out}$ 个输出通道:
$$ W\in \mathbb R^{C_{out}\times C_{in}\times K_h\times K_w}. $$
上式是 groups=1 的权重形状;一般分组卷积为
$$ W\in \mathbb R^{C_{out}\times(C_{in}/groups)\times K_h\times K_w}. $$
例如 $32\times32\times3$ 输入,使用 6 个 $5\times5\times3$ 滤波器,步长为 1、无填充,输出为:
$$ 28\times28\times6. $$
3.3 步长、填充与输出尺寸
3.3.1 步长
步长(stride)表示卷积核相邻两次位置移动的距离。
stride=(1,1):水平和垂直各移动 1 格。stride=(2,2):每次移动 2 格,输出空间尺寸更小。
遍历通常先沿宽方向移动,到达一行末尾后再向下移动。
3.3.2 通用输出公式
输入高 $H_{in}$、核高 $K_h$、填充 $P_h$、步长 $S_h$、空洞率 $D_h$ 时:
$$ H_{out}
\left\lfloor \frac{H_{in}+2P_h-D_h(K_h-1)-1}{S_h} +1 \right\rfloor. $$
宽度同理:
$$ W_{out}
\left\lfloor \frac{W_{in}+2P_w-D_w(K_w-1)-1}{S_w} +1 \right\rfloor. $$
无空洞、无填充时退化为:
$$ H_{out}
\left\lfloor \frac{H_{in}-K_h}{S_h} \right\rfloor+1. $$
3.3.3 Padding
Padding 在输入边缘补值,最常见是补零。
作用:
- 控制输出尺寸。
- 让边缘像素参与更多卷积窗口。
- 配合适当步长减少信息过快丢失。
当核为奇数、步长为 1、空洞率为 1 时,若希望输出与输入同尺寸,常取:
$$ P=\frac{K-1}{2}. $$
例如 $5\times5$ 核取 $P=2$。
- Padding 并不存在“$2\times2$ 核最多只能补一圈”的理论上限。
- 填充大小应根据目标输出尺寸和模型设计决定;过大填充可能让大量计算落在人工边界上。
3.4 CNN 与全连接网络的区别
3.4.1 局部连接
全连接层中,每个输出神经元连接全部输入;卷积层中,每个输出位置只观察输入的局部感受野。
3.4.2 权重共享
同一卷积核在所有空间位置复用,使模型可以检测某种局部模式,无论它出现在图像哪里。
若输入为 $H\times W\times C_{in}$,输出通道数为 $C_{out}$,卷积核为 $K_h\times K_w$,在 groups=1 且每个输出通道有一个偏置时,参数数目为:
$$ C_{out}(K_hK_wC_{in}+1), $$
与输入的 $H,W$ 无关。
一般分组卷积的参数量为 $C_{out}(K_hK_wC_{in}/groups+1)$;若 bias=False,去掉末尾的 $C_{out}$ 个偏置。
权重共享显著减少参数,但不意味着卷积结果完全平移不变:边界、步长、池化和下采样都会影响平移等变性。
3.5 LeNet-5
3.5.1 课件中的简化结构
| 层 | 输出 | 说明 |
|---|---|---|
| 输入 | $32\times32\times1$ | 灰度图 |
| C1 | $28\times28\times6$ | 6 个 $5\times5$ 卷积核 |
| S2 | $14\times14\times6$ | $2\times2$ 降采样 |
| C3 | $10\times10\times16$ | 16 个 $5\times5\times6$ 卷积核 |
| S4 | $5\times5\times16$ | $2\times2$ 降采样 |
| C5/FC | 120 | 展平后连接 120 个单元 |
| F6 | 84 | 全连接 |
| 输出 | 10 | 十类数字 |
池化/降采样层把相邻 $2\times2$ 区域聚合成一个数,空间尺寸减半。现代实现常用平均池化或最大池化;课件按无参数池化计算。
每个线性卷积或全连接变换之后通常需要非线性激活。否则相邻线性层可以合并,无法增加非线性表达能力。
3.5.2 尺寸计算
从 $14\times14\times6$ 经 $5\times5$、步长 1、无填充卷积:
$$ 14-5+1=10, $$
因此输出为 $10\times10\times16$。
S4 输出含:
$$ 5\times5\times16=400 $$
个数,展平后连接 120 个神经元。
3.5.3 参数量
按课件的“C3 全连接到全部 6 个输入通道、池化无参数”简化版本:
| 层 | 参数量 |
|---|---|
| C1 | $(5\times5\times1+1)\times6=156$ |
| S2 | $0$ |
| C3 | $(5\times5\times6+1)\times16=2416$ |
| S4 | $0$ |
| 400 到 120 | $(400+1)\times120=48120$ |
| 120 到 84 | $(120+1)\times84=10164$ |
| 84 到 10 | $(84+1)\times10=850$ |
| 总计 | $61706$ |
注意:原始 LeNet-5 的 C3 使用部分连接,S2/S4 还有可学习缩放和偏置,因此其精确参数表与课件简化版不同。
早期 CNN 中:
- 卷积层常主导计算量。
- 大型全连接层常主导参数量。
这不是所有现代 CNN 的固定规律;使用全局平均池化后,全连接参数可大幅减少。
3.5.4 功能分工
- 卷积与池化:逐层提取和压缩特征。
- 全连接层:把高层特征映射为类别分数。
- 浅层特征偏向边缘、纹理等细节。
- 深层特征偏向形状、部件和整体语义。
- 最后用 Softmax/交叉熵进行十分类。
3.6 Caffe 实现 LeNet 的历史流程
源课件使用 Caffe,是较早的深度学习框架。流程包括:
create_lmdb.sh:把 MNIST 图片转换为 LMDB/LevelDB。compute_mean.sh:计算训练图像均值,供预处理使用。lenet_train_test.prototxt:定义网络结构和训练/测试数据层。lenet_solver.prototxt:定义优化器和训练超参数。train_lenet.sh:调用 Caffe 启动训练。
课件配置的关键项:
test_iter: 100
test_interval: 500
base_lr: 0.01
momentum: 0.0
weight_decay: 0.0005
lr_policy: "inv"
gamma: 0.0001
power: 0.75
display: 100
max_iter: 10000
snapshot: 5000
solver_mode: GPU
type: "RMSProp"
rms_decay: 0.98
test_interval: 500表示每训练 500 次做一次测试。base_lr: 0.01是基础学习率。- 这套脚本具有历史价值;新项目通常使用 PyTorch 等现代框架,不必为了复现知识点而依赖 Caffe。
3.7 AlexNet
3.7.1 背景与结构
AlexNet 在 ILSVRC-2012 中显著降低 ImageNet 分类错误率,推动深度 CNN 普及。
- 输入常在不同实现中记为 $224\times224$ 或 $227\times227$;差异来自裁剪与卷积尺寸约定。
- 第一层为 96 个 $11\times11$ 卷积核,步长为 4,不是源课件文字中的 16 个。
- 两块 GPU 分担计算,第一组 48 个通道在一块 GPU,另一组 48 个在另一块 GPU,并在特定层交互。
- 网络含 5 个卷积层和 3 个全连接层,输出 1000 类。
- 参数约 6000 万,不是 6 亿。
课件所说“与 LeNet 没有本质区别”,是指二者都遵循卷积、池化、全连接的基本范式;AlexNet 在规模、激活、正则化、数据和算力上都明显升级。
3.7.2 结果口径
课件记录 Top-1 错误率约 $37.5%$、Top-5 错误率约 $16.4%$。不同文献会因单模型/集成和测试口径给出约 $15.3%-17.0%$ 的 Top-5 数字:
- AlexNet 论文摘要常见单模型结果为 Top-1 $37.5%$、Top-5 $17.0%$。
- ILSVRC-2012 获胜集成系统常被引用为 Top-5 $15.3%$。
因此比较时必须说明数据划分和是否集成,不能把多个口径混在一起。
3.8 AlexNet 的关键改进
3.8.1 ReLU
AlexNet 用 ReLU 代替 Sigmoid/tanh:
- 正半轴梯度为 1,缓解饱和区梯度消失。
- 计算简单,训练速度更快。
- 可产生稀疏激活。
但 ReLU 不保证“每层恰好一半神经元激活”,其激活比例由数据和参数决定。
3.8.2 最大池化
最大池化在局部窗口内取最大值:
$$ y=\max(x_1,x_2,\ldots,x_k). $$
- 降低空间分辨率和后续计算量。
- 对小范围位置变化更稳定。
- 引入非线性。
- 反向传播时,梯度传给前向最大值对应位置;并列最大值如何处理由实现决定。
AlexNet 使用重叠最大池化;LeNet 课件示例使用不重叠降采样。重叠池化在当时实验中改善泛化,但不能普遍断言一定优于不重叠池化。
最大池化偏向保留最强局部响应;平均池化保留区域平均信息。把它们简单分别等同于“纹理”和“背景”只是一种直观说法,不是严格结论。
3.8.3 Dropout
训练时,对激活乘 Bernoulli 掩码。现代 inverted Dropout:
$$ \tilde h
\frac{m\odot h}{1-p}, \qquad m_i\sim\operatorname{Bernoulli}(1-p). $$
- $p$ 是丢弃概率。
- 每批掩码不同,可降低神经元共适应并近似集成许多子网络。
- 使用 inverted Dropout 时,测试阶段直接关闭 Dropout,无需再把权重乘以 $1-p$。
源课件采用旧式描述“训练不缩放、测试乘 $1-p$”,两种约定数学上可对应,但现代框架默认使用 inverted Dropout。
Dropout 与池化作用不同,也不保证加快收敛;它常增加训练噪声、可能需要更久训练,但能改善泛化。
3.8.4 数据增强
AlexNet 使用:
- 从缩放后的图像随机裁取 $224\times224$ 区域。
- 随机水平翻转。
- RGB 主成分方向上的颜色扰动。
若从 $256\times256$ 中枚举 $224\times224$ 裁剪,单轴有 $33$ 个起点,加翻转共有 $33\times33\times2=2178$ 种离散组合;训练通常在线随机采样,不应把源课件的“固定 2048 张”当作严格数量。
3.8.5 GPU 训练
原 AlexNet 使用两块 GTX 580 GPU 并行训练,约需数天。GPU 擅长卷积和矩阵乘法的大规模并行计算,是其可训练性的关键条件之一。
3.8.6 其他历史组件
AlexNet 还使用局部响应归一化(LRN)。该设计在后续网络中大多被 BatchNorm 等方法取代。
3.9 感受野与 VGGNet
3.9.1 感受野
某层一个神经元的感受野,是它在原始输入上能影响到的区域。
若第 $l$ 层核大小为 $k_l$、步长为 $s_l$,记输入上的跳距为 $j_l$、感受野为 $r_l$:
$$ j_l=j_{l-1}s_l, $$
$$ r_l=r_{l-1}+(k_l-1)j_{l-1}. $$
初始 $j_0=r_0=1$。
3.9.2 堆叠 $3\times3$ 卷积
在步长 1、无空洞条件下:
- 两层 $3\times3$ 的感受野是 $5\times5$。
- 三层 $3\times3$ 的感受野是 $7\times7$。
源课件说“两层 $3\times3$ 得到 $7\times7$ 感受野”,这是错误,应为三层。
若输入输出通道均为 $C$:
- 一层 $7\times7$ 卷积参数约为 $49C^2$。
- 三层 $3\times3$ 卷积参数约为 $27C^2$。
三层小核还插入三次非线性,表达能力更强。若比较两层 $3\times3$ 与一层 $5\times5$,参数则是 $18C^2$ 对 $25C^2$。
VGG16/VGG19 通过重复小卷积核和池化构建更深网络,结构规整,但计算量和全连接参数较大。
3.10 GoogLeNet 与 Inception
Inception 模块并行执行不同尺度操作:
- $1\times1$ 卷积。
- $3\times3$ 卷积。
- $5\times5$ 卷积。
- 池化分支。
各分支输出在通道维拼接,使网络同时捕捉不同尺度特征。
改进的 Inception 在大卷积前加入 $1\times1$ 卷积做通道降维:
- 减少 $3\times3$、$5\times5$ 卷积的计算和参数。
- 引入额外非线性。
- 控制模块输出通道规模。
GoogLeNet 使用 Inception 模块构建深网络,并通过全局平均池化等方法减少大型全连接层。
3.11 ResNet 残差网络
3.11.1 退化问题
研究发现,普通 56 层网络可能在训练集和测试集上都比 20 层网络误差更高。这不是单纯过拟合,而是深层网络难以优化的退化问题。
理论上,多出来的层至少可以学习恒等映射,使深网络不差于浅网络;但普通堆叠层很难自动学到精确恒等映射。
3.11.2 残差块
残差块学习:
$$ \boldsymbol{y}
F(\boldsymbol{x})+\boldsymbol{x}. $$
- 跳跃连接让信息和梯度更容易跨层传播。
- 若最优映射接近恒等,令 $F(x)\approx0$ 比直接拟合 $H(x)\approx x$ 更容易。
- 当形状不同,可用 $1\times1$ 投影或下采样匹配维度。
ResNet-152 获得 ILSVRC-2015 冠军,常见报道的 Top-5 错误率约为 $3.57%$。
3.12 CNN 的人脸识别应用
课件以 2014-2015 年 DeepID 系列为例:CNN 从人脸中学习身份表征,再完成验证或识别。
- 课件给出 LFW 上约 $99.15%$ 的识别率,并与人工基准约 $97.52%$ 比较。
- 初代 DeepID、DeepID2/2+ 和不同集成协议的结果并不相同;$99.15%$ 更接近后续 DeepID 系列结果,不能不加区分地归到单篇初代 DeepID 论文。
- ROC 曲线以假阳性率为横轴、真阳性率为纵轴,适合比较不同阈值下的人脸验证性能。
课件还展示了身份证场景的实时识别设想:在嵌入式平台上以每帧约 20-30 ms 处理,并通过特定场景数据继续优化。真实性能取决于模型、硬件、分辨率和评测协议。
3.13 迁移学习
当目标数据不足时,可分阶段迁移:
- 先用大规模通用人脸数据训练特征提取器。
- 再用目标人群数据微调,使特征适应人群分布。
- 最后用身份证照片等目标场景数据继续微调。
迁移方式:
- 固定前部卷积层,只训练新分类头。
- 解冻后部高层,以较小学习率微调。
- 数据差异较大或目标数据较多时,再逐步解冻更多层。
低层边缘与纹理通常更通用,高层身份和场景特征更依赖数据分布。
3.14 易错点
- 深度学习框架中的“卷积”通常实际是互相关,不翻转卷积核。
- 普通卷积(
groups=1)的滤波器覆盖全部输入通道;分组卷积中每个输出通道只连接本组的 $C_{in}/groups$ 个输入通道。滤波器个数决定输出通道数。 - 标准 CNN 在空间位置共享同一偏置,不是每个输出像素一个独立偏置。
- 输出尺寸必须使用带 floor、padding、stride 和 dilation 的完整公式。
- Padding 大小没有“最多一圈”的固定上限。
- 局部连接减少每个输出的输入范围,权重共享减少参数数目;二者是不同性质。
- 课件 LeNet 参数表是简化全连接 C3 版本,不等同于原始 LeNet-5 精确连接表。
- AlexNet 第一层是 96 个 $11\times11$ 卷积核,参数约 6000 万。
- AlexNet Top-5 的 $15.3%$、$17.0%$ 等数字对应不同单模型/集成口径。
- ReLU 不保证恰好一半单元激活;最大池化也不能普遍保证克服过拟合。
- inverted Dropout 在训练时缩放,测试时直接关闭,不再乘 $1-p$。
- 两层 $3\times3$ 的感受野是 $5\times5$,三层才是 $7\times7$。
- ResNet 解决的是深层网络优化退化问题,不只是普通意义上的测试集过拟合。
- DeepID 系列不同版本和评测协议不能混用一个识别率。
相关知识
- 科目导航:复试常考科目导航
- 阅读顺序:上一篇:神经网络与后向传播 · 下一篇:强化学习
- 关联专题:目标检测 · 语义分割
3.15 本节复盘
- CNN 通过局部连接和空间权重共享学习卷积核,比全连接网络更适合图像结构。
- 普通卷积核覆盖全部输入通道;分组卷积只覆盖所属通道组。一个输出滤波器生成一个特征图,多个滤波器形成多个输出通道。
- stride、padding、dilation 和 kernel size 共同决定输出尺寸。
- LeNet 建立卷积、降采样、全连接的基本范式;旧式网络常由卷积主导计算、全连接主导参数。
- AlexNet 通过 ReLU、重叠最大池化、Dropout、数据增强和双 GPU 大幅推进 ImageNet 分类。
- 池化降低空间尺寸,Dropout 随机屏蔽激活,二者原理和目的不能混为一谈。
- VGG 用多层小卷积扩大感受野;三层 $3\times3$ 等效覆盖 $7\times7$,参数更少且非线性更多。
- GoogLeNet 用 Inception 并行多尺度分支和 $1\times1$ 瓶颈;ResNet 用 $F(x)+x$ 跳连缓解深层退化。
- CNN 可用于人脸识别等任务;目标数据不足时,可把预训练网络作为特征提取器并分阶段微调。