卷积神经网络(CNN)
问题
CNN 的核心原理是什么?卷积、池化、全连接层分别起什么作用?ResNet 的残差连接如何解决网络退化问题?
答案
卷积神经网络(Convolutional Neural Network, CNN) 是专门处理具有网格结构数据(如图像)的神经网络,通过卷积运算自动提取空间特征。
一、CNN 的核心组件
卷积层(Convolution Layer)
卷积层使用卷积核(Filter/Kernel) 在输入上滑动,计算局部区域的加权和:
| 概念 | 说明 |
|---|---|
| 卷积核大小 | 通常 3×3 或 5×5 |
| 步幅(Stride) | 卷积核每次移动的像素数 |
| 填充(Padding) | 输入边缘补零,保持输出尺寸 |
| 通道(Channels) | 滤波器数量决定输出通道数 |
关键特性:
- 局部连接:每个神经元只关注输入的一小片区域(感受野)
- 权重共享:同一个卷积核在整张图上共享参数 → 大幅减少参数量
- 平移不变性:无论目标出现在图像哪个位置,都能被同一个卷积核检测到
池化层(Pooling Layer)
池化层对特征图进行下采样,减少计算量和参数,同时提供一定的平移不变性。
| 类型 | 操作 | 效果 |
|---|---|---|
| 最大池化(Max Pooling) | 取区域内最大值 | 保留最显著特征 |
| 平均池化(Avg Pooling) | 取区域内平均值 | 保留全局信息 |
| 全局平均池化(GAP) | 整个特征图取平均 | 替代全连接层,减少参数 |
二、经典 CNN 架构演进
| 模型 | 年份 | 层数 | 关键创新 |
|---|---|---|---|
| LeNet-5 | 1998 | 5 | CNN 先驱,手写数字识别 |
| AlexNet | 2012 | 8 | ReLU + GPU 训练,ImageNet 夺冠 |
| VGGNet | 2014 | 16/19 | 全用 3×3 卷积,更深更规整 |
| GoogLeNet | 2014 | 22 | Inception 模块,多尺度特征 |
| ResNet | 2015 | 50/101/152 | 残差连接,突破深度限制 |
| EfficientNet | 2019 | - | 复合缩放(深度×宽度×分辨率) |
三、ResNet 残差连接
当网络层数增加到一定程度(如 56 层),训练误差反而比浅层网络(20 层)更高——这不是过拟合,而是退化问题(Degradation):深层网络难以学习恒等映射。
残差连接的解决方案:
让网络学习残差 ,而不是直接学习目标映射 。如果某层不需要做任何变换,只需让 即可(恒等映射),这比学习 容易得多。
残差连接的深远影响
残差连接不仅解决了 CNN 的退化问题,Transformer 也大量使用残差连接——每个注意力层和 FFN 层都有残差连接。它是现代深度学习中最重要的架构设计之一。
四、CNN 的感受野
感受野(Receptive Field) 是输出特征图上一个点对应的输入区域大小。
| 网络深度 | 3×3 卷积核的感受野 |
|---|---|
| 1 层 | 3×3 |
| 2 层 | 5×5 |
| 3 层 | 7×7 |
| n 层 | (2n+1) × (2n+1) |
为什么 VGGNet 偏好 3×3 卷积?两个 3×3 卷积的感受野等于一个 5×5 卷积,但参数更少( vs )且有更多非线性(两次 ReLU)。
常见面试问题
Q1: 1×1 卷积的作用是什么?
答案:
- 通道降维/升维:改变通道数而不改变空间尺寸(如 256 通道 → 64 通道)
- 跨通道信息融合:将不同通道的特征组合
- 增加非线性:1×1 卷积后接 ReLU 增加网络表达力
- 减少计算量:GoogLeNet 的 Inception 模块用 1×1 卷积减少通道数后再做 3×3/5×5 卷积
Q2: CNN 和 Transformer 在计算机视觉中的对比?
答案:
| CNN | Vision Transformer (ViT) | |
|---|---|---|
| 归纳偏置 | 局部性、平移不变性 | 几乎没有 |
| 全局建模 | 需要很深才能获得大感受野 | 每层都可以全局注意力 |
| 数据需求 | 小数据也能工作 | 需要大量数据(或预训练) |
| 计算复杂度 | (线性于像素数) | (注意力矩阵) |
| 当前趋势 | 仍在边缘部署场景主流 | 大规模预训练模型主流 |
Q3: 特征图尺寸如何计算?
答案:
例如:输入 32×32,卷积核 3×3,stride=1,padding=1 → 输出 32×32(尺寸不变)。