第4章:卷积神经网络(CNN)
CNN的架构设计
1. 核心组件概述
卷积神经网络(CNN)的架构设计围绕以下核心组件展开:
- 卷积层(Convolutional Layers):通过局部感受野和权值共享提取空间特征
- 池化层(Pooling Layers):降低特征图维度(常用最大池化)
- 全连接层(Fully Connected Layers):用于最终分类/回归任务
2. 典型架构模式
2.1 堆叠式结构
[Input] → [Conv+ReLU]×N → [Pooling] → [FC Layers] → [Output]
- 经典案例:LeNet-5的交替堆叠模式
- 现代变体:使用多个连续卷积层后再池化(如VGG)
2.2 残差结构(ResNet)
# 残差块示例
x → Conv1 → ReLU → Conv2 → + → ReLU → Output
↑_________________________↓
- 解决深层网络梯度消失问题
- 通过跳跃连接(Skip Connection)实现恒等映射
3. 设计原则
感受野控制:
- 小卷积核(3×3)的堆叠 vs 大卷积核(7×7)
- 空洞卷积(Dilated Convolution)扩大感受野
特征图尺寸变化:
- 卷积步长(Stride)控制下采样速率
- 填充(Padding)策略(Same/Valid)
通道维度设计:
- 经典模式:每层通道数逐步增加(16→32→64...)
- 分组卷积(Group Convolution)降低计算量
4. 现代架构技巧
| 技术 | 作用 | 典型应用 |
|---|---|---|
| 瓶颈结构(Bottleneck) | 减少参数量 | ResNet |
| 深度可分离卷积 | 降低计算成本 | MobileNet |
| 注意力机制 | 增强重要特征 | SENet |
5. 代码示例(PyTorch)
class CNNBlock(nn.Module):
def __init__(self, in_ch, out_ch, kernel=3):
super().__init__()
self.conv = nn.Sequential(
nn.Conv2d(in_ch, out_ch, kernel, padding='same'),
nn.BatchNorm2d(out_ch),
nn.ReLU(),
nn.MaxPool2d(2)
)
def forward(self, x):
return self.conv(x)
6. 架构评估指标
- 计算效率:FLOPs(浮点运算次数)
- 内存占用:参数量(Parameters)
- 实际速度:在目标硬件上的推理时延
设计建议:根据应用场景平衡模型深度与宽度,视觉任务通常需要3-5个下采样阶段,配合逐步增加的特征通道数。
