【论文精读】Network In Network(1*1 卷积层代替FC层 global average pooling)

提出了一种新型深度网络结构——网络中的网络(NIN),通过在每个卷积层中加入微网络,增强了对图像局部区域特征的抽象能力。利用多层感知机(MLP)卷积层代替传统的卷积核,结合全局平均池化技术取代全连接层,有效避免过拟合并提高了模型的解释性。

Network In Network

摘要

​ 作者提出了一种新的深度网络结构称为“网络中的网络( N I N NIN NIN)”,目的是为了增强对感受野内图像块的辨别能力。

​ 传统的卷积层使用线性滤波器,其后跟着非线性激活函数,用他们两个的组合来扫描输入。相反,作者用一种更复杂的结构去构微建神经网络,以达到抽象感受野内数据的目的。

​ 作者将这种微网络结构用多层感知机的形式实例化。通过以和 C N N CNN CNN相似的方式在输入上滑动微网络,就可以获得特征图。这些特征图将作为输入被传递至下一层。

​ 深度 N I N NIN NIN能够通过堆叠许多个上述结构来实现,通过微网络来提升局部建模,作者能够利用在分类层的特征图上进行全局平均池化,这更容易解释并且比传统 F C FC FC层更不具有过拟合的倾向。

​ 作者用 N I N NIN NIN C I F A R − 10 CIFAR-10 CIFAR10 C I F A R − 100 CIFAR-100 CIFAR100上展示了达到先进水平的性能,并且在 S V H N SVHN SVHN M N I S T MNIST MNIST上表现良好。

1. 介绍

​ 下文中“概念”通俗理解就是特征的种类

传统卷积网络有什么问题?

C N N CNN CNN中的传统的卷积核对于图像块来说是一个广义线性模型( G L M GLM GLM),作者认为 G L M GLM GLM所提取特征是低层次的,作者认为抽象意味着对于概念相同的变体的特征是不变的。用一种更强劲的非线性函数逼近器来替换 G L M GLM GLM能够提增强局部模型抽象的能力。但是在变量是线性可分时, G L M GLM GLM的抽象能力很好,但是同类数据经常线性不可分,因此能够捕捉这种性质的表征经常是输入的高度线性不可分函数。

​ 在 N I N NIN NIN中, G L M GLM GLM被替换为一种“微网络”结构,可看成是一种广义的非线性函数逼近器,作者选择多层感知机作为微网络的实现,他是一种通用的函数逼近器,能够用过反向传播训练。

​ 由此而来的,称之为 M l p c o n v Mlpconv Mlpconv的结构在 图 1 图1 1中与 C N N CNN CNN进行了对比。

image-20211120100755032

相同点和不同点

​ 他们都将局部感受野映射为特征向量,但 M l p c o n v Mlpconv Mlpconv通过多层感知机( M L P MLP MLP)来完成映射, M L P MLP MLP由多个全连接层和非线性激活函数组成,此 M L P MLP MLP在所有局部感受野之间共享,特征图通过在输入上滑动 M L P MLP MLP来获得, N I N NIN NIN的整体结构时多个 m l p c o n v mlpconv mlpconv层的堆叠。

​ 作者没有采用传统CNN中的FC层进行分类,而是直接用全局平均池化对最后的 m l p c o n v mlpconv mlpconv层取平均值作为类别的置信度,然后将产生的向量直接送入 s o f t m a x softmax softmax层。

平均池化带来的好处?

​ 在传统的CNN中,很难解释来自目标成本层的类别级信息是如何传递回前一个卷积层的,因为完全连接的层在两者之间充当一个黑匣子。相反,全局平均池化是一种更有意义,解释性更强的方式,因为它加强了特征图和种类之间的对应关系,这是通过使用微网络进行更强的局部建模来实现的。

​ 另外, F C FC FC层更倾向于过拟合,并且严重依赖于 d r o p o u t dropout dropout正则,但是全局平均池化本身就是一种结构正则化方法,能够简单的组织过拟合。

2. 卷积神经网络
传统卷积神经网络的问题:

​ 对于线性可分的表征来说,卷积神经网络用来进行特征抽象是足够的。但是能够实现好的抽象的表征往往是输入数据的高度线性不可分函数。传统 C N N CNN CNN中,可以通过使用一整套滤波器来进行补偿,以覆盖潜在概念的所有变体。(通俗来讲就是也能找到属于该种类的线性不可分的样本。)即单个线性滤波器能够学习检测同一个种类的 不同表现形式。但是对于一个概念用太多滤波器会对下一层施加额外的负担,下一层需要考虑上一层中变体的所有组合。

C N N CNN CNN中越高层的滤波器向原始输入中投射的区域越大。通过组合低等级的属性种类来产生高等级的属性种类。因此,作者认为在将低等级特征组合成高等级特征之前,就在每个局部块上做好抽象比较好。

之前的改进工作

​ 在最近的 m a x o u t maxout

<think>嗯,用户想了解GlobalAveragePooling1D的作用和用法。首先,我需要回忆一下Keras中的池化相关知识。GlobalAveragePooling1D属于全局池化的一种,通常在卷积层之后使用。全局池化和普通池化的区别在于,全局池化会覆盖整个空间维度,比如在时序数据中,GlobalAveragePooling1D会对每个通道的所有时间步取平均值,从而将每个通道压缩成一个标量。 根据引用中的资料,比如引用[4]提到,GlobalAveragePooling1D的输入是一个三维张量,形状为(batch_size, steps, features),输出则是(batch_size, features)。这表示它沿着steps维度进行平均,减少了维度。例如,输入是(2,3,4),经过GlobalAveragePooling1D后变为(2,4),其中3个时间步被平均了。 用户可能想知道为什么使用这个而不是全连接。引用[3]指出,GAP可以替代全连接,减少参数数量,防止过拟合。比如在卷积层后直接接GAP,然后输出,这样模型更简洁。此外,GAP有助于保留空间信息,这在某些任务中可能比全连接更有效。 另外,引用[2]提到GAP在特征提取中的作用,特别是在CNN中,全局平均池化常用于分类任务的末端。对于一维数据,比如时间序列或文本,GlobalAveragePooling1D同样适用。使用方法上,用户需要将其添加到模型中的适当位置,通常在卷积层或LSTM之后,输出之前。 可能需要注意输入的形状是否符合要求,以及如何处理mask。引用[4]还提到mask参数的使用,可以排除某些时间步。但一般情况下,用户可能不需要特别处理mask,除非在处理变长序列时使用了掩码。 总结起来,用户的问题需要解释GlobalAveragePooling1D的作用、如何工作、使用场景以及代码示例。需要结合引用中的信息,确保准确性和实用性。可能还需要比较普通池化和全局池化的区别,帮助用户理解其优势。</think>### GlobalAveragePooling1D的含义及作用 GlobalAveragePooling1D是深度学习中用于**时序数据特征压缩**的核心操作。其作用是对输入张量的时间步(steps)维度执行全局平均池化,将每个特征通道的时序信息压缩为单个标量值。例如输入形状为$(batch\_size, steps, features)$的三维张量,输出将变为$(batch\_size, features)$的二维张量[^4]。 #### 核心特点 1. **维度压缩**:消除时间维度,保留通道特征 $$ \text{输出值} = \frac{1}{steps}\sum_{t=1}^{steps} input\_t $$ 2. **参数零新增**:相比全连接不引入可训练参数 3. **抗过拟合**:通过特征抽象降低模型复杂度[^3] ### 使用方法及代码示例 #### 典型应用场景 - 时序分类任务(如文本分类、传感器数据分析) - 替代全连接作为分类器前端 - 轻量化网络设计(如MobileNet等精简架构) #### 代码实现 ```python from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv1D, GlobalAveragePooling1D model = Sequential() model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(100, 1))) # 输入100个时间步 model.add(GlobalAveragePooling1D()) # 输出形状变为(batch_size, 64) model.add(Dense(10, activation='softmax')) ``` #### 输入输出对比 | 输入形状 | 输出形状 | 操作维度 | |-------------------|------------------|----------| | (batch, 100, 64) | (batch, 64) | 时间轴 | ### 与常规池化的区别 普通AveragePooling1D需要指定窗口大小: ```python AveragePooling1D(pool_size=2) # 窗口大小为2的滑动平均 ``` 而GlobalAveragePooling1D自动将整个时间轴作为窗口[^5],相当于: ```python AveragePooling1D(pool_size=steps) # steps为输入时间轴长度 ``` ### 设计优势分析 1. **保持特征空间信息**:相比全连接的"压平"操作,全局平均池化保留了每个特征通道的独立信息[^3] 2. **可视化支持**:通过观察各通道的激活值,可解释模型关注的特征类型 3. **设备兼容性**:输出形状与全连接兼容,可直接对接分类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值