网络中的网络 (NiN)
本文基于d2l项目内容整理,介绍Network In Network (NiN)架构,包括其创新的MlpConv层设计和全局平均池化的应用。
传统CNN架构的局限性:
LeNet、AlexNet 和 VGG 的网络设计模式类似,都是使用卷积层和池化层进行特征提取,然后使用全连接层逐级抽象实现分类,只不过 AlexNet 和 VGG 在 LeNet 的基础上扩大了模型的深度。但该网络设计模式的缺陷在于,全连接层使特征在空间上被展平,放弃了感受野和共享权重对视觉皮层神经元的模拟,没有了感知局部的能力。
1. NiN 网络架构创新
Network In Network 的创新理念:
2013 年出现的网络的网络 (Network In Network, NiN) 提出了一种简单的方案改进了这一缺陷:
1.1 MlpConv 层的设计
MlpConv 层替代传统卷积层
默认的卷积层只做加权求和,即使接入了非线性的激活函数,卷积层本身依然是线性的。NiN 用改进后的 MlpConv 层替代传统卷积层,为局部感受野每个高度和宽度位置(像素位置)对应的通道应用多层感知机(或多个使用了激活函数的 1×1 卷积层),提升特征捕捉能力。
全局平均池化 (GAP) 替代全连接层
在 NiN 的分类阶段,用全局平均池化层 (Global Average Pooling, GAP) 替代全连接层,使各个像素位置的值在通道范围内被均值化为标量,消除深度(通道)信息,保留通道的全局响应。这样,既减少了参数量、降低了过拟合的风险,又提升了模型的可解释性(但引入的非线性仍然增加了计算复杂度)。
2. NiN 块的实现
2.1 NiN 块的构成
NiN 块的结构组成:
NiN 网络中的每个 NiN 块依次由以下层组成:
- 可自定义窗口大小的卷积层 + ReLU 激活函数
- 1×1 卷积层 + ReLU 激活函数
- 1×1 卷积层 + ReLU 激活函数
2.2 PyTorch 实现
NiN 块NiNBlock
的 PyTorch 实现如下:
1 | from torch import Tensor, nn |
3. NiN 网络架构设计
3.1 整体网络设计
NiN 网络的设计特点:
NiN 卷积层窗口形状受 AlexNet 启发,设置为 11×11、5×5 和 3×3 的卷积层,且通道数与 AlexNet 的相同。每个 NiN 块后使用 3×3 步幅为 2 的最大池化层,输出每个类别未经激活的预测得分(可根据需要进行归一化或激活)。
3.2 完整网络实现
复用 NiN 块,NiN 网络的 PyTorch 实现如下(继续使用 Fashion-MNIST 数据集):
1 | from torch import Tensor, nn |
3.3 网络结构分析
使用torchinfo
库的summary
函数执行更便利的输出维度测试:
1 | from torchinfo import summary |
NiN 网络设计原理分析:
使用连续的三次 NiN 块不断减小空间分辨率并加大网络深度
使用最大池化扩大感受野、提高模型的表达力
在特征提取后进行 Dropout 避免过拟合
用 NiN 块将通道数压缩到目标类别数
用全局平均池化 (GAP) 替代全连接层的作用
自适应池化的技术细节:
PyTorch 中的 AdaptiveAvgPool2d
在进行 GAP 时是“自适应”的,可根据输入特征矩阵的大小和输出尺寸自动调整池化窗口和步幅,确保输出始终为指定尺寸。
4. 模型训练与评估
4.1 训练配置与实现
继续使用training_tools.py
中的工具训练评估模型:
1 | import torch |
4.2 训练结果与分析
查看完整训练过程
1 | 第 001/30 轮,训练损失:2.0495,训练精度:28.43 ,测试损失:1.5681,测试精度:51.51 |
训练结果分析:
- 最终性能:NiN 网络在 Fashion-MNIST 上达到 90.59% 的测试精度
- 模型参数:仅有 199.2 万个参数,相比 AlexNet 的 6100 万参数大幅减少
- 训练稳定性:使用 Kaiming 正态分布初始化后,训练过程稳定收敛
- GAP 的作用:全局平均池化有效减少了参数量,降低过拟合风险
若没有显式地初始化,对于示例所用的简单数据集而言,NiN 作为较深的模型而难以训练。于是,使用nn.init.kaiming_normal_()
方法的 Kaiming 正态分布初始化权重。
总结
本文介绍了Network In Network (NiN)的创新架构设计:
- MlpConv层:用 1×1 卷积层构建的多层感知机,提升特征捕捉能力
- 全局平均池化:替代全连接层,减少参数量和过拟合风险
- 简洁架构:通过创新设计实现更高的参数效率
- 技术影响:为后续的 GoogLeNet、ResNet 等网络的 1×1 卷积应用奠定了基础
NiN 网络通过在局部引入更复杂的非线性变换,在保持计算效率的同时提高了网络的表达能力,为深度学习领域提供了重要的设计思路。