VGG 网络详解
基本特点
- 核心思想:通过堆叠多个 3×3 卷积层构建深度网络
- 架构特点 :
- 采用可重复的 "VGG 块" 结构
- 每个 VGG 块:2-4 个 3×3 卷积层 + 1 个 2×2 最大池化层
- 全连接部分:2 个 4096 神经元层 + 1 个 1000 类输出层
VGG 块详解
- 卷积层 :3×3 卷积核,填充 = 1
- 小卷积核的优势:
- 减少参数数量
- 增加非线性变换次数
- 提高模型表达能力
- 小卷积核的优势:
- 池化层 :2×2 最大池化,步幅 = 2
- 作用:尺寸减半,提高计算效率
经典 VGG 架构(VGG-16)
- 输入:224×224×3 彩色图像
- 卷积部分 :
- Block 1:2 个 64 通道卷积 → 池化 → 112×112×64
- Block 2:2 个 128 通道卷积 → 池化 → 56×56×128
- Block 3:3 个 256 通道卷积 → 池化 → 28×28×256
- Block 4:3 个 512 通道卷积 → 池化 → 14×14×512
- Block 5:3 个 512 通道卷积 → 池化 → 7×7×512
- 全连接部分 :
- 7×7×512 → 4096 → 4096 → 1000(Softmax)
VGG-19 与其他变体
- VGG-19:16 个卷积层 + 3 个全连接层
- 配置差异:主要在 Block 3 和 Block 4 中增加卷积层数
- 计算特点 :
- 参数量大 (约 1.38 亿)
- 主要集中在全连接层
VGG 的贡献与局限
- 贡献 :
- 验证了深度是提升性能的关键因素
- 标准化了 CNN 架构模式
- 局限 :
- 参数量巨大,计算成本高
- 全连接层占用大量内存
网络发展脉络
LeNet(1995)
- 2 个卷积层 + 2 个池化层 + 2 个全连接层
- 为 CNN 奠定基础,但规模较小
AlexNet(2012)
- 5 个卷积层 + 3 个全连接层
- 关键创新:ReLU 激活、Dropout、最大池化、数据增强
- 开启现代 CNN 时代
VGG(2014)
- 更深的架构,使用小卷积核堆叠
- 验证了网络深度对性能的重要性
后续发展方向
- ResNet:引入残差连接解决梯度消失问题
- DenseNet:密集连接,增强特征复用
- MobileNet:深度可分离卷积,适合移动端
- EfficientNet:复合缩放策略,效率更高
网络设计原则
卷积核选择
- 小卷积核 (3×3) 优于大卷积核 (5×5、7×7)
- 可通过堆叠小核实现大核的感受野
- 减少参数数量,增加非线性变换
网络深度与宽度
- 深度增加:提高特征抽象能力
- 宽度增加:增加每层级的表达能力
- 需平衡计算成本与性能需求
池化策略
- 最大池化:保留强响应,适合分类任务
- 平均池化:平滑特征,适合需要保留全局信息的任务
- 步幅控制:影响特征图尺寸和计算效率
全连接层设计
VGG 证明大尺寸全连接层 (4096) 能提升性能
但参数量巨大,后续被全局池化等方法替代
1. 层
- 作用:层是神经网络的基本信息处理单元,负责对输入数据进行一次或多次变换。
- 常见类型 :
- 全连接层:每个输入神经元都与输出神经元相连。
- 卷积层:通过卷积核提取空间特征(如图像中的边缘、纹理)。
- 池化层:对特征图进行下采样,保留重要信息并减少参数。
- 归一化层:加速训练、提升稳定性(如 BatchNorm、LayerNorm)。
- Dropout 层:随机 "关闭" 部分神经元,防止过拟合。
- 设计考量:层的选择和顺序决定了网络的学习能力和计算效率。
2. 模型
- 本质:由多个层按特定顺序组成的计算图。
- 结构类型 :
- 序列模型:层按顺序依次执行(如简单分类网络)。
- 分支模型:包含并行路径(如 ResNet 的残差分支)。
- 多输入 / 多输出模型:处理不同类型输入并产生多种输出。
- 设计原则 :
- 深度与宽度的平衡(过深过宽都会增加计算成本)。
- 梯度流动的顺畅性(避免梯度消失或爆炸)。
3. 损失函数
- 作用:衡量预测结果与真实标签之间的差异。
- 常见类型 :
- 分类任务:交叉熵损失(Cross Entropy Loss)。
- 回归任务:均方误差(MSE)、平均绝对误差(MAE)。
- 特殊任务 :
- 对抗损失(GAN)。
- 感知损失(Perceptual Loss,常用于图像风格迁移)。
- 选择要点:损失函数应与任务目标一致,且需考虑梯度特性(如平滑性、梯度大小)。
4. 优化器
- 作用:根据损失函数的梯度信息更新网络参数,使损失最小化。
- 优化策略 :
- 一阶方法:使用梯度(如 SGD、Adam、RMSprop)。
- 二阶方法:使用 Hessian 矩阵(收敛快但计算量大)。
- 超参数影响 :
- 学习率:决定每次参数更新的步长。
- 动量:模拟物理惯性,加速收敛并减少震荡。
- 权重衰减:正则化手段,防止过拟合。
二、构建神经网络的主要工具
1. nn.Module
- 定位:PyTorch 中所有神经网络模块的基类。
- 核心优势 :
- 自动参数管理:自动追踪可训练参数(权重、偏置)。
- 设备迁移方便:一键将模型整体移到 CPU/GPU。
- 状态管理:可方便切换训练 / 评估模式。
- 设计思想:将网络封装为对象,每个模块可独立训练、测试、复用。
2. nn.functional
- 定位:提供纯函数式的神经网络操作接口。
- 特点 :
- 无状态:不保存参数或计算状态。
- 灵活性高:适合快速实验和自定义操作组合。
- 适用场景 :
- 激活函数(ReLU、Sigmoid 等)。
- 池化操作。
- 无需参数的特殊变换。
- 权衡:需要手动管理参数和状态,不利于复杂模型的模块化。
3. 两者对比
- nn.Module:面向对象、模块化、适合构建完整模型。
- nn.functional:函数式、轻量灵活、适合简单运算或临时组合。
- 选择建议 :
- 构建稳定、可复用的模型 → 用 nn.Module。
- 临时计算或实验性操作 → 用 nn.functional。