PolyNet

Paper : PolyNet: A Pursuit of Structural Diversity in Very Deep Networks
Code : official

摘要

PolyNet从多项式的角度将ResNet的核心推导式H(x)=F(x)+xH(x) = F(x)+x进行扩展,尝试将其一般化,以找到最优的网络结构。

网络结构

当前改善网络表现的方法主要有三种:增加模型的深度,但是太深的网络会出现梯度消失的情况,有效的梯度无法反向传播回输入层,而且网络的识别准确率随模型深度的上升会饱和;增加模型的宽度,与此同时会带来模型参数规模和计算力需求的上升;增强模型的结构多样性,这是Inception结构可以生效的重要原因。作者效仿Inception-Resnet的思想,希望通过更复杂的block结构来获得比增加深度更大的效益。

经典的ResNet系列的Block可以使用如下的式子表示
H(x)=x+F(x)=(I+F)x H(x) = x+F(x) = (I+F)\cdot x

FF为两个卷积层,则为ResNet Block,若FF是Inception的变换,则为Inception-Resnet Block

PolyNet

下面我们将FF看作是Inception Residual Unit中的变换,提出以下三种PolyInception Block

PolyNet

  1. poly-2 : I+F+F2
    在这个形式中,网络有三个分支,左侧路径是一个直接映射,中间路径是一个Inception结构,右侧路径是两个连续的Inception,如图3(a)所示。在这个网络中,所有Inception的参数是共享的,所以不会引入额外的参数。由于参数共享,我们可以推出它的的等价形式,如图(b)。
  2. mpoly-2 : I+F+GF
    这个block的结构和图(b)相同,不同之处是两个Inception的参数不共享。它具有更强的表达能力,但是参数数量也加倍了。
  3. 2-way : 即向网络中添加一个额外且参数不共享的残差块

结合上文提出的多项式的思想,几乎可以衍生出无限的网络模型,出于对计算性能的考虑,我们仅考虑下面三个多项式扩展:

  1. poly-3 : I+F+F2+F3
  2. mpoly-3 : I+F+GF+HGF
  3. 3-way : I+F+G+H

事实上,对于DenseNet(blog),本质上也可以是一种多项式
ICC2...Cn I \oplus C \oplus C^2 ...\oplus C^n
其中\oplus表示concatenate,CC表示卷积操作

PolyNet

上图分别为Inception-ResNet-v2(blog)的网络结构和PolyInception的网络结构,PolyNet仿照Inception-ResNet-V2将模块分成A,B,C三部分,将以上6种PolyNet模块替换到InceptionResNet中,可以得到以下几条结论

  1. Stage-B的替换最有效
  2. Stage-B中使用mpoly-3最有效,poly-3次之,但是poly-3的参数数量要少于mpoly-3
  3. Stage-A和Stage-C均是使用3-way替换最有效,但是引入的参数也最多;
  4. 3路Inception的结构一般要优于2路Inception。
  5. 使用(3-way → mpoly-3 → poly-3)×4替换Stage-B在所有混合替换中最有效

SOTA模型如下

  1. StageA : 2-way×10
  2. StageB : (poly-3 → 2-way)×10
  3. StageC : (poly-3 → 2-way)×5

训练策略如下

  1. 插入初始化:先训练Inception ResNet模型,然后插入Inception变换
  2. 交叉插入:当插入网络模块时,将新加入的随机初始化的模块交叉的插入到已有模型中效果更好
    PolyNet
  3. drop-path 类似于Fractal Net中的方法(blog)
  4. 加权路径:Inception部分乘以权值β,文中推荐 β = 0.3

核心观点

  1. PolyNet从多项式的角度对残差块和Inception-ResNet进行了扩展
  2. 训练的时候使用的插入初始化策略
  3. 基于集成思想的随机路径和加权路径
  4. 文章从实验的角度证明了增强模型的多样性可以提高模型的准确率