NIN网络学习

NIN(Network in Network)是陈天奇(Min Lin)等人在2014年提出的经典网络结构。

NIN直接参与了2014年的ImageNet大赛,虽然最终冠军是GoogLeNet,但它通过一系列"实验科学"般的探索,为深度学习贡献了两项核心经验------1x1卷积和全局平均池化思想被GoogLeNet和后续的ResNet等网络吸收采纳,成为了现代深度学习的基石技术。

1 它探索出了什么?(实验科学的经验)

NIN的核心贡献在于验证了"网络结构可以更复杂"和"分类器可以更简单"这两个在当时反直觉的结论。

经验一 :局部特征需要更强的非线性变换。

探索过程:传统卷积层(Conv)只是线性滤波+激活函数,NIN认为这不够复杂。它尝试在卷积层内部嵌套一个微型多层感知机(MLP),即"Network in Network"。

结论:这种"微网络"结构(后来演变为1x1卷积)能极大增强模型的非线性表达能力,让网络在局部区域就能学习到更抽象的特征。

经验二 :全连接层不是必须的。

探索过程:当时的主流网络(如AlexNet)依赖巨大的全连接层(FC)进行分类,容易过拟合且参数多。NIN大胆尝试去掉FC层,直接用全局平均池化(GAP)将特征图取平均作为分类依据。

结论:GAP不仅减少了参数、防止过拟合,还让网络对输入图像的平移更鲁棒。这一设计后来被ResNet等几乎所有现代网络沿用。

2 网络结构

如下文章非常好

【深入浅出之NIN网络 】https://blog.csdn.net/a8039974/article/details/143110885

深度学习网络从入门到入土 网络中的网络NiN

https://blog.csdn.net/qq_54636039/article/details/158070225

3 pytorch代码实现

以下代码构建了一个标准的NiN模型,适用于CIFAR-10或Fashion-MNIST等数据集。

c 复制代码
import torch
import torch.nn as nn

def nin_block(in_channels, out_channels, kernel_size, strides, padding):
    """定义NiN块:卷积 + 1x1卷积 + 1x1卷积"""
    return nn.Sequential(
        nn.Conv2d(in_channels, out_channels, kernel_size, strides, padding),
        nn.ReLU(),
        nn.Conv2d(out_channels, out_channels, kernel_size=1),  # 1x1卷积模拟全连接
        nn.ReLU(),
        nn.Conv2d(out_channels, out_channels, kernel_size=1),  # 1x1卷积模拟全连接
        nn.ReLU()
    )

class NiN(nn.Module):
    def __init__(self, num_classes=10):
        super(NiN, self).__init__()
        self.net = nn.Sequential(
            # 第一层:输入3通道,输出96通道,卷积核11x11,步长4(用于大图,如224x224)
            nin_block(3, 96, kernel_size=11, strides=4, padding=0),
            nn.MaxPool2d(3, stride=2),  # 池化降维
            
            # 第二层:输入96通道,输出256通道,卷积核5x5
            nin_block(96, 256, kernel_size=5, strides=1, padding=2),
            nn.MaxPool2d(3, stride=2),
            
            # 第三层:输入256通道,输出384通道,卷积核3x3
            nin_block(256, 384, kernel_size=3, strides=1, padding=1),
            nn.MaxPool2d(3, stride=2),
            nn.Dropout(0.5),  # 防止过拟合
            
            # 第四层:输出通道数直接设为类别数,准备做全局平均池化
            nin_block(384, num_classes, kernel_size=3, strides=1, padding=1),
            nn.AdaptiveAvgPool2d((1, 1)),  # 全局平均池化,输出1x1
            nn.Flatten()  # 展平为向量
        )

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

# 使用示例
model = NiN(num_classes=10)
print(model)

⚙️ 参数说明

输入尺寸:上述代码默认适配ImageNet(224x224)的尺寸。如果用于CIFAR-10(32x32),需要调整第一层的卷积核和步长(如改为 kernel_size=5, strides=1, padding=2 )。

1x1卷积:这是NiN的灵魂,它让网络在早期就能进行跨通道的信息交互,比传统CNN更早地"理解"特征。

3 影响

NIN(Network in Network)虽然参数量大、计算成本高,但它提出的两个核心思想,直接启发了后续几乎所有主流深度学习架构的设计,堪称现代深度学习的"思想启蒙"。

3.1 1x1 卷积:跨通道的信息交互

这是 NIN 最伟大的贡献。它首次将 1x1 卷积作为网络的基本构建块,这直接导致了两个革命性变化:

降维与升维:1x1 卷积可以灵活地增加或减少通道数,极大地提升了网络的灵活性。

跨通道特征融合:它允许网络在早期就进行通道间的信息交互,而不仅仅是空间上的特征提取。

后续影响:

Inception 系列:直接借鉴了 NIN 的 1x1 卷积思想,在 Inception 模块中大量使用 1x1 卷积来降低计算量(Bottleneck 结构)和融合特征。GoogleNet 是 Inception 系列的开山之作,也是该系列中最具代表性的模型之一。

ResNet:在残差块中广泛使用 1x1 卷积来调整通道维度,实现恒等映射。

SENet:使用 1x1 卷积进行通道注意力权重的计算。

3.2 全局平均池化:替代全连接层

NIN 首次提出用 Global Average Pooling (GAP) 替代传统的全连接层(FC Layer)。

优势:GAP 将每个特征图直接映射为一个数值,极大地减少了参数量,有效防止了过拟合,并且对输入图像尺寸不敏感。

后续影响:

ResNet:ResNet 直接采纳了 GAP 作为网络的最后一层,成为现代 CNN 的标准配置。

轻量化网络:在 MobileNet、ShuffleNet 等轻量级网络中,GAP 是减少参数、提升效率的关键手段。

3.3 小结

NIN 虽然"生不逢时"(当时硬件算力不足),但它播下的种子在后续架构中开花结果。可以说,没有 NIN 的 1x1 卷积和全局池化,就没有现代深度学习的轻量化和高效化。

4 实验科学论

其实神经网络结构的探索也是基于一定的零散的不成体系的理论基础进行探索,是个实验科学。找到一个数学理论或者其他领域的理论,感觉可以尝试下,进行实验,看效果,效果好,就赶紧进行深层的理论挖掘。优秀的被后来者继承,成为后续网络的基础组件。

这些都是实验验证。

5 与Googlenet和resnet等网络关系

NIN 的"微网络"思想启发了 GoogLeNet 的 Inception 结构,而 ResNet 则解决了它们"太深难训"的问题。

相关推荐
一水鉴天5 小时前
映射、哈希表与哈斯图:计算机科学的三种基线 20261003(元宝)
开发语言·人工智能
198******126345 小时前
2026 企业 AI 办公产品选型指南:从场景匹配判断工具价值
人工智能
玫瑰互动GEO6 小时前
GEO优化学习九级模型:开发者从认知层切入
人工智能·ai·ai搜索·gem·生成式引擎优化·gem优化
海绵宝宝转agent6 小时前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
小奇不哭6 小时前
ROS2 单节点,RGB-D 深度相机局部路径提取 + B 样条平滑路径 + YOLOv8 障碍物检测 + 深度测距,用于移动机器人视觉局部循迹。
python·yolov8·ros2·cv2·路径探索循迹
每天都要写算法(努力版)6 小时前
【行业前沿报告】DAgger:让智能体在自己走到的状态上学习
人工智能·学习·机器学习
liron716 小时前
智能实体演化系统的统一性概念
人工智能·深度学习·神经网络
小小龙学IT6 小时前
Python scikit-learn 机器学习库深度解析
python·机器学习·scikit-learn
呆萌很6 小时前
常用骨干网络预训练输入尺寸
人工智能
Yolanda_20226 小时前
19.神经网络-最大池化的使用
人工智能·深度学习·神经网络