一、卷积神经网络(CNN)的演进
1. LeNet:卷积神经网络的起点
LeNet-5 是早期成功的卷积神经网络之一,用于手写数字识别。其结构分为两部分:
卷积编码器:两个卷积层,使用5×5卷积核和Sigmoid激活函数。
全连接层:三个全连接层用于分类。
LeNet 奠定了CNN的基本结构:卷积层 + 池化层 + 全连接层。
2. 表示学习与视觉分层理论
CNN 的核心思想是表示学习,即通过网络自动学习特征表示,从底层到高层逐步抽象:
底层特征:边缘、颜色、斑块
中层特征:条纹、纹理、形状
高层特征:眼睛、轮胎、文字等语义特征
3. AlexNet:深度学习的里程碑
AlexNet 在2012年ImageNet竞赛中获胜,标志着深度学习在计算机视觉中的崛起。其主要改进包括:
使用 ReLU激活函数(缓解梯度消失)
引入 Dropout(防止过拟合)
使用 最大池化层数据增强技术提升泛化能力
AlexNet 结构比LeNet更深,包含5个卷积层和3个全连接层。
4. VGG:更深的网络与模块化设计
VGG 通过堆叠多个3×3卷积层 和2×2最大池化层构建更深网络,如VGG-16、VGG-19。其核心思想是:
使用小卷积核堆叠代替大卷积核(减少参数量)
模块化设计(VGG块)便于构建深层网络
二、PyTorch神经网络工具箱基础
1. 核心组件:nn.Module
与 nn.functional
PyTorch 提供两种主要方式构建神经网络:
nn.Module:
继承自 nn.Module
的类(如 nn.Linear
, nn.Conv2d
)
自动管理参数(weight, bias)
可与 nn.Sequential
结合使用
支持训练/测试状态切换(如Dropout)
nn.functional:
函数式接口(如 F.relu
, F.max_pool2d
)
需手动传入参数,不利于复用
适用于无状态操作(如激活函数、池化)
2. 三种构建模型的方式
继承 nn.Module
基类:
最灵活的方式,可自定义前向传播逻辑。
使用 nn.Sequential:
按顺序堆叠层,支持三种写法:
直接传入层列表(无名)
使用 add_module
添加命名层
使用 OrderedDict
指定每层名称
使用模型容器:
nn.ModuleList
:存储子模块,支持迭代
nn.ModuleDict
:通过名字访问子模块
3. 自定义网络模块示例:残差块
残差块有两种形式:
直接相加输入与输出(需形状一致)
通过1×1卷积调整通道数后再相加
这些模块可组合成现代网络如 ResNet
三、总结
从LeNet到VGG,CNN通过更深的结构 、更好的激活函数 、正则化技术 和模块化设计 不断提升性能。而在PyTorch中,我们可以通过 nn.Module
和 nn.Sequential
等工具灵活构建这些网络结构,实现从理论到实践的无缝衔接。