一、卷积神经网络概述

1.1 传统神经网络的局限
参数爆炸:全连接网络处理32x32图像需百万级参数
空间信息丢失:展平操作破坏图像结构
深度限制:难以构建深层网络

 1.2 CNN核心优势
 局部连接:保留空间信息
 权重共享:大幅减少参数量
 层次化特征提取:从边缘到语义的渐进学习

 1.3 典型应用场景
| 任务类型 | 典型应用 | 网络示例 |
|---------|---------|---------|
| 分类    | ImageNet | ResNet  |
| 检测    | 自动驾驶 | YOLO    |
| 分割    | 医疗影像 | U-Net   |

 二、卷积层核心原理

2.1 卷积操作数学表达

在卷积操作的数学表达中,表达式 (f∗g)(i,j)=∑m∑nf(m,n)g(i−m,j−n)(f∗g)(i,j)=∑m​∑n​f(m,n)g(i−m,j−n) 描述了两个二维函数 ff 和 gg 的卷积。这里的细节如下:

  1. 卷积定义:

    • 卷积 (f∗g)(i,j)(f∗g)(i,j) 是函数 ff 和 gg 在位置 (i,j)(i,j) 的卷积结果。
  2. 求和范围:

    • ∑m∑n∑m​∑n​ 表示对所有的 mm 和 nn 进行求和,这通常意味着我们在某个特定范围内对 ff 和 gg 的值进行加权平均。
  3. 函数 ff 和 gg:

    • f(m,n)f(m,n) 是被卷积的函数,通常是输入图像或信号。
    • g(i−m,j−n)g(i−m,j−n) 是卷积核(或滤波器),在卷积过程中进行反转和滑动。

2.2 多通道卷积计算

# 3通道输入,16个3x3卷积核
conv = nn.Conv2d(3, 16, 3)

2.4 特殊卷积类型
 

# 深度可分离卷积
model = nn.Sequential(
    nn.Conv2d(3, 3, 3, groups=3),  # 深度卷积
    nn.Conv2d(3, 16, 1)            # 逐点卷积
)

 三、池化层与下采样

 3.1 池化操作对比
| 类型   | 优点                | 缺点          | 适用场景       |
|--------|---------------------|---------------|----------------|
| Max    | 保留显著特征        | 丢失细节信息  | 通用           |
| Avg    | 平滑特征响应        | 弱化重要特征  | 网络末端       |
| Global | 全局上下文          | 丢失空间信息  | 分类任务       |

 3.2 池化层实现示例

pool = nn.Sequential(
    nn.MaxPool2d(2, stride=2),  # 尺寸减半
    nn.Dropout(0.25)            # 正则化
)

四、经典网络结构解析

 4.1 LeNet-5 结构演进

class ImprovedLeNet(nn.Module):
    def __init__(self):
        super().__init__()
        self.features = nn.Sequential(
            nn.Conv2d(1, 6, 5),
            nn.ReLU(),
            nn.AvgPool2d(2),
            nn.Conv2d(6, 16, 5),
            nn.ReLU(),
            nn.AvgPool2d(2)
        )
        self.classifier = nn.Sequential(
            nn.Linear(16*5*5, 120),
            nn.Linear(120, 84),
            nn.Linear(84, 10)
        )

4.2 现代网络设计趋势
1. 残差连接(ResNet)
2. 密集连接(DenseNet)
3. 注意力机制(SENet)
4. 轻量化设计(MobileNet)

 五、实战:CIFAR10图像分类

5.1 数据预处理

transform = transforms.Compose([
    transforms.RandomHorizontalFlip(),
    transforms.ToTensor(),
    transforms.Normalize((0.5,0.5,0.5), (0.5,0.5,0.5))
])


5.2 网络训练关键技巧

# 学习率调度
optimizer = optim.Adam(model.parameters(), lr=0.001)
scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=30, gamma=0.1)

# 早停机制
best_acc = 0
for epoch in range(100):
    train()
    acc = validate()
    if acc > best_acc:
        torch.save(model.state_dict(), 'best.pth')
        best_acc = acc
    else:
        early_stop += 1
        if early_stop > 5: break

六、扩展:高级卷积技术

 6.1 转置卷积

 6.2 空洞卷积

dilated_conv = nn.Conv2d(64, 128, 3, dilation=2)
 6.3 注意力卷积

class CBAM(nn.Module):
    def __init__(self, channels):
        super().__init__()
        self.channel_att = ChannelGate(channels)
        self.spatial_att = SpatialGate()

    def forward(self, x):
        x = self.channel_att(x) * x
        x = self.spatial_att(x) * x
        return x
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐