Advertisement

论文阅读:Network In Network

阅读量:

这里写图片描述
源码及论文地址:https://github.com/BVLC/caffe/wiki/Model-Zoo#network-in-network-model


这篇paper改进了传统的CNN网络,采用了少量的参数就轻松击败了Alexnet网络,Alexnet网络参数大小是230M,采用这篇paper的算法才29M,减小了将近10倍。另外,这篇paper提出的网络结构,是对传统CNN网络的一种改进。
先看一下摘要 ,对NIN有个简单的了解:
这里写图片描述
文章中的两个创新点:
1. MlpConv卷积层
传统卷积层时下图左侧方式的,可以理解为是一个简单的单层网络,而MlpConv可以看成是每个卷积的局部感受野中还包含了一个微型的多层网络,用来提高非线性。利用多层Mlp的微型网络,对每个局部感受野的神经元进行更加复杂的运算,而以前的卷积层,局部感受野的运算仅仅只是一个单层的神经网络罢了。
这里写图片描述
一个MlpConv的网络结构如下:

复制代码
    layers {
      name: "conv1"
      type: CONVOLUTION
      bottom: "data"
      top: "conv1"
      blobs_lr: 1
      blobs_lr: 2
      weight_decay: 1
      weight_decay: 0
      convolution_param {
    num_output: 192
    pad: 2
    kernel_size: 5
    weight_filler {
      type: "gaussian"
      std: 0.05
    }
    bias_filler {
      type: "constant"
    }
      }
    }
    layers {
      name: "relu1"
      type: RELU
      bottom: "conv1"
      top: "conv1"
    }
    layers {
      name: "cccp1"
      type: CONVOLUTION
      bottom: "conv1"
      top: "cccp1"
      blobs_lr: 1
      blobs_lr: 2
      weight_decay: 1
      weight_decay: 0
      convolution_param {
    num_output: 160
    group: 1
    kernel_size: 1
    weight_filler {
      type: "gaussian"
      std: 0.05
    }
    bias_filler {
      type: "constant"
      value: 0
    }
      }
    }
    layers {
      name: "relu_cccp1"
      type: RELU
      bottom: "cccp1"
      top: "cccp1"
    }
    layers {
      name: "cccp2"
      type: CONVOLUTION
      bottom: "cccp1"
      top: "cccp2"
      blobs_lr: 1
      blobs_lr: 2
      weight_decay: 1
      weight_decay: 0
      convolution_param {
    num_output: 96
    group: 1
    kernel_size: 1
    weight_filler {
      type: "gaussian"
      std: 0.05
    }
    bias_filler {
      type: "constant"
      value: 0
    }
      }
    }
    layers {
      name: "relu_cccp2"
      type: RELU
      bottom: "cccp2"
      top: "cccp2"
    }
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI写代码

其实结构很简单,就是三个卷积层的堆叠,我们用Netscope可视化后可以看到一个MlpConv层的结构如下图:
这里写图片描述

2. 全局平均池化(Global Average Pooling)
传统的卷积神经网络卷积运算一般是出现在低层网络。对于分类问题,最后一个卷积层的特征图通过量化然后与全连接层连接,最后在接一个softmax逻辑回归分类层。这种网络结构,使得卷积层和传统的神经网络层连接在一起。我们可以把卷积层看做是特征提取器,然后得到的特征再用传统的神经网络进行分类。

然而,全连接层因为参数个数太多,往往容易出现过拟合的现象,导致网络的泛化能力不尽人意。于是Hinton采用了Dropout的方法,来提高网络的泛化能力。

本文提出采用全局均值池化的方法,替代传统CNN中的全连接层。与传统的全连接层不同,我们对每个特征图一整张图片进行全局均值池化,这样每张特征图都可以得到一个输出。这样采用均值池化,连参数都省了,可以大大减小网络,避免过拟合,另一方面它有一个特点,每张特征图相当于一个输出特征,然后这个特征就表示了我们输出类的特征。这样如果我们在做1000个分类任务的时候,我们网络在设计的时候,最后一层的特征图个数就要选择1000。

论文中提到的全局平均池化的优点:
1. 相比于用全连接操作,feature map和类别之间用池化操作更自然些;
2. 参数量少了很多;
3. 全局平均池化考虑了图像的空间特性,因此对输入的空间变换有很好的鲁棒性。
在实验部分,作者在CIFAR-10数据库上给出了验证:
这里写图片描述
第一行是MlpConv结构+全连接,由于存在过拟合,因此结果不是很好;第二行加入了dropout,结果提升了一些。第三行采用全局池化,结果是最优的。

最后,NIN采用的网络结构是:
这里写图片描述

全部评论 (0)

还没有任何评论哟~