1. 概述
在传统的CNN网络中,使用卷积(Convolution)操作来提取感受野中的特征,卷积操作是由一个线性变换与非线性激活函数组成,为了能增强CNN网络的局部辨识能力,2014年Network In Network[1]的结构被提出,其使用多层感知机的网络结构替换感受野上的线形变换和非线性激活函数,以此来增强模型的局部建模能力。
2. 算法的基本思想
2.1. NIN的卷积层
在传统的CNN网络中,卷积层的操作包括卷积操作,非线性变换(如使用ReLU激活函数),具体过程如下图所示:
卷积层的操作是在feature map进行卷积和非线性变换,得到新的feature map,如上图中左侧的feature map在经过卷积层后得到右侧的feature map,图中两个feature map的绿色部分是对应的。为了能增强CNN网络的局部辨识能力,NIN中在卷积层中的卷积+非线性变换后采用了多层神经网络的结构,进一步增强模型的局部建模能力,具体过程如下图所示:
这样一个卷积+非线性变换+mlp+mlp就组成了新的卷积层,在NIN中称为mlp卷积层,与之前的卷积层对比如下图所示:
上述的mlp等价于卷积核大小为
1
×
1
1\times1
1×1的卷积操作+非线性变换
2.2. Global Average Pooling
在传统的CNN网络中,经过多层的Convolution+Pooling的操作后得到一系列最终的feature map,针对分类问题,通常通过Flatten的操作将多个feature map转换成一维的向量,下图以
3
3
3个feature map为例:
在单个feature map中,以同样的方式将其转换成一维向量,具体过程如下图所示:
在转换成一维向量后,再通过全连接网络实现最终的分类目标,这种方式存在的一个最大的问题是过拟合。Dropout是处理过拟合有效的方式,在NIN中提出使用全局平均聚合(Global Average Pooling)来代替全连接层。全局平均聚合的具体做法是要求在最后一个mlpconv层产出对应分类个数的feature map,并在每一个feature map上使用平均聚合,如在分类个数为
3
3
3的情况下,全局平均聚合的具体过程如下:
采用全局平均聚合的优点主要有,第一,最终的每个feature map与指定的分类类目是对应的,如上图中的蓝色的feature map与第一个分类类目是对应的;第二,全局平均聚合中没有参数。
2.3. NIN的网络结构
通过将传统的CNN网络中的卷积层替换成MLP卷积层,同时将最后的全连接网络替换成全局平均聚合,便得到了最终的NIN网络结构,如下图所示:
参照[2]的参数格式,可以绘制出如下的网络结构:
其中,上图中紫色的部分即为卷积核大小为
1
×
1
1\times1
1×1的卷积操作,由一个卷积conv和两个cccp组成MLP卷积层。最终的pool4实现了全局平均聚合。以conv1,relu0,cccp1,relu1,cccp2,relu2,pool0为例:
- conv1:输入(
224
×
224
×
3
224\times224\times3
224×224×3),输出(
54
×
54
×
96
54\times54\times96
54×54×96,其中,卷积核的大小为
11
×
11
11\times11
11×11,步长为
4
4
4,卷积核的个数为
96
96
96)
- relu0:输入(
54
×
54
×
96
54\times54\times96
54×54×96),输出(
54
×
54
×
96
54\times54\times96
54×54×96)
- cccp1:输入(
54
×
54
×
96
54\times54\times96
54×54×96),输出(
54
×
54
×
96
54\times54\times96
54×54×96,其中,卷积核的大小为
1
×
1
1\times1
1×1,步长为
1
1
1,卷积核的个数为
96
96
96)
- relu1:输入(
54
×
54
×
96
54\times54\times96
54×54×96),输出(
54
×
54
×
96
54\times54\times96
54×54×96)
- cccp2:输入(
54
×
54
×
96
54\times54\times96
54×54×96),输出(
54
×
54
×
96
54\times54\times96
54×54×96,其中,卷积核的大小为
1
×
1
1\times1
1×1,步长为
1
1
1,卷积核的个数为
96
96
96)
- relu2:输入(
54
×
54
×
96
54\times54\times96
54×54×96),输出(
54
×
54
×
96
54\times54\times96
54×54×96)
- pool0:输入(
54
×
54
×
96
54\times54\times96
54×54×96),输出(
27
×
27
×
96
27\times27\times96
27×27×96,其中,核大小为
3
×
3
3\times3
3×3,步长为
2
2
2)
图中后续的MLP卷积层与此类似,最后的全局平均聚合以conv4-1024,relu10,cccp7-1024,relu11,cccp8-1024,relu12,pool4为例:
- conv4-1024:输入(
6
×
6
×
384
6\times6\times384
6×6×384),输出(
6
×
6
×
1024
6\times6\times1024
6×6×1024,其中,卷积核的大小为
3
×
3
3\times3
3×3,步长为
1
1
1,padding为
1
1
1,卷积核的个数为
1024
1024
1024)
- relu10:输入(
6
×
6
×
1024
6\times6\times1024
6×6×1024),输出(
6
×
6
×
1024
6\times6\times1024
6×6×1024)
- cccp7-1024:输入(
6
×
6
×
1024
6\times6\times1024
6×6×1024),输出(
6
×
6
×
1024
6\times6\times1024
6×6×1024,其中,卷积核的大小为
1
×
1
1\times1
1×1,步长为
1
1
1,卷积核的个数为
1024
1024
1024)
- relu11:输入(
6
×
6
×
1024
6\times6\times1024
6×6×1024),输出(
6
×
6
×
1024
6\times6\times1024
6×6×1024)
- cccp8-1024:输入(
6
×
6
×
1024
6\times6\times1024
6×6×1024),输出(
6
×
6
×
1000
6\times6\times1000
6×6×1000,其中,卷积核的大小为
1
×
1
1\times1
1×1,步长为
1
1
1,卷积核的个数为
1000
1000
1000),在此将feature map的个数转换成与分类类目个数一致
- relu12:输入(
6
×
6
×
1000
6\times6\times1000
6×6×1000),输出(
6
×
6
×
1000
6\times6\times1000
6×6×1000)
- pool4:输入(
6
×
6
×
1000
6\times6\times1000
6×6×1000),输出(
1
×
1
×
1000
1\times1\times1000
1×1×1000,其中,核大小为
6
×
6
6\times6
6×6,步长为
1
1
1),至此实现了全局平均聚合
3. 总结
在NIN卷积网络中,有两个点优化,第一,在传统的卷积层中加入MLP,进一步提升局部特征的提取能力;第二,引入全局平均聚合,将feature map与最终的分类类目对应,缓解因全连接网络引起的过拟合。
参考文献
[1] Lin M , Chen Q , Yan S . Network In Network[J]. Computer Science, 2013.
[2] https://dgschwend.github.io/netscope/#/preset/nin
|