目录
- 模型结构详解
- 数学原理与推导
- 代表性变体及改进
- 应用场景与优缺点
- PyTorch代码示例
1. 模型结构详解
1.1 核心组件
卷积神经网络(CNN)由以下核心层构成:
输入图像 → 卷积层 → 激活层 → 池化层 → 全连接层 → 输出
1.1.1 卷积层(Convolution Layer)
- 功能:通过卷积核提取局部特征
- 参数:
- 卷积核尺寸(如3×3)
- 步长(Stride)
- 填充(Padding)
示例结构图
1.1.2 池化层(Pooling Layer)
- 类型:
- 最大池化(Max Pooling)
- 平均池化(Average Pooling)
- 作用:降维并保留显著特征
1.1.3 激活函数
- ReLU(最常用):
- Sigmoid/Tanh:用于特定场景(如LSTM门控)
1.1.4 输入输出
- 输入:三维张量 [高度×宽度×通道数](如224×224×3的RGB图像)
- 输出:分类概率(Softmax)或回归值
2. 数学原理与推导
2.1 卷积运算
对于输入矩阵 X 和卷积核 K,输出特征图 Y 的计算:
其中:
- kh,kw:卷积核高度和宽度
- b:偏置项
2.2 反向传播
损失函数对卷积核参数的梯度计算:
2.3 参数数量计算
输入通道 Cin,输出通道 Cout,卷积核尺寸 k×k:
总参数 = Cout×(Cin×k×k+1)
3. 代表性变体及改进
3.1 LeNet-5(1998)
- 贡献:首个成功应用的CNN,用于手写数字识别
- 结构:
3.2 AlexNet(2012)
- 创新点:
- ReLU激活函数
- Dropout正则化
- 多GPU训练
- ImageNet Top-5错误率:15.3%
- 网络结构
3.3 VGGNet(2014)
- 设计原则:
- 堆叠3×3小卷积核替代大卷积核
- 16~19层深度
- 参数量:1.38亿(VGG16)
- 网络结构
3.4 ResNet(2015)
- 残差块:
- 意义:解决梯度消失问题,支持训练1000+层网络
- 网络结构
3.5 Inception系列
- 多尺度卷积:并行1×1、3×3、5×5卷积核
- 参数量优化:1×1卷积降维
- 网络结构
4. 应用场景与优缺点
4.1 应用场景
- 图像分类(如ImageNet)
- 目标检测(YOLO、Faster R-CNN)
- 语义分割(U-Net)
- 医学影像分析(肿瘤检测)
4.2 优缺点
优点 | 缺点 |
---|---|
局部感知降低参数量 | 对旋转/尺度变化敏感 |
平移不变性 | 需要大量标注数据 |
自动特征提取 | 全连接层参数量大 |
5. PyTorch代码示例
import torch
import torch.nn as nn
class SimpleCNN(nn.Module):
def __init__(self):
super().__init__()
self.conv_layers = nn.Sequential(
nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1), # 输入3通道,输出16通道
nn.ReLU(),
nn.MaxPool2d(2, 2), # 14x14
nn.Conv2d(16, 32, kernel_size=3, padding=1),
nn.ReLU(),
nn.MaxPool2d(2, 2) # 7x7
)
self.fc_layers = nn.Sequential(
nn.Linear(32 * 7 * 7, 128),
nn.ReLU(),
nn.Linear(128, 10)
)
def forward(self, x):
x = self.conv_layers(x)
x = x.view(x.size(0), -1) # 展平
x = self.fc_layers(x)
return x
# 训练伪代码
model = SimpleCNN()
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
for images, labels in dataloader:
outputs = model(images)
loss = criterion(outputs, labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()
核心总结
- 结构特性:卷积层提取空间特征,池化层增强鲁棒性
- 数学本质:局部连接 + 权值共享
- 工程价值:计算机视觉任务的基础架构