跳转至

卷积神经网络(CNN)

CNN 用局部连接 + 权值共享处理网格数据(图像等):同一套卷积核在空间上滑动,既省参数又能提取局部模式。

卷积在算什么

\[ Y_{i,j} = \sum_{u,v} K_{u,v}\, X_{i+u,\, j+v} + b \]
概念 含义
kernel size 局部窗口,如 3×3
stride 滑动步长
padding 边缘补零,控制输出尺寸
dilation 空洞卷积,扩大感受野

输出尺寸(正方形、无 dilation):

\[ H_{out} = \left\lfloor \frac{H_{in} + 2p - k}{s} \right\rfloor + 1 \]

与 MLP 对比

MLP CNN
连接 全连接 局部
参数 随分辨率爆炸 核共享,与 H×W 基本无关
归纳偏置 弱 局部性、一定平移等变性

结构脉络

LeNet / AlexNet → VGG(堆小核)→ ResNet(残差 \(y=F(x)+x\))→ 现代高效网络。

代码片段

import torch.nn as nn

class TinyCNN(nn.Module):
    def __init__(self, num_classes=10):
        super().__init__()
        self.net = nn.Sequential(
            nn.Conv2d(3, 32, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),
            nn.Conv2d(32, 64, 3, padding=1), nn.ReLU(),
            nn.AdaptiveAvgPool2d(1), nn.Flatten(),
            nn.Linear(64, num_classes),
        )

    def forward(self, x):
        return self.net(x)

任务细节见 图像分类、目标检测。