ibcadmin 发表于 2019-10-12 10:23:36

Network in Network(2013),1x1卷积与Global Average Pooling

<p >目录</p>
   
      <ul>
      <li>写在前面</li>
      <li>mlpconv layer实现</li>
      <li>Global Average Pooling</li>
      <li>网络布局</li>
      <li>参考</li>
      </ul>
   

<p>博客:blog.shinelee.me | 博客园 | CSDN</p>
<h1 id="写在前面">写在前面</h1>
<p>《Network in Network》简称NIN,出自颜水成老师团队,初次发表在arxiv的时间为2013年12月,至20190921引用量为2871(google scholar)。</p>
<p><div align="center"></div></p>
<p>NIN的网络布局还是在AlexNet根本上修改而来,其主要创新点如下:</p>
<ul>
<li>提出了<strong>mlpconv layer</strong>:mlpconv layer中利用小的多层全毗连神经网络(multilayer perceptron, MLP)“micro network”替换掉卷积操作,<strong>micro network的权重被该层输入feature map的全部local patch共享</strong>。卷积操作可以看成线性变更,而micro network可以拟合更复杂的变更,<strong>相当于增强了conv layer的本事</strong>。多个mlpconv layer堆叠构成整个网络,这也是Network in Network名称的由来。</li>
<li>提出了<strong>global average pooling(GAP)</strong>:<strong>NIN不再利用全毗连层</strong>,最后一层mlpconv layer输出的feature map数与类别数雷同,GAP对每个feature map求全图均值,结果直接通过softmax得到每个类别的概率。<strong>GAP在减少参数目的同时,强行引导网络把最后的feature map学习成对应类别的confidence map</strong>。</li>
<li>\(1\times 1\) <strong>convolution</strong>:在mlpconv layer中初次利用了\(1\times 1\)卷积,\(1\times 1\)卷积可以在不改变尺寸的情况下,<strong>灵活调解feature map的channel数</strong>,广泛影响了后续网络的计划,如Inception系列等。</li>
</ul>
<p>本文将依次介绍上面的创新点,同时顺带介绍 全毗连 与 卷积的关系、全毗连与GAP的关系,最后给出NIN的网络布局。</p>
<h1 id="mlpconv-layer实现">mlpconv layer实现</h1>
<p><div align="center"></div></p>
<p>论文中讲,mlpconv layer利用一个小的全毗连神经网络替换掉卷积,convolution layer与mlpconv layer对比表示图如下,</p>
<p><div align="center"></div></p>
<p>对于convolution layer,假设有N个kernel,每个kernel的尺寸为\(k \times k\),卷积操作将每个\(k \times k\)大小的local recptive field / local patch<strong>线性映射</strong>为N个输出,汇总全部local patch的卷积结果得到N个feature map。</p>
<p>对于mlpconv layer,利用micro network替换掉卷积,通过micro network将每个\(k \times k\)的local patch<strong>非线性映射</strong>为N个输出,汇总后仍得到N个feature map。文中说micro network为小的全毗连神经网络,但在实现时,这个全毗连神经网络却是通过几个卷积层实现的,为什么呢?<strong>因为全毗连可以转化成卷积</strong>。</p>
<p>下面为《Dive into Deep Learning》中提供一个NIN block(mlpconv layer)的mxnet实现,</p>
<p><div align="center"></div></p>
<code>from mxnet import gluon, nd
from mxnet.gluon import nn

def nin_block(num_channels, kernel_size, strides, padding):
    blk = nn.Sequential()
    blk.add(nn.Conv2D(num_channels, kernel_size, strides, padding, ctivation=&#39;relu&#39;),
            nn.Conv2D(num_channels, kernel_size=1, activation=&#39;relu&#39;),
            nn.Conv2D(num_channels, kernel_size=1, activation=&#39;relu&#39;))
    return blk</code>
<p>一个NIN block通过1个卷积层和2个\(1 \times 1\)卷积层堆叠而成,<strong>这3个卷积层的输出channel数雷同</strong>。对于第1个卷积层,因为kernel_size与local patch大小雷同,以是<strong>对每一个local patch而言,这个卷积等价于全毗连</strong>,共num_channels个输出,每个输出与local patch全毗连的权重就是对应的整个卷积核,卷积核的数目也为num_channels。对于反面2个\(1\times 1\)的卷积层,输入都是num_channels维的向量,即num_channels个\(1\times 1\)的feature map,kernel_size与整个feature map的尺寸雷同,这个\(1\times 1\)的卷积也就相当于全毗连了。通过\(1\times 1\)的卷积实现了差异卷积核结果间的信息交流。</p>
<p><strong>实际上,通过调解\(1\times 1\)卷积核的数目,可以在不改变输入feature map尺寸的情况,灵活地增加或减少feature map的channel数目,引入更多的非线性,表达本事更强,在实现feature map间信息交流的同时,获得信息的压缩或增广表示</strong>。</p>
<h1 id="global-average-pooling">Global Average Pooling</h1>
<p>卷积神经网络的经典做法是 数个卷积层+几个全毗连层,典范视角是将前面的卷积层视为特性提取器,将全毗连层视为分类器。<strong>卷积层的盘算量高但参数少,全毗连层的盘算量少但参数多,一种观点以为全毗连层大量的参数会导致过拟合</strong>。作者提出了Global Average Pooling(GAP),取代全毗连层,最后一层mlpconv layer输出的feature map数与类别数雷同,对每一个feature map取均匀,全毗连层与GAP的对好比下图所示,图片来自Review: NIN — Network In Network (Image Classification),GAP的结果直接输给softmax得到每个类别的概率。</p>
<p><div align="center"></div></p>
<p><strong>去掉全毗连的GAP强制将feature map与对应的类别建立起对应关系,softmax相当于分数的归一化,GAP的输出可以看成是与每个类别相似程度的某种度量,GAP的输入feature map可以解释为每个类别的置信度图(confidence map)——每个位置为与该类别的某种相似度,GAP操作可以看成是求取每个类别全图置信度的期望。因为只有卷积层,很好地保存了空间信息,增加了可解释性,没有全毗连层,减少了参数目,一定程度商逑盗了过拟合。</strong></p>
<p>最后一层mlpconv layer输出的feature map如下,可以看到图片label对应的feature map响应最强,强响应基天职布在目的主体所在的位置。</p>
<p><div align="center"></div></p>
<p>别的,作者还做将GAP与全毗连层、全毗连+dropout对比,在CIFAR-10库上的测试结果如下,</p>
<p><div align="center"></div></p>
<p><strong>GAP可以看成是一种正则,全毗连层的参数是学习到的,GAP可以看成是权值固定的全毗连层</strong>。上面的实行说明,这种正则对改善性能是有用的。</p>
<h1 id="网络布局">网络布局</h1>
<p>论文中给出的团体网络布局如下,</p>
<p><div align="center"></div></p>
<p>论文中没有给出详细的参数配置,实际上,<strong>NIN还是在AlexNet根本上修改而来</strong>,相当于在AlexNet的每个卷积层后插入2个\(1\times 1\)卷积层,移除了Local Response Norm,同时用GAP替换掉全毗连层。在这里,mlpconv layer既可以看成是增强了原conv layer的表达本事,也可以看成增加了网络深度。</p>
<p><div align="center"></div></p>
<h1 id="参考">参考</h1>
<ul>
<li>arxiv: Network in Network</li>
<li>7.3. Network in Network (NiN)</li>
<li>Review: NIN — Network In Network (Image Classification)</li>
<li>Network In Network architecture: The beginning of Inception</li>
</ul><br><br/><br/><br/><br/><br/>来源:<a href="https://www.cnblogs.com/shine-lee/p/11655836.html" target="_blank">https://www.cnblogs.com/shine-lee/p/11655836.html</a>
页: [1]
查看完整版本: Network in Network(2013),1x1卷积与Global Average Pooling