论文笔记:Residual Network内部结构剖析

论文笔记:Residual Network内部结构剖析

最近看了、搞了一些和之前有点差异的东西,大致是自适应变化的网络结构之类的,搞起来的动机一言难尽。

论文是这篇:Residual Networks Behave Like Ensembles of Relatively Shallow Networks

地址不放了,自己搜

这篇文章很老了,NIPS 2016的,差不多在ResNet出来以后半年,作者就跟着搞完了他的实验(我估计是),差不多之前一点的时候还有另外一篇随机删除Residual Block的工作。


0. 概要

首先作者发现一点:ResNet 中其实是存在着很多路径的集合

通过实验,作者进一步发现:在实际的运行过程中,其实只有较浅的一部分路径是真正有效的,也就是说,真正发生梯度传递的路径深度并不是很深。

文章作者通过在110层layers的ResNet上进行实验,发现一点,不管是对于已经训练完成的残差网络或是说还没有进行训练的残差网络,如果随机去掉一小部分的网络层,都不会对最终的分类结果造成太大的影响。进一步地,对于一个原本有110层卷积的残差网络,实际上发生有效梯度传递的只有30~50层,而发生较明显梯度传递的只有不到20层。

论文采用一下2种手段对ResNet进行剖析:

1. 对于ResNet的解剖方法进行结构上的分析

2. 使用破坏式的实验方法,对ResNet中的有效路径深度进行分析


1. ResNet的解剖方法


作者通过对比Residual Network 的重要参考文献 Highway Network,来解释Residual Network 的解剖过程,首先对比两种网络中block 的公式表达:

Highway Network: \[{y_{i + 1}} = {f_{i + 1}}\left( {{y_i}} \right) \cdot {t_{i + 1}}\left( {{y_i}} \right) + {y_i}\left( {1 - {t_{i + 1}}\left( {{y_i}} \right)} \right)\]

Residual Network: \[{y_{i + 1}} = {f_{i + 1}}\left( {{y_i}} \right) + {y_i}\]

所以,很容易可以看到相比于残差网络,Highway Network 在进行跳跃连接(skip-connect)的时候,容易造成非零即一的选择性,当一条支路权值较大的时候,就会强制减少另外一条支路的权重,而在极端情况下,两条支路往往只能二选一,相比于残差网络少了很多路径可能。

而残差网路则有多种的路径选择,如图1所示,一个包含三层卷积的Residual Block可以展开为8种不同深度的网络的集成,也就是说,如果残差块的卷积层数为 n ,我们就可以得到 2^n 条不同的路径,并且每一条路径都可以用一个唯一的二进制编码进行表示(0表示跳过,1表示是通过residual flow),相比之下,普通的堆叠网络(VGG)就只有唯一的一条路径。上图中残差网络的公式展开如下:

\begin{aligned} y_3 &= y_2 + f_3(y_2) \\ &=\left[y_1 + f_2(y_1) \right] + f_3(y_1 + f_2(y_1)) \\ &= \left[y_0 + f_1(y_0) + f_2(y_0 + f_1(y_0)) \right] + f_3(y_0 + f_1(y_0) + f_2(y_0 + f_1(y_0))) \end{aligned}

根据这个解剖结果,作者提出了三个问题:

1. ResNet中各条路径是否互相依赖,是否存在一定的冗余?

2. 如果这些网络不相互依赖,那么这些残差网络的行为是否可以视为一种集成学习?

3. 路径之间的不同长度是否会对整个网络有着不同的影响力?(更长的路径是不是会比更短的路径对于整个网络的影响力更强)。

为了探索这三个问题,作者进行了以下的破坏性实验:


2. 破坏性实验


a.实验一:在已经训练好的残差网络上随机删除单个残差块,进行分类测试

在ResNet中,这样做对实验结果基本没有什么影响,只是会有一点点轻微的振动,而如果对VGG中的某一层进行删除的话,实验效果就会崩溃。

其实稍作分析就可以很容易的知道,其实删除掉残差网络中的单个残差块根本不会对残差网路的连通性和内隐多样性产生影响,从第二张图的示意就可以看到,一个三层卷积的残差块,原本有8种可能的路径,如果把 f_2 去掉的话,就是少了4条可能的路径而已( 8/2 )。

得出结论:ResNet中的各个子路径互相之间没有强烈的依赖性。

b. 实验二:随机删除已训练残差网络上的多个残差块

这个实验的目的是为了检验残差网络的行为是否可以看作是一种集成学习,首先有一个判断是否为集成学习的条件:集成模型的性能会随着集成成员的数量平滑地发生变化。

通过实验发现,随着删除残差块的数量增多,错误率也会平滑地升高,所以得出的结论是:残差网络的行为确实符合集成模型的特性

另外,在删除了差不多10个残差块的时候(总共ResNet-110有大约50个residual block),依然能保持错误率仅仅在0.2上下(80%准确率),要知道删除这10个残差块相当于去除了 2^{10} 种可能的路径,相当于路径的多样程度只有之前的 10^{-6} 那么多,从另外一个侧面反映了残差结构的鲁棒性能。

c. 实验三:随机交换已训练好的残差网络中若干个残差块的位置

继续对残差网络的结构进行另外一种的破坏

发现这种破坏的结果与实验二类似,随着残差块位置交换程度的不断增加,错误率也在平滑的上升,在进行适度交换的情况下,实验的错误率依旧能保持在0.2上下,进一步说明了残差网路结构上的灵活性,并且推断残差网络在训练的时候可以有一定程度的重配置适应能力。


3. 一些补充的实验及讨论

1. 简单统计一下残差网络中各个子路径的深度分布,按一个含有54个残差块的residual network来说,95%的路经长度都集中在19~35个残差块那么长。

2. 按照全网络进行前馈传播,而选择k个残差块进行梯度回传,随着k值的不断增加,回传中各个残差块的梯度幅度也指数性地下降。

3. 尽管从理论上说,神经网络的信息流将通过全部的路径,但实验发现,几乎全部的回传梯度集中流通在5~17个残差块中,作者进一步开展实验,在拥有54个残差块的ResNet中,每个训练batch随机pick 23个残差块进行训练,效果不但没有降低,还好了一点点。

4. 如果在n个残差块的ResNet中,删除d个残差块,剩下的长度为x的路径数量比例,按如下公式进行计算:

r = C_{n-d}^{x} / C_{n}^{x}

5. 其他的从现在的眼光看都很常识...


4. 自适应连接主义模型的设计模式

这部分全是个人观点,没有经过考证,慎重参考。(说白了就是乱写的)

自适应网络模型的好处在于,能够从结构上区别对待不同的训练样本,不依靠或少依靠额外的参数代价以及计算需求来提高样本特征表示的维度,从而廉价地获得不俗的泛化能力。

首先自适应网络模型一般建立在一个具有隐式集成的统一体系之中,比较典型的这样的结构有众所周知的残差网络 [He K, Zhang X, Ren S, et al. Deep Residual Learning for Image Recognition[J]. computer vision and pattern recognition, 2016: 770-778.],以及分形网络 [Larsson G, Maire M, Shakhnarovich G, et al. FractalNet: Ultra-Deep Neural Networks without Residuals[J]. international conference on learning representations, 2017.]。

如何判断一个模型结构是否含有隐式的集成特性:一个简单的方法,随机删除该结构中的一个基本组件,如果模型性能崩溃,则该模型不具有隐式的集成特性,反之,如果在训练过程中,每个批次随机删除若干基本组件,保留一定量的基本组件,则该模型拥有一定的隐式集成特性。

自适应网络结构可以分为随机自适应网络结构和先验指导的自适应网络结构,前者通常在训练过程中随机变化网络的结构(在整体统一框架的限定下),通过类似破坏性的训练方法,防治由于结构固化导致的模型惰性,引发过拟合,让信息流自身寻找适合的流通方式,这种自适应性对于不同的样本来说往往是隐式的,从表象上看,信息流理论上是通过了所有的子路径的,但通过类似于上文的破坏性实验分析,可以证明此观点。

典型的随机自适应连接主义模型:1. 最为人熟知的就是Dropout机制了;2. Stochastic Depth的ResNet [Huang G, Sun Y, Liu Z, et al. Deep Networks with Stochastic Depth[J]. european conference on computer vision, 2016: 646-661.];3. Drop-path机制(出现在上面提到的分形网络);

而先验指导的自适应网络往往含有显式的结构优化目标,比如添加正则,强制稀疏等等,通常需要在主要的训练损失函数之外,单独或内嵌地建立 针对模型结构的学习体系,这套学习体系的目标函数不适合与主要的学习目标完全一样,应该添加额外的先验条件。这种自适应模型不需要破坏性的实验可以明确展示变化的网络结构,例子文献:[Alvarez J M, Salzmann M. Learning the Number of Neurons in Deep Networks[J]. neural information processing systems, 2016: 2270-2278.]。

编辑于 2018-06-07