Inception Net(V1)

摘要

Inception Net(V1)
Inception net是2014年ILSVRC的冠军,这个是第一个版本因此称作v1,总的来说该网络的创新点如下:

  • 提高了网络的计算资源利用率
  • 增加了网络深度和每一层的宽度,但计算量不变
  • 基于Hebbian原则和多尺度处理

提高网络性能

Inception Net(V1)
最直接提高网络性能的方法主要有两种,增加网络的深度和增加层网络的宽度(即增加每一级中的单元数)。
缺点:

  • 直接单纯的增加网络深度和宽度会导致网络参数过多,在数据集一定的情况下会导致过拟合现象,并且增加数据集是棘手的并且昂贵的事情。
  • 参数的增加会导致计算量的大量增加
    解决方法:
  • 使用全局平均池化代替全连接层(VGG网络中全连接层参数占据了总量的90%)
  • 大量使用1x1卷积核
    如此设计原因:
  • 逐层构造网络:如果数据集的概率分布能够被一个神经网络表达,那么构造这个网络的最佳方法是逐层构筑网络,即将上一层高度相关的输出聚类到一起。几乎所有效果好的深度网络都具有这一点,不管AlexNet VGG堆叠多个卷积,googleNet堆叠多个inception模块,还是ResNet堆叠多个resblock。
  • 符合Hebbian原理: Cells that fire together, wire together. 一起发射的神经元会连在一起。 相关性高的节点应该被连接而在一起。

网络块结构

Inception Net(V1)
该架构的主要思想是最优局部结构可以被现有的密集组件逼近和覆盖,且该想法实用性更高
卷积块使用的原理:
将稀疏矩阵聚类成相对密集的子矩阵,往往能够提供最先进的稀疏矩阵乘法的实用性能。我们假设转换不变性意味着我们需要使用块来搭建神经网络,我们需要做的是找到最优的局部结构并且去重复它。Arora表明在逐层搭建的网络中,应该分析上一层的关联统计,并将关联性高的聚类成一组单元。在同一个位置但在不同通道的卷积核输出结果相关性极高,应当把这些单元聚类到一起,这正好体现了1x1卷积核的作用之一。(这也解释了卷积操作时卷积核参数的设置问题,即卷积核的宽度,高度,与输入层的通道数相等,该层通道数。好久才明白该操作,原来每一步都有原因的。)这些聚类形成下一层的单元,我们假设前一层的每个单元对应于输入图像的某个区域,这些单元被分组到过滤器组中。这意味着,我们最终会在一个区域内聚集许多集群,它们可以被下一层的1x1个卷积覆盖。当这种聚类越来越多时,每一层会变小,因此该处只采用了3x3和5x5核。这还意味着,建议的体系结构是所有这些层的组合,它们的输出过滤器组连接成一个输出向量,形成下一阶段的输入。
1x1核的另一个作用是降维,减少参数个数。已上图的两种结构为例:
原始结构:
输入层有192个通道,1x1有64个通道,3x3有128个,5x5有32个
参数:(1×1×192×64) + (3×3×192×128) + (5×5×192×32) = 153600
最终输出的feature map:64+128+32+192 = 416
加入不同channel的1×1卷积后:
其它均相同,新加的1x1分别为96个通道,16个通道。
参数:1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32)=15872
最终输出的feature map: 64+128+32+32=256
所以加入1×1的卷积后,在降低大量运算的前提下,降低了维度。
降低维度也是inception module一个非常明智的举措。这种举措允许增加网络的深度和宽度,但这种结构需要人工去手调。