卷积神经网络一:CNN 核心 ------ 卷积、池化与特征提取
23.1 本章导学
全连接神经网络处理结构化表格数据表现优秀,但面对图像、语音这类高维空间数据时,会遇到难以逾越的瓶颈。一张 256×256 的彩色图片,输入维度接近 20 万,全连接层参数会爆炸式增长,不仅训练困难,还会严重过拟合;更关键的是,全连接网络将像素展平为一维向量,彻底丢失了空间结构信息,而图像的核心信息恰恰蕴含在像素的空间排列中。
卷积神经网络(CNN)正是为解决空间数据处理而生。它借鉴了生物视觉系统的感受野机制,通过卷积核局部滑动提取特征,依靠权值共享大幅降低参数量,通过池化逐步扩大感受野,分层提取从低级到高级的特征。CNN 的出现彻底改变了计算机视觉领域,也为后续多模态大模型的视觉编码器奠定了技术基础。
本章是 CNN 的入门篇章,聚焦核心原理与基础结构。首先分析全连接网络处理图像的固有缺陷,引出卷积运算的核心思想;深入拆解卷积的计算过程、关键参数、多通道运算逻辑,掌握输出尺寸与参数量的计算方法;然后讲解池化层的作用与分类;接着梳理 CNN 层次化特征提取的内在逻辑,理解感受野的概念与意义;最后结合 PyTorch 实现基础的卷积网络,打通原理到代码的链路。所有知识点均配套直观的物理意义解读,避免纯公式堆砌,让你不仅知道怎么算,更知道为什么这么设计。
23.2 全连接网络处理图像的困境
图像数据有两个核心属性:空间结构信息和局部关联性。一张图片中,相邻像素共同构成边缘、纹理、图案,远距离像素之间的关联性很弱。全连接网络处理图像时,会先将二维像素展平为一维向量,再做全连接运算,这会带来两个致命问题。
第一个问题是参数量爆炸。以 224×224 的 RGB 图像为例,输入维度是 224×224×3=150528。如果第一个隐藏层有 1024 个神经元,单这一层的权重参数就有 1.5 亿个。网络稍微加深,参数量就会急剧膨胀,不仅显存装不下,训练也极易过拟合。少量参数无法提取有效特征,大量参数又无法训练,全连接陷入了两难。
第二个问题是丢失空间结构信息。展平操作破坏了像素的二维空间关系,模型无法利用像素之间的空间相邻性。同一个物体稍微移动一点位置,全连接网络的输入就会完全不同,模型需要重新学习,泛化能力极差。它无法理解 "不管出现在画面哪个位置的猫都是猫" 这种平移不变性。
卷积神经网络正是针对这两个问题设计的:权值共享解决参数量过大的问题,局部感受野保留并利用空间结构信息,池化带来平移不变性。这三大核心设计,让 CNN 能够高效处理高维空间数据。
23.3 卷积运算的核心原理
23.3.1 局部感受野与权值共享
CNN 有两个核心设计思想,彻底区别于全连接网络。 第一个是局部感受野。每个神经元不再和上一层所有像素相连,只和一个小范围的局部区域相连,这个局部区域就是感受野。神经元只关注局部的空间信息,比如边缘、角落,不需要看完整张图。这符合生物视觉的工作机制,也贴合图像的局部关联性特征。 第二个是权值共享。同一个特征提取的卷积核,在整张图上滑动,所有位置共用同一套权重。也就是说,提取同一种特征的卷积核,在图片的所有位置参数都一样。 权值共享带来了两个巨大优势:一是参数量骤降,一个 3×3 的卷积核,无论图片多大,都只有 9 个参数加上偏置,和输入尺寸无关;二是带来了平移不变性,同一个特征不管出现在图片哪个位置,都能被同一个卷积核检测到。
23.3.2 单通道卷积的计算过程
我们以单通道灰度图为例,直观理解卷积的计算过程。 卷积核是一个小的二维权重矩阵,比如 3×3 大小。卷积核在输入特征图上按步长滑动,每滑动到一个位置,就和对应位置的输入像素逐元素相乘,再把所有乘积相加,加上偏置,得到输出特征图对应位置的一个像素值。 整个滑动过程完成后,就得到了输出特征图。输出特征图上的每个值,都对应输入上一个局部区域的加权和,代表这个区域是否存在卷积核对应的特征。 不同的卷积核可以提取不同的特征。比如有的卷积核提取水平边缘,有的提取垂直边缘,有的提取角点。浅层卷积提取低级的边缘纹理,深层卷积组合低级特征得到高级的语义特征。
23.3.3 多通道卷积的扩展
真实的图像通常是多通道的,比如 RGB 图有三个通道。多通道卷积的规则也很清晰:卷积核的通道数必须和输入特征图的通道数一致;每个通道各自做卷积运算,最后所有通道的结果对应位置相加,得到单通道的输出。 如果想要输出多通道的特征图,就用多个卷积核,每个卷积核输出一个通道,所有卷积核的输出堆叠起来,就是最终的多通道输出特征图。输出特征图的通道数,等于卷积核的数量。 总结一下:输入通道数决定卷积核的通道数,卷积核数量决定输出通道数。这是卷积最核心的维度对应规则,也是计算参数量的基础。
23.3.4 输出尺寸计算
卷积之后特征图的尺寸会发生变化,输出尺寸由四个因素决定:输入尺寸、卷积核大小、步长、填充。 步长 stride 是卷积核每次滑动的像素数。步长为 1 就是逐像素滑动,步长为 2 就是每次跳两个像素,输出尺寸会减半。 填充 padding 是在输入特征图的边缘填充像素,通常填 0。填充的作用主要有两个:一是让输出尺寸和输入尺寸保持一致,避免卷积后特征图越来越小;二是保护边缘信息,否则边缘像素只被计算一次,中心像素被多次计算,边缘信息会被弱化。 输出尺寸的计算公式为: 输出尺寸 = (输入尺寸 - 核大小 + 2× 填充) / 步长 + 1 结果必须是整数,否则说明参数设置不合理,无法整除。 最常用的配置是 3×3 卷积、步长 1、填充 1,这种配置下输出尺寸和输入尺寸完全相同,只改变通道数,是 CNN 中最经典的卷积配置。
23.4 卷积层的关键参数与变体
23.4.1 卷积核大小的选择
卷积核大小直接决定了单次提取的局部范围大小。常用的卷积核有 1×1、3×3、5×5、7×7 等。 大卷积核感受野大,但参数量和计算量也大。小卷积核参数量小,堆叠多个小卷积核可以达到和大卷积核一样的感受野,参数量反而更少,非线性也更多。因此现代 CNN 几乎都用 3×3 的小卷积核,通过堆叠多层来获得大感受野,这也是网络不断加深的原因之一。 1×1 卷积是非常特殊的卷积,它不改变空间尺寸,只做通道维度的变换,可以用来升维降维、增加非线性、跨通道信息融合。它的参数量极小,作用却非常大,是很多经典网络的核心组件。
23.4.2 膨胀卷积
膨胀卷积也叫空洞卷积,它在卷积核元素之间插入空隙,在不增加参数量的前提下,扩大感受野。膨胀率越大,空隙越大,感受野越大。 普通卷积是密集采样,膨胀卷积是间隔采样。它的优势很明显:不需要池化降采样,就能扩大感受野,保留空间分辨率。这在图像分割、目标检测等需要精细空间信息的任务中非常有用。大模型中的扩张注意力、空洞卷积结构,都是借鉴了这个思想。
23.4.3 分组卷积与深度可分离卷积
普通卷积所有通道一起计算,分组卷积把输入通道分成若干组,每组内部独立做卷积,最后拼接结果。分组卷积可以减少参数量和计算量,提升效率。 深度可分离卷积是分组卷积的极端情况,每个通道单独一组,先做深度卷积,再用 1×1 卷积融合通道。它的参数量和计算量远小于普通卷积,效率极高,常用于移动端轻量化网络。 轻量化 CNN、端侧 AI 模型,大量使用深度可分离卷积来压缩模型体积、提升推理速度。
23.4.4 参数量与计算量分析
卷积层的参数量计算公式很简单:参数量 = 输入通道数 × 输出通道数 × 核高 × 核宽 + 输出通道数(偏置)。 和全连接层对比就能看出优势:一个输入 256 通道、输出 256 通道的 3×3 卷积,参数量不到 60 万。同样维度的全连接层,参数量会是天文数字。这就是 CNN 能够处理高维图像数据的核心原因。 计算量和参数量正相关,同时和输出特征图的空间尺寸成正比。特征图越大,计算量越高。因此 CNN 通常会逐步降采样,缩小空间尺寸,同时增加通道数,平衡计算量和特征维度。
23.5 池化层:降采样与特征聚合
23.5.1 池化的核心作用
池化也叫下采样,它的作用是缩小特征图的空间尺寸,减少计算量,同时扩大后续层的感受野。池化没有可训练参数,只是做固定的数值变换。 池化带来的另一个重要特性是平移不变性。小范围的平移,经过池化之后输出结果不变,模型对物体的位置轻微移动不敏感,泛化能力更强。 常用的池化有两种:最大池化和平均池化。
23.5.2 最大池化
最大池化取池化窗口内的最大值作为输出。它保留了窗口内最强的特征响应,过滤掉弱响应,适合提取显著的纹理、边缘特征。 最大池化是最常用的池化方式,绝大多数 CNN 都用最大池化做降采样。它的直觉很明确:这个区域有没有该特征,取最强的那个响应即可。
23.5.3 平均池化
平均池化取池化窗口内所有值的平均值作为输出。它更温和,保留了整体的背景信息,对整体特征的聚合更好。 全局平均池化是平均池化的特殊形式,把整个特征图池化成一个值,每个通道输出一个数。它可以替代全连接层做分类,大幅减少参数量,避免过拟合,是现代 CNN 的标准收尾结构。
23.5.4 池化的尺寸变化
池化也有窗口大小和步长两个参数。最常用的是 2×2 窗口、步长 2,这种配置下特征图的宽高都减半,通道数不变,整体数据量变为原来的四分之一。 每次池化后,空间维度减半,感受野翻倍。后续的卷积层能够看到更大的区域,提取更高级的特征。卷积加池化的组合,是 CNN 特征提取的经典单元,不断重复这个单元,就形成了层次化的特征提取结构。
23.6 CNN 的层次化特征提取机制
23.6.1 从底层特征到高层语义
卷积神经网络的强大之处,在于它能够自动分层提取特征,不需要人工设计特征。 浅层的卷积层感受野小,提取低级的视觉特征,比如边缘、线条、角点、颜色变化。这些特征是通用的,所有图像都包含这类基础元素。 中层的卷积层感受野中等,把低级特征组合起来,形成纹理、图案、部件,比如纹理、圆形、眼睛、轮子。 深层的卷积核感受野很大,能够组合中层特征,形成高级语义概念,比如人脸、汽车、树木。 这种从低级到高级的层次化特征提取,和人类视觉系统的信息处理路径高度相似。越深层的特征,语义性越强,区分度越高。
23.6.2 平移、缩放不变性的来源
CNN 对平移、缩放、旋转的鲁棒性,来自于卷积和池化的共同作用。 权值共享带来了平移不变性,同一个特征不管移动到哪里,都能被同一个卷积核检测到。 池化带来了轻微的缩放和位移不变性,小范围的缩放和移动,池化后的最大值位置不变。 不过 CNN 的不变性是有限的,大幅度的姿态变化依然难以应对。更强的不变性需要靠数据增强来训练获得。
23.6.3 感受野的意义与计算
感受野是 CNN 非常重要的概念,指输出特征图上的一个像素,对应输入图像上多大的区域。 感受野越大,看到的输入范围越广,越能提取大尺度的语义特征;感受野越小,越关注局部细节。 浅层网络感受野小,适合提取细节;深层网络感受野大,适合提取全局语义。 堆叠卷积和池化都能扩大感受野。每经过一层 3×3 卷积,感受野增加 2;每经过一次 2×2 池化,感受野翻倍。 设计网络时,感受野是重要的考量指标。检测大物体需要大感受野,检测小物体则需要小感受野和高分辨率。
23.7 PyTorch 中的卷积与池化实现
PyTorch 的torch.nn模块封装了标准的卷积层和池化层,调用非常简洁。 二维卷积nn.Conv2d是最常用的卷积层,核心参数包括输入通道数、输出通道数、卷积核大小、步长、填充。实例化后直接传入四维张量(批次, 通道, 高度, 宽度),就能得到输出特征图。 二维最大池化nn.MaxPool2d,传入核大小和步长即可实现降采样。 搭建一个简单的 CNN 分类网络,结构非常清晰:卷积 + 激活 + 池化的单元重复几次,逐步缩小空间尺寸、增加通道数;最后通过全局平均池化或者展平,接全连接层输出分类结果。 代码结构和全连接网络高度一致,只是把线性层换成了卷积池化单元。数据格式从二维特征变成了四维图像张量,其他的训练流程、损失函数、优化器完全通用。这就是 PyTorch 框架的优势,不同类型的网络都遵循统一的训练范式。
23.8 CNN 与大模型的技术关联
卷积神经网络统治计算机视觉近二十年,很多核心思想都延续到了今天的多模态大模型中。 第一,层次化特征提取思想。Transformer 的分层结构、多尺度特征融合,和 CNN 的层次化思路一脉相承,都是从低级特征逐步抽象到高级语义。 第二,局部性归纳偏置。CNN 的局部感受野是非常强的归纳偏置,让小数据量下也能训练出好效果。Transformer 的局部注意力、滑动窗口注意力,本质都是引入局部性归纳偏置,提升效率和效果。 第三,多通道特征融合。CNN 的多通道特征和 1×1 卷积跨通道融合,和 Transformer 的多头注意力、特征融合逻辑高度相似。 第四,视觉编码器基础。多模态大模型的视觉编码器,很多依然基于 CNN 结构,比如 CLIP 的视觉编码器就是改良的 ResNet。即使是 ViT 视觉 Transformer,也大量借鉴了 CNN 的设计经验。 从这个角度看,CNN 不是过时的技术,而是计算机视觉的基础,也是理解多模态大模型视觉部分的必经之路。
23.9 本章小结
本章系统讲解了卷积神经网络的核心原理与基础结构,从设计思想到运算细节,从参数特性到工程实现,覆盖了 CNN 的核心知识点。核心内容回顾:
- 全连接网络处理图像存在参数量爆炸、丢失空间信息的固有缺陷,CNN 通过局部感受野和权值共享完美解决了这两个问题;
- 卷积运算通过卷积核滑动提取局部特征,多通道卷积由卷积核数量决定输出通道数,输出尺寸由核大小、步长、填充共同决定;
- 1×1 卷积、膨胀卷积、分组卷积是卷积的重要变体,分别承担通道变换、扩大感受野、轻量化的作用;
- 池化层实现降采样,扩大感受野,带来平移不变性,最大池化和平均池化各有适用场景;
- CNN 具备层次化特征提取能力,从浅层边缘到深层语义,自动学习不同层级的特征;
- 感受野是 CNN 的核心概念,堆叠卷积和池化可以逐步扩大感受野,适配不同尺度的特征提取需求;
- CNN 的核心思想深刻影响了后续的视觉 Transformer 与多模态大模型,是计算机视觉的技术基础。