PolyNet
Paper : PolyNet: A Pursuit of Structural Diversity in Very Deep Networks
Code : official
摘要
PolyNet从多项式的角度将ResNet的核心推导式进行扩展,尝试将其一般化,以找到最优的网络结构。
网络结构
当前改善网络表现的方法主要有三种:增加模型的深度,但是太深的网络会出现梯度消失的情况,有效的梯度无法反向传播回输入层,而且网络的识别准确率随模型深度的上升会饱和;增加模型的宽度,与此同时会带来模型参数规模和计算力需求的上升;增强模型的结构多样性,这是Inception结构可以生效的重要原因。作者效仿Inception-Resnet的思想,希望通过更复杂的block结构来获得比增加深度更大的效益。
经典的ResNet系列的Block可以使用如下的式子表示
若为两个卷积层,则为ResNet Block,若是Inception的变换,则为Inception-Resnet Block
下面我们将看作是Inception Residual Unit中的变换,提出以下三种PolyInception Block
- poly-2 : I+F+F2
在这个形式中,网络有三个分支,左侧路径是一个直接映射,中间路径是一个Inception结构,右侧路径是两个连续的Inception,如图3(a)所示。在这个网络中,所有Inception的参数是共享的,所以不会引入额外的参数。由于参数共享,我们可以推出它的的等价形式,如图(b)。 - mpoly-2 : I+F+GF
这个block的结构和图(b)相同,不同之处是两个Inception的参数不共享。它具有更强的表达能力,但是参数数量也加倍了。 - 2-way : 即向网络中添加一个额外且参数不共享的残差块
结合上文提出的多项式的思想,几乎可以衍生出无限的网络模型,出于对计算性能的考虑,我们仅考虑下面三个多项式扩展:
- poly-3 : I+F+F2+F3
- mpoly-3 : I+F+GF+HGF
- 3-way : I+F+G+H
事实上,对于DenseNet(blog),本质上也可以是一种多项式
其中表示concatenate,表示卷积操作
上图分别为Inception-ResNet-v2(blog)的网络结构和PolyInception的网络结构,PolyNet仿照Inception-ResNet-V2将模块分成A,B,C三部分,将以上6种PolyNet模块替换到InceptionResNet中,可以得到以下几条结论
- Stage-B的替换最有效
- Stage-B中使用mpoly-3最有效,poly-3次之,但是poly-3的参数数量要少于mpoly-3
- Stage-A和Stage-C均是使用3-way替换最有效,但是引入的参数也最多;
- 3路Inception的结构一般要优于2路Inception。
- 使用(3-way → mpoly-3 → poly-3)×4替换Stage-B在所有混合替换中最有效
SOTA模型如下
- StageA : 2-way×10
- StageB : (poly-3 → 2-way)×10
- StageC : (poly-3 → 2-way)×5
训练策略如下
- 插入初始化:先训练Inception ResNet模型,然后插入Inception变换
- 交叉插入:当插入网络模块时,将新加入的随机初始化的模块交叉的插入到已有模型中效果更好
- drop-path 类似于Fractal Net中的方法(blog)
- 加权路径:Inception部分乘以权值β,文中推荐 β = 0.3
核心观点
- PolyNet从多项式的角度对残差块和Inception-ResNet进行了扩展
- 训练的时候使用的插入初始化策略
- 基于集成思想的随机路径和加权路径
- 文章从实验的角度证明了增强模型的多样性可以提高模型的准确率