← 返回学习笔记

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,是较早的深度学习框架。流程包括:

  1. create_lmdb.sh:把 MNIST 图片转换为 LMDB/LevelDB。
  2. compute_mean.sh:计算训练图像均值,供预处理使用。
  3. lenet_train_test.prototxt:定义网络结构和训练/测试数据层。
  4. lenet_solver.prototxt:定义优化器和训练超参数。
  5. 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 迁移学习

当目标数据不足时,可分阶段迁移:

  1. 先用大规模通用人脸数据训练特征提取器。
  2. 再用目标人群数据微调,使特征适应人群分布。
  3. 最后用身份证照片等目标场景数据继续微调。

迁移方式:

  • 固定前部卷积层,只训练新分类头。
  • 解冻后部高层,以较小学习率微调。
  • 数据差异较大或目标数据较多时,再逐步解冻更多层。

低层边缘与纹理通常更通用,高层身份和场景特征更依赖数据分布。

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 可用于人脸识别等任务;目标数据不足时,可把预训练网络作为特征提取器并分阶段微调。