第14章 图像识别与卷积网络
一张 \(224\times224\) 的彩色照片包含 150,528 个数。若把每个像素与下一层 1,000 个单元全部连接,仅第一层就需要约 1.5 亿个权重。
更严重的问题不是参数多,而是这种连接没有利用图像结构。猫的耳朵从左上角移到右下角,仍然是相似局部形状;相邻像素通常比相距很远的像素关系更紧;边缘、纹理和部件可以在不同位置重复出现。
卷积神经网络(convolutional neural network, CNN)把这些先验写进模型:每个单元先观察局部窗口,同一组权重在整张图上重复使用,再通过多层组合扩大观察范围。
反向传播负责训练权重,卷积结构则规定哪些连接存在、哪些位置共享参数。前者解决“怎样改”,后者回答“允许模型怎样看图”。
把图片当成有空间结构的数组
灰度图可以表示为高度 \(H\)、宽度 \(W\) 的矩阵。彩色图还多一个通道维度 \(C\),常见 RGB 图像形状为 \([H,W,3]\)。
把图像展平成长向量会丢掉显式邻接关系。向量第 100 个与第 101 个数可能在图上相邻,也可能正好跨过一行边界。全连接层能通过数据重新学习这些关系,却要为不同位置分别配置权重。
卷积保留二维布局。一个小矩阵在图像上滑动,每到一个位置,就把窗口内像素与对应权重相乘后求和。这个小矩阵叫作卷积核或滤波器(filter)。
例如,一个 \(3\times3\) 核只看九个局部位置:
输入局部窗口 卷积核
x11 x12 x13 k11 k12 k13
x21 x22 x23 × k21 k22 k23 -> 加权求和 -> 一个输出
x31 x32 x33 k31 k32 k33
窗口向右、向下移动,产生一张新的二维数组,叫作特征图(feature map)。
卷积核在每个位置做同一种检测
对单通道输入,一个二维卷积的输出可以简写为:
\[ Y_{i,j}=b+\sum_{u=0}^{K_h-1} \sum_{v=0}^{K_w-1}K_{u,v}X_{i+u,j+v} \]
\(K_h,K_w\) 是核的高度和宽度。严格说,深度学习框架通常实现的是不翻转卷积核的互相关,但习惯上仍称为卷积。
关键不在名字,而在两项结构约束。
第一是局部连接:输出位置只读取附近像素,而不是整张图。第二是权重共享:同一卷积核在所有位置使用同一组参数。
如果一个核学会对某种横向亮暗变化产生高响应,它能在图像各处使用同一检测方式。模型不必分别学习“左上角边缘”“中央边缘”和“右下角边缘”。
核心机制
卷积把“局部图案可能在不同位置重复”写入连接结构。局部连接减少每个输出所看的范围,权重共享让同一检测器遍历整张图。训练仍通过最终损失反向调整核权重,中间特征不是人工逐层指定的。
参数为什么会大幅减少
假设输入是 \(224\times224\times3\),输出有 64 个通道,每个卷积核大小为 \(3\times3\)。每个输出通道需要读取全部 3 个输入通道,因此参数量是:
\[ 3\times3\times3\times64+64=1{,}792 \]
最后的 64 来自每个输出通道一个偏置。这个参数量与图像高度、宽度无关,因为同一核在所有空间位置重复使用。
若只把全部 150,528 个输入连到 64 个全局输出单元,权重就已有约 960 万个,而且空间布局被展平;若还要让每个空间位置各自产生输出,参数会继续随输出位置数增长。卷积不仅减少参数和计算,也施加了明确偏置:相同局部模式在不同位置应使用相同权重。
这种偏置并非对所有任务都正确。图像边缘的物体可能与中央物体有不同意义;医学影像中的绝对位置可能很重要;全景图、球面图和不规则网格也不完全符合普通平面卷积。模型结构必须与数据几何匹配。
多个通道怎样协作
第一层输入有红、绿、蓝三个通道。一个输出卷积核实际形状是 \(K_h\times K_w\times C_{in}\),会同时组合所有输入通道。
若这一层产生 \(C_{out}\) 张特征图,就需要 \(C_{out}\) 组卷积核。完整权重形状可写为:
\[ [K_h,K_w,C_{in},C_{out}] \]
第一层输出通道可能对不同方向、颜色对比或纹理有不同响应。下一层再把这些通道当作输入,组合出更复杂模式。
“通道”不等同于人能直接命名的概念。一些通道容易看出偏好,另一些只在与后续层共同作用时有意义。一个物体概念也可能分布在许多通道和位置中。
步幅和填充改变输出大小
卷积窗口每次移动的距离叫作步幅(stride)。步幅 1 逐位置移动;步幅 2 大约让高、宽各减半。
若不在边缘补值,卷积核无法以边缘像素为中心,输出会缩小。填充(padding)常在四周补零,使输出保持或控制尺寸。
技术深潜:卷积输出形状怎么算
对一维长度 \(H\),核大小 \(K\),两侧填充 \(P\),步幅 \(S\),并假设扩张率为 1,输出长度是:
\[ H_{out}= \left\lfloor\frac{H+2P-K}{S}\right\rfloor+1 \]
二维时对高度和宽度分别计算。例:输入 \(32\times32\),核 \(3\times3\),填充 1,步幅 1,输出仍是 \(32\times32\);若步幅改成 2,输出为 \(16\times16\)。
张量形状常按批次优先记为:
| 阶段 | 形状 |
|---|---|
| 输入 | \([B,C_{in},H,W]\) |
| 卷积核 | \([C_{out},C_{in},K_h,K_w]\) |
| 输出 | \([B,C_{out},H_{out},W_{out}]\) |
不同框架可能采用通道在末尾的布局,但含义相同。形状错误、步幅不能整除和填充位置,是实现 CNN 时最常见的问题之一。
平移等变不等于完全不变
当输入中的图案平移,普通卷积的响应位置也相应平移。这叫平移等变(translation equivariance):输入怎么移动,输出特征图大致跟着移动。
它不是平移不变。若任务是检测物体,响应移动仍保留“物体在哪里”的信息;若最终只关心类别,可以通过池化、下采样或全局平均逐步降低对精确位置的敏感度。
最大池化在小窗口中保留最大值,平均池化保留平均值。它们减少空间尺寸、扩大后续单元的有效观察范围,也能容忍小幅位移。
但池化不会带来任意程度的不变性。步幅、边缘、旋转、缩放和遮挡仍会改变响应。过早或过强下采样还会丢失小物体与精确位置。现代网络有时用带步幅卷积替代池化,让下采样本身也可学习。
感受野怎样逐层扩大
第一层 \(3\times3\) 单元只读取九个像素。第二层的一个单元读取第一层的 \(3\times3\) 区域,而这些单元各自又读取原图局部,所以它在原图上的感受野(receptive field)已经更大。
连续三个步幅 1 的 \(3\times3\) 卷积,理论感受野依次为 \(3\times3\)、\(5\times5\)、\(7\times7\)。小核堆叠可以用较少参数逐步汇总更大范围,并在层间加入非线性。
技术深潜:感受野递推
令第 \(l\) 层相邻输出在原图上相隔的距离为 \(j_l\),感受野大小为 \(r_l\)。初始 \(j_0=1,r_0=1\)。若第 \(l\) 层核大小为 \(k_l\)、步幅为 \(s_l\):
\[ \begin{aligned} j_l&=j_{l-1}s_l \\ r_l&=r_{l-1}+(k_l-1)j_{l-1} \end{aligned} \]
步幅大于 1 会让感受野增长更快,但也降低空间分辨率。扩张卷积则在核元素之间留空,能在不立即下采样的情况下扩大理论感受野。
理论感受野只表示存在计算路径。实际训练后,中心附近像素常对输出影响更大,叫作有效感受野。网络“理论上能看见整张图”不等于它真的均匀使用全部区域。
从边缘到物体,是有用直觉但不是固定剧本
早期卷积层经常学到方向边缘、颜色对比和简单纹理;中间层组合出重复纹理与局部部件;更深层响应与物体类别相关。这种“边缘 -> 纹理 -> 部件 -> 物体”的层次描述很有帮助。
但它不是每个网络、每个通道都严格遵守的人工流水线。训练只要求降低最终损失。数据和目标不同,网络可能学习背景、相机水印、拍摄角度或其他捷径。
特征可视化可以寻找让某通道高响应的输入区域,或把深层响应投影回像素。Zeiler 与 Fergus 利用可视化分析卷积网络内部特征和架构选择。(Zeiler 和 Fergus 2014年) 这些图展示模型对某次输入的敏感位置,却不自动给出完整因果解释。
遮住某块图像再观察预测变化、比较反事实输入、分析不同数据子群,通常比只看一张漂亮热力图更可靠。
卷积思想不是从 AlexNet 才开始
视觉系统的局部感受野和层次处理受到生物视觉研究启发。Kunihiko Fukushima 在 1980 年提出 Neocognitron,使用分层、局部连接和位置容忍结构。(Fukushima 1980年)
1990 年代,LeCun 等人用反向传播训练卷积网络识别手写数字与支票字符。LeNet-5 展示了卷积、下采样和分类层的完整组合。(LeCun 等 1998年)
这些系统已经包含 CNN 的核心思想,但当时数据规模、计算资源、软件工具和任务范围限制了扩展。深度学习后来并非突然发现“图像有局部结构”,而是让旧结构在更大数据与计算条件下得到验证和放大。
ImageNet:先建立足够大的共同考场
算法进步需要可比较的数据与任务。ImageNet 项目组织了大规模、分层类别的图像数据。2009 年的论文描述了超过 1400 万张、两万多个类别的图像集合。(Deng 等 2009年)
ImageNet Large Scale Visual Recognition Challenge 使用其中约一千个类别建立年度竞赛。共同训练集和评测使研究者能比较架构、训练方法与计算投入,也让错误案例更容易被系统分析。
但数据集不是中立窗口。类别体系来自 WordNet 和标注流程;互联网图片具有摄影偏好、背景线索、重复和社会偏差;竞赛准确率只衡量规定分布与标签下的分类。
“在 ImageNet 上更好”是重要证据,不等于模型拥有一般视觉理解。
AlexNet 为什么成为转折点
2012 年,Alex Krizhevsky、Ilya Sutskever 与 Geoffrey Hinton 的深层卷积网络显著降低了 ImageNet 竞赛错误率。(Krizhevsky 等 2012年) 这项结果后来常被简称为“AlexNet 证明深度学习有效”。真正的突破来自多项条件同时成熟:
- 大规模标注数据提供足够丰富的视觉变化;
- GPU 计算让大卷积网络在可接受时间内训练;
- ReLU比饱和激活更利于深层梯度传播;
- 数据增强用裁剪、翻转等变换增加有效样本;
- dropout 与权重衰减降低过拟合;
- 工程实现解决显存、并行和训练稳定性问题。
AlexNet 不是只把网络变深,也不是单一数学公式战胜传统方法。结构、数据、硬件、优化和工程形成了一个可扩展系统。
此后,VGG 展示了统一小卷积核的深层堆叠,Inception 组合多尺度分支,ResNet 用残差连接让更深网络更容易优化。(He 等 2016年) 架构演进持续围绕信息路径、计算成本和梯度流进行权衡。
一张图片怎样走过分类网络
典型图像分类训练包含:
- 读取图片和类别标签;
- 调整尺寸、归一化像素并执行随机数据增强;
- 多个卷积块逐步改变通道数与空间尺寸;
- 高层特征经过全局平均或展平;
- 线性分类头输出各类别 logits;
- softmax 交叉熵把 logits 与标签变成损失;
- 反向传播更新卷积核、归一化参数与分类头;
- 在没有随机增强的验证集上评价。
训练时,卷积核不是先学习边缘再停止。所有层同时根据批次损失被更新。早期层之所以形成较通用局部特征,是结构、数据统计和最终任务共同作用的结果。
数据增强把哪些不变性写进训练
若水平翻转后类别不变,就可以把翻转图与原图使用同一标签;若轻微裁剪、颜色变化不应改变判断,也可随机生成这些版本。
数据增强(data augmentation)通过训练样本变换告诉模型:哪些变化应保留输出。它相当于用数据方式加入任务先验。
增强必须符合语义。数字 6 旋转后可能变成 9;医学影像左右翻转可能改变器官位置;文字镜像通常不是同一句话。错误增强会迫使模型忽略本应保留的信息。
增强也不能覆盖所有真实分布变化。晴天照片的颜色抖动无法完整模拟夜间红外相机,新医院的设备差异也不只是随机噪声。
迁移学习:先学视觉表示,再适配任务
训练大型视觉模型需要大量数据和计算。迁移学习(transfer learning)先在大数据集上训练骨干网络,再把学到的表示用于较小任务。
常见做法有两种:
- 冻结骨干,只训练新的分类头;
- 用较小学习率微调整个网络或后几层。
早期层的边缘与纹理特征常能跨自然图像任务复用,后期特征更依赖原类别。目标数据很少时,冻结更多层能降低过拟合;目标与预训练差异很大时,需要调整更多层。
迁移并不保证正收益。自然照片预训练可能不适合某些显微、遥感或医学数据;源数据偏差也会转移到目标系统。可靠流程仍要与从头训练、不同预训练源和简单基线比较。
视觉模型会看错什么
卷积网络能在规定分布上取得高准确率,却可能依赖人类意外的线索。
研究发现,标准 ImageNet CNN 往往比人更依赖局部纹理,而不是整体形状。(Geirhos 等 2019年) 如果训练中的“牛”经常出现在草地,模型可能把背景当作捷径;水印、边框和拍摄设备也可能成为预测特征。
对输入施加人眼难以察觉的精心扰动,还可能让模型高置信度改变类别,这类输入叫作对抗样本。Szegedy 等人展示了深层网络对小扰动的非直观敏感性。(Szegedy 等 2014年)
其他常见边界包括:
- 遮挡、小物体和极端视角;
- 训练中罕见的颜色、天气与传感器;
- 需要精确计数或空间关系的任务;
- 新类别和分布外输入上的过度自信;
- 类别标签过粗,无法表达场景中的多个对象与关系。
图像分类只输出整图类别。检测、分割、姿态估计和视觉问答需要不同输出结构与标注。一个分类器的成功不能直接外推到全部视觉能力。
卷积网络真正改变了什么
CNN 把人工设计特征的重心转向可训练表示。传统视觉系统常由工程师先写边缘、角点、纹理和形状描述子,再把这些特征交给分类器;卷积网络则让多层特征与分类目标一起优化。
人并没有退出设计。研究者仍决定卷积结构、数据、增强、损失、标签和评价。变化是大量中间特征不再逐项命名,而由任务误差通过反向传播塑造。
P05 将在后续实践部分训练小型 CNN,比较全连接基线与卷积模型,观察特征图、感受野、数据增强和分布变化。完整实践后置,不影响继续阅读。
下一章把表示学习带到语言。像素天然是连续数组,词语却首先是离散符号。“猫”的编号与“狗”的编号没有几何距离。要让网络利用相似性,必须先把词语放进一个由上下文训练出来的向量空间。
本章小结
- 卷积网络利用图像的局部性与重复结构,避免把所有像素和位置完全独立处理。
- 局部连接限制单个输出的观察窗口,权重共享让同一卷积核在整张图上重复使用。
- 多通道卷积同时组合空间窗口和输入通道,产生多张可训练特征图。
- 步幅、填充和池化控制空间尺寸;平移等变不等于对任意位置和变换完全不变。
- 多层卷积扩大感受野并形成层次表示,但特征由数据与目标塑造,不保证对应人类命名概念。
- ImageNet 提供了大规模共同评测;AlexNet 的转折来自数据、GPU、ReLU、正则化与工程共同成熟。
- 数据增强和迁移学习能提高样本效率,却都依赖源任务与目标任务的结构是否匹配。
- 高分类准确率不代表通用视觉理解;纹理捷径、背景相关、对抗扰动和分布变化仍会造成失败。
思考问题
- 为什么卷积层参数量通常不随输入图像的高和宽增加?
- 如果任务必须区分物体在左侧还是右侧,追求完全平移不变会带来什么问题?
- 一个模型主要根据背景而不是物体分类时,训练指标为什么仍可能很高?怎样设计测试发现它?
延伸阅读
- LeCun 等人的综述兼论文系统展示了卷积网络、反向传播与文档识别系统。(LeCun 等 1998年)
- ImageNet 与 AlexNet 论文适合配合阅读:前者解释共同数据基础,后者解释训练系统。(Deng 等 2009年; Krizhevsky 等 2012年)
- Zeiler 与 Fergus 的工作适合继续理解特征可视化能回答什么、不能回答什么。(Zeiler 和 Fergus 2014年)
- He 等人的 ResNet 论文展示了信息与梯度路径怎样支撑更深网络。(He 等 2016年)
