1*1卷积与GoogLeNet网络

under 算法  tag CNN  GoogLeNet    Published on May 10th , 2019 at 01:27 pm

过滤器的大小除了常见的$3*3,5*5$等之外,在实际应用中我们也会见到$1*1$的过滤器。对于单通道的图像来说,$1*1$的过滤器没有意义,因为卷积计算后只是单纯的将图像中的信息成倍的放大或缩小而已,但对于多通道的图像,$1*1$卷积就有了独特的意义
inception1.png
对于一个$6*6*32$的输入,当我们用$1*1*32$的过滤器去卷积,就可以把卷积过程看作是同一位置上的$32$个数字作为同一神经元的输入,乘上$32$个权重后再应用非线性函数ReLU进行激活处理得到结果。我们通过把输入矩阵分割成不同神经单元的输入向量的方式,为神经网络添加了非线性函数,所以$1*1$卷积也被称作Network in Network

同时$1*1$卷积还有更多的用途,压缩$n_H,n_W$可以通过池化的方法,而压缩$n_C$就要借助$1*1$卷积
inception2.png
我们想将上图的$28*28*192$的输入压缩成$28*28*32$,可以使用$32$个$1*1$过滤器,让他们与输入进行卷积计算,得到的输出就变成了$28*28*32$

$1*1$卷积还可以构建瓶颈层来降低计算成本
inception4.png
如果我们想应用$32$个$5*5$的过滤器来对$28*28*192$的输入进行卷积运算,我们需要乘法运算
$$28*28*32*5*5*192\approx 1.2*10^8次$$
当我们通过$1*1$卷积构造出一个$28*28*16$的瓶颈层,再借助瓶颈层进行卷积计算,同样得到$28*28*32$的输出只需要$$28*28*16*1*1*192+28*28*32*5*5*16\approx 1.24*10^7次$$
计算成本仅为原来的$\frac{1}{10}$
事实表明如果构造瓶颈层得当将大幅降低计算成本,而且神经网络的性能基本不会受到影响

了解完$1*1$卷积后介绍GoogLeNet网络,当我们构建一个CNN时,我们要花费很长的时间来确定不同卷积层的过滤器参数,还有是否添加池化层,而Inception模块就给出了由计算机来学习决定参数的方法
inception3.png
GoogLeNet网络的核心就是上图的Inception模块,对于$28*28*192$的输入,我们分别应用$1*1,3*3,5*5$的过滤器和池化层(使用的是same卷积和padding池化以保证维度相同,对池化层输出降维防止其占通道数过多),再把输出拼接在一起,得到$28*28*256$的完整输出
将Inception模块拼接起来就得到了GoogLeNet的结构图
inception5.png


本文由 cxh 创作,采用 知识共享署名4.0 国际许可协议进行许可,转载前请务必署名
  文章最后更新时间为:May 10th , 2019 at 03:09 pm
分享到:Twitter  Weibo  Facebook