第3章 卷积神经网络
卷积神经网络(Convolutional Neural Network, CNN)是计算机视觉的基石,也是 2012 年深度学习复兴的引爆点。它从生物视觉皮层的”感受野与层级抽象”中获得灵感,用局部连接、权值共享与下采样三大设计,把图像识别的参数规模压缩了上千倍。今天,无论是手机相册的人脸识别、自动驾驶的障碍物感知,还是多模态大模型理解图像的”眼睛”,背后都是它的身影。本章沿着”思想 → 结构 → 经典结构”的脉络,讲透 CNN 的来龙去脉。
3.1 卷积神经网络思想
卷积神经网络的灵感直接来自生物学。1959 年起,哈佛大学的戴维·胡贝尔(David Hubel)与托尔斯滕·维塞尔(Torsten Wiesel)在麻醉猫的初级视皮层中插入微电极,逐个记录神经元对光刺激的反应。他们发现,绝大多数神经元并不对均匀光照敏感,而只对视野中特定位置的”亮暗边界” - 例如一条特定朝向的亮条或暗条 - 反应强烈;神经元能够响应的那片视野区域,被称为它的感受野(receptive field)。更关键的是,皮层神经元呈现出清晰的层级分工:简单细胞(simple cell)对特定朝向、特定位置的边缘敏感;复杂细胞(complex cell)允许边缘在小范围内平移而依然响应,相当于对”位置”有了容忍度;更外层的超复杂细胞(hypercomplex cell)则响应更长的轮廓、端点与运动方向。胡贝尔与维塞尔据此提出:视觉信息沿着”局部边缘 → 形状轮廓 → 更复杂模式”逐级抽象。这一发现为他们赢得了 1981 年诺贝尔生理学或医学奖。
如果把”神经元只连接感受野内的输入”这一生物事实转译成神经网络的设计约束,就得到 CNN 的三个支柱性设计原则。其一是局部连接(local connectivity):每个神经元只与上一层的一个小邻域相连,而非像全连接层那样与全部输入相连,于是每个神经元天然成为”某个局部区域的检测器”;其二是权值共享(weight sharing):同一组连接权重 - 即同一个卷积核 - 在整幅图像的所有位置反复使用,不同位置共用同一套检测器,参数的规模因此与图像大小基本无关;其三是下采样(subsampling,即池化):通过取局部区域的最大值或平均值,降低特征图的空间分辨率,同时保留主要信息。三者合力带来一个关键性质 - 平移不变性(translation invariance):同一特征无论出现在图像的哪个位置,都能被同一个卷积核检测到,而池化又进一步容忍了特征位置的小幅偏移 - 这正对应生物视觉中”复杂细胞对平移的容忍”。
局部连接与权值共享的价值,在参数数量上体现得最为直观。假设输入是一张 224×224 的彩色图像,展平后共 224×224×3 = 150,528 个像素;若用全连接层直接接 1000 个神经元,仅这一层就需要约 1.5 亿个权重。而改用卷积层 - 即使按 AlexNet 首层那样使用 96 个较大的 11×11×3 卷积核 - 参数量也只有约 3.5 万,两者相差约 4000 倍(表 3-1)。
| 连接方式 | 首层配置(输入 224×224×3) | 参数量(含偏置) | 数量级 |
|---|---|---|---|
| 全连接 | 展平 150,528 个像素 → 1000 个神经元 | 150,528 × 1000 ≈ 1.5×10⁸ | 约 1.5 亿 |
| 卷积 | 96 个 11×11×3 卷积核(AlexNet 首层) | 96 × (11×11×3 + 1) ≈ 3.5×10⁴ | 约 3.5 万 |
| 卷积 | 64 个 3×3×3 卷积核(现代常用) | 64 × (3×3×3 + 1) = 1,792 | 约 1.8 千 |
图 3-1 展示了生物视觉层级与 CNN 层级之间的对应关系:从像素出发,浅层卷积学出边缘与颜色,中层学出局部形状,深层学出语义部件,最终由全连接层给出类别判断 - 每一层都在”看得更大、更抽象”。图 3-2 则直观对比了全连接与局部连接两种模式。需要澄清的是,CNN 并非生物视觉的精确模拟:它只借鉴了”局部感受野 + 层级抽象”两条核心思想,卷积核的具体内容完全由梯度下降从数据中自动学习,而不是像胡贝尔与维塞尔那样用实验手工刻画边缘检测器。
类比:手电筒与拼图
想象在黑暗的房间里用手电筒观察一幅巨画:手电筒的光圈就是”感受野” - 一次只能看清一小块,但不断移动光圈,就能拼出整幅画;而卷积核就像”同一只手电筒”,无论照到哪里,光的性质(权重)都不变。权值共享正是”一支手电筒走遍全图”,而不是每块区域各配一支。
训练后卷积核长什么样
把训练好的 CNN 第一层卷积核可视化,会发现它们几乎总是自动学成了边缘检测器与颜色检测器 - 垂直、水平、斜向边缘,红绿、蓝黄对立通道等,与生物视觉皮层简单细胞的选择惊人地相似。这说明”用数据学出滤波器”与”用实验测出滤波器”殊途同归。
3.2 卷积神经网络结构
卷积运算是整个 CNN 的基本操作,其本质可以概括为八个字:滑动窗口、加权求和。设输入是一幅 \(n_{\mathrm{in}}\)×\(n_{\mathrm{in}}\) 的图像(或上一层输出的特征图),用一个 \(k\)×\(k\) 的卷积核(kernel,一组可学习权重)从左上角开始逐格滑动;每滑到一个位置,就把核的权重与它覆盖的 \(k\)×\(k\) 个像素逐元素相乘、再求和,必要时加上一个偏置 \(b\),得到输出特征图上的一个值:
\[ y(i,j)=b+\sum_{m=0}^{k-1}\sum_{n=0}^{k-1}x(i\,s+m,j\,s+n)w(m,n)\qquad\text{(3-1)} \]
图 3-3 以 5×5 输入与 3×3 卷积核为例演示了一次具体计算。这里的卷积核近似一个”垂直边缘检测器”:左列权重为正、右列为负,凡输入左右明暗差异大的位置,输出绝对值就大。以输出左上角为例:1×1 + 2×0 + 3×(−1) + 0×1 + 1×0 + 2×(−1) + 1×1 + 0×0 + 1×(−1) = −4。
实际使用中,卷积层还有两个关键参数。其一是填充(padding):在输入四周补零,防止边缘信息被”卷掉”并控制输出尺寸 - 不填充时每卷积一次尺寸缩小 \(k\)−1;其二是步长(stride):卷积核每次滑动的步数,步长大于 1 时输出按比例缩小,本身也起到下采样作用。给定输入尺寸 \(n_{\mathrm{in}}\)、核大小 \(k\)、填充 \(p\)、步长 \(s\),输出尺寸为
\[ n_{\mathrm{out}}=\left\lfloor\frac{n_{\mathrm{in}}+2p-k}{s}\right\rfloor+1\qquad\text{(3-2)} \]
当 \(k\)=3、\(p\)=1、\(s\)=1 时输出与输入等大,这是现代网络最常用的配置。一个卷积核滑动整幅输入得到一张特征图(feature map);用 \(C_{\mathrm{out}}\) 个不同的核就得到 \(C_{\mathrm{out}}\) 张特征图,叠在一起构成输出的通道(channel)。若输入本身是多通道(如彩色图像的 R、G、B 三通道),卷积核的深度必须等于输入通道数 - 每个核其实是 \(k\)×\(k\)×\(C_{\mathrm{in}}\) 的小立方体,跨通道相乘求和后输出一个值。可以把通道理解为”特征的抽屉”:浅层通道装边缘与颜色,深层通道装部件与语义。
设计小技巧
特征图尺寸必须是整数,因此设计网络时一般让(\(n_{\mathrm{in}}\) + 2\(p\) − \(k\))能被步长 \(s\) 整除;最常见的配置是 \(k\)=3、\(p\)=1、\(s\)=1,输出尺寸与输入完全一致,可以放心堆叠任意多层。
池化(pooling)层是 CNN 的第二个基本构件,承担”下采样”职责。最常见的最大池化(max pooling)用 \(k\)×\(k\) 窗口以步长 \(s\) 划过特征图,每个窗口只输出其中的最大值;平均池化则输出窗口内平均值。如图 3-4 所示,2×2 窗口、步长 2 时,4×4 特征图变为 2×2,每个输出格是原对应 2×2 块的最大值。池化无参数、计算量极小,却有三重好处:空间尺寸减半,降低后续层计算量与参数量;对窗口内小平移不敏感,强化平移不变性;把”像素级”信息凝聚为”区域级”信息,等价放大感受野。池化的输出尺寸为
\[ n_{\mathrm{out}}=\left\lfloor\frac{n_{\mathrm{in}}-k}{s}\right\rfloor+1\quad(p=0)\qquad\text{(3-3)} \]
把上述构件按固定套路组合,就得到 CNN 的经典整体结构:输入图像 → 若干组”卷积 + ReLU + 池化”构成的卷积块(特征提取器)→ 展平 → 全连接层 → Softmax 分类,如图 3-5 所示。卷积块堆叠中,特征图尺寸逐层减半、通道数逐层加倍,直至展平成长向量交给全连接层。以第一层为例:输入 224×224×3,64 个 3×3 卷积核,参数量为
\[ \text{参数量}=C_{\mathrm{out}}(k^2C_{\mathrm{in}}+1)=64(3\times3\times3+1)=1792\qquad\text{(3-4)} \]
对比表 3-1 中全连接首层的 1.5 亿参数,差距一目了然。还有两个进阶概念:1×1 卷积(核为 1×1)不做空间聚合,只做跨通道线性组合,常用于增减通道数(尤其降维),是 GoogLeNet 的招牌技巧;感受野(receptive field)则随深度扩大 - 每过一层,输出上一个点就”看到”输入更大的区域,递推关系为
\[ RF_l=RF_{l-1}+(k_l-1)S_{l-1}\qquad S_{l-1}=\prod_{j=1}^{l-1}s_j\qquad\text{(3-5)} \]
这正是深层网络能从”局部细节”上升到”全局语义”的根本原因。
3.3 经典结构
卷积神经网络的经典结构经历了从”证明可行”到”深不可测”的二十年演进。最早的成功者是杨立昆(Yann LeCun)等人 1998 年提出的 LeNet-5,它面向银行支票上的手写数字识别,结构是”卷积(6 个 5×5 核)→ 池化 → 卷积(16 个 5×5 核)→ 池化 → 全连接 → 输出”的七层网络,参数量仅约 6 万,在 MNIST 手写数字数据集上把错误率压到约 0.8%。LeNet-5 奠定了”卷积 + 池化交替、最后接全连接分类”的基本范式,但受限于当时的数据与算力,它更像一个精巧的证明。
转折发生在 2012 年。亚历克斯·克里泽夫斯基(Alex Krizhevsky)等人提出的 AlexNet 在 ImageNet ILSVRC 竞赛中以 Top-5 错误率 15.3% 的成绩碾压夺冠 - 此前最优方法的错误率约为 16.4%,而当年第二名高达 26.2%。AlexNet 的成功是若干工程革新的合力:用 ReLU 激活代替 tanh/sigmoid,收敛速度快约六倍且缓解梯度消失;用 Dropout 随机丢弃部分神经元,配合数据增强(水平翻转、随机裁剪、颜色扰动)抑制过拟合;用两块 GPU 并行训练,使 8 层、约 6000 万参数的模型变得可训练。这场胜利让全世界意识到深度学习的巨大潜力,被公认为”深度学习复兴的引爆点”。
2014 年的两条路线继续把”深”推向极致。牛津大学的 VGG 提出只用 3×3 小卷积核堆叠:两个 3×3 卷积叠加的感受野等效于一个 5×5 卷积,而参数量只有后者的 (2 × 3 × 3)/(5 × 5) = 0.72,且中间多一次非线性变换,表达能力更强。VGG-16 共 16 层、约 1.38 亿参数(全连接层占大头),结构规整、易于迁移。同年,谷歌的 GoogLeNet(Inception)则从”宽”入手:Inception 模块在同一层并行使用 1×1、3×3、5×5 三种卷积与 3×3 池化,分别捕捉不同尺度的模式,再用 1×1 卷积把通道压缩回去;22 层的它参数量只有约 500 万,仅为 AlexNet 的约 1/12。
但”越深越好”在 2015 年前后撞上了墙:网络加深到几十层时,训练误差不降反升 - 这不是过拟合,而是深层网络难以优化,这一现象被称为退化(degradation)问题。微软亚洲研究院的何恺明等人提出残差网络 ResNet,给出一个极简而优雅的解法:在每两层卷积旁边加一条”捷径”,让输入 \(x\) 直接跳到输出端相加,即让网络去学习残差 \(F\)(\(x\)) = \(H\)(\(x\)) − \(x\),而不是完整映射 \(H\)(\(x\))。残差块的数学形式为
\[ H(x)=F(x)+x\qquad\text{(3-6)} \]
如图 3-6 所示:若恒等映射已经是最优,网络只需把残差学成 0,比从头学一个恒等映射容易得多;更重要的是,捷径让梯度可以几乎无损地直通浅层,从根本上缓解了深层网络的梯度传播问题。凭借残差连接,ResNet 把深度推到 152 层,ImageNet Top-5 错误率降到 3.57%(集成),首次全面超越人类水平(约 5%)。
为什么残差有效
可以把深层网络想象成一个复杂的维修任务:让新手”一步到位”地完成整个任务很难(学习完整映射 \(H\)(\(x\))),但如果告诉他”只需在现成结果上做一点修正”(学习残差 \(F\)(\(x\))),难度就大大降低。恒等映射本身已经”够好”时,把残差学成 0 远比从头学一个恒等映射容易。
下表汇总了五座里程碑的关键数据。此后,CNN 的思想从”图像分类”扩散到几乎一切视觉任务:目标检测上,R-CNN 系列用”区域提议 + CNN 分类”把检测转化为分类问题,YOLO 则把检测变成单次回归、直接输出边界框与类别,实现实时检测;语义分割上,FCN 把全连接层换成卷积实现逐像素分类,U-Net 用编码-解码结构配合跳跃连接,在医学影像等小数据场景大放异彩;生成模型上,GAN 的判别器与扩散模型的 U-Net 去噪器都是 CNN 架构;多模态上,CLIP 用图像与文本两个编码器把两类信息映射到同一向量空间,而 2020 年的 ViT 则证明纯 Transformer(自注意力)也能做视觉,但仍继承 CNN”分块 + 逐层抽象”的思路,两者如今常混合共存。
| 网络 年 | 份 | 深度 | 参数量 | ImageNet Top-5 错误率 | 关键创新 |
|---|---|---|---|---|---|
| LeNet-5 1 | 998 | 7 层 | 约 6 万 | MNIST 上约 0.8% | 首个成功的 CNN,手写数字识别 |
| AlexNet 2 | 012 | 8 层 | 约 6000 万 | 15.3%(第二名 26.2%) | ReLU、Dropout、数据增强、GPU 并行 |
| VGG-16 2 | 014 | 16 层 | 约 1.38 亿 | 7.3% | 3×3 小卷积核堆叠加深 |
| GoogLeNet 2 | 014 | 22 层 | 约 500 万 | 6.7% | Inception 多尺度并行、1×1 卷积降维 |
| ResNet-152 2 | 015 | 152 层 | 约 6000 万 | 3.57%(集成) | 残差连接,破解深度退化 |
本章要点
- 三个设计原则:局部连接、权值共享、下采样(池化),共同带来平移不变性与参数量的巨幅下降。
- 两种基本运算:卷积(滑动窗口加权求和,参数为卷积核)与池化(窗口内取最大值或平均值,无参数)。
- 一套标准结构:卷积 + ReLU + 池化重复堆叠做特征提取,展平后接全连接与 Softmax 分类。
- 五座里程碑:LeNet-5 证明可行、AlexNet 引爆复兴、VGG 小核堆叠、GoogLeNet 多尺度并行、ResNet 残差破解深度退化。
- 思想外溢:检测、分割、生成、多模态 - 今天的视觉 AI 几乎都是 CNN 思想的直系后代。
延伸阅读 · 与现代 AI 的联系
- ViT 与混合架构:2020 年提出的 Vision Transformer 把图像切成 16×16 的小块做线性嵌入 - 这一步本质上就是一次”分块卷积” - 再用自注意力建模全局关系;今天的多模态大模型(GPT-4o、Gemini、Qwen-VL、DeepSeek-VL 等)视觉编码器多为 ViT 变体,而 ConvNeXt、EfficientNet、Swin 等 CNN/混合骨干仍是高效推理与端侧部署的主力(详见第 5 章)。
- 扩散模型的 U-Net:Stable Diffusion、Sora 等文生图、文生视频模型的噪声预测网络,正是 CNN 的 U-Net 编码-解码结构 - CNN 至今仍是生成模型的中流砥柱。
- 目标检测的 YOLO 家族:从 R-CNN 的”区域提议 + 分类”到 YOLO 的”单次回归”,再到 DETR 用 Transformer 做检测头,检测任务的骨干网络始终是 CNN。
- 多模态对齐的 CLIP:CLIP/SigLIP 用图像与文本编码器做对比学习,把二者映射到同一向量空间,是大模型视觉理解的重要基础。
- 轻量化 CNN:MobileNet 的深度可分离卷积与 EfficientNet 的复合缩放,让 CNN 继续服务手机、车载等边缘设备。





