深度残差网络的一波两折

800 阅读7分钟
原文链接: mp.weixin.qq.com

奇技指南

本文主要梳理下残差网络的思路、探讨其工作原理以及残差Block的变化。

本文来自360信息流算法团队的投稿,原文:

https://blog.csdn.net/yujianmin1990/article/details/78672485

前言

最近拜读了何凯明大神的深度残差网络,一方面惊讶于其对网络深度的拓展,一方面又被Andreas等人的挑战思路所震惊,残差网络并不是扩展深度,而是增强了网络多样性。果然,科学探索的路上权威不可迷信,真理总是被不断发掘。现梳理下残差网络的思路、工作原理的讨论、残差Block的变化。

Residual Network

16年的时候,深度残差网络横空出世,将神经网络的深度由百层拓展到了千层量级,并且获得了N多竞赛奖项,一时风头无两。那么问题来了,它是怎么将深度搞得这么深的?背后又是什么原理?为什么会有效呢?

What is ResNet

假设,层间需要学习的隐藏映射为H(x),残差映射表示为F(x)=H(x)−x,将原本需要学习的映射H(x)变为残差函数F(x)+x。这里的残差定义: 输出 - 输入 = 残差。 

残差单元示意图:

图中右侧skip-connect为identity mapping(output≡inputoutput≡input)。上图只是一种残差单元类型,后面会补充其他的类型。由这些类似的block组成的网络,就是残差网络。

Residual idea inspired by What ?

残差网络的思想是受到什么启发才得来的呢?这是我很好奇的地方。 

已知,一个浅层网络,可以通过

叠加恒等映射

的方式

得到深层网络,并且其效果不会比原浅层网络弱才对。但是,加大网络的深度,训练&测试误差却随之增加,说明是没有训练好模型,而并不是overfitting带来的问题。该现象如下图。

猜测,是不是网络对恒等映射更难以学习,如果每层并行加上恒等映射,会不会更好呢?于是残差的思路就有了,在单/多层间并行加个恒等映射。

why it work ?

对于残差网络为什么在深层下有明显效果提升,有两种解释,一个是原作者的数据流解释,一个是挑战者的集成思路解释。后者对残差网络的性质做了更深入的研究,刷新了大家对残差网络的认识。

1、Data Dirtectly Flow

这个解释,认为数据在残差网络中有两套流转路径,一个是skip-connect(恒等映射)所表示的直传路径;一个是残差部分所表示的非线性路径。

1)残差网络的数据流形式

2)数据流的损失情况 

2、Ensemble By Construction

上面的解释,说不清楚的是非1的那部分权重变化率,如何影响整个网络的。 

很快Andreas对ResNet的深度进行质疑,声明ResNet并没有解决深度问题,而是将相关浅层网络集成的网络,其网络深度并没有增加,而是增加了网络的多样性(multiplicity),并给出证明,同时说明了残差网络的工作原理,对其真正起作用的网络部分进行了分析。牛人一个,真汉子。 

1)残差网络结构拆解,是输入多路并行的集成结构

2)损伤研究,测试时具有集成表现

删掉残差网络的某些部分,对网络在测试集上的表现无明显影响,这是集成结构的特点。 

如何删除某个残差模块?将其残差部分屏蔽掉,只留其skip-connect,相当于这个block变为恒等映射,这个skip所在的block也就不起作用了。

整个残差网络从输入==>输出的路径数量为

,路径长度(path-length)表示

该路径上的残差模块个数。指数基数2,是由于每个节点都有两条路可走。

每删除dd个残差模块,则路径数据降低为

,少量删除无明显影响,

但是随着删除残差模块越来越多,测试误差也随着变大。 

3)残差网络中,到底什么在起作用?梯度消失到底有没有被解决掉? 

这里是论文最精彩的部分,前面都只是开胃的说明。以54层残差网络为例。 

path-length的分布,是Binomial-distribution,怎么样,能想到吧。 

发现: 95%的路径,其上残差模块个数在19~35之间。 

在串行网络中,梯度是受到串行链路的长度影响的。残差网络中的梯度到底有没有消失呢? 

Andreas设计了一种方法,能描述 残差网络的梯度与path-length的关系。一方面,可以将梯度表示出来,一方面与path-length结合到一起,简直帅到没朋友。 

方法如下: 

1. feed data forward propagate. 

2. during back-propagate, 

  • 随机选择k个Residual Block,构成一条path-length=k的路径; 

  • 对这条路径,只在残差部分传播误差; 

  • 对其余的L-k个Block构成的路径,则只在skip-connect中传播。 

3. 计算反馈到input的梯度。 

4. 多次输入数据,多次采样,求每个k值下的梯度平均值。 

发现: path-length为[5,17]的路径集,只占总路径的0.45%,却贡献了绝大部分梯度。 

疑问:随机采样k个Residual Block,不会影响残差网络所描述的网络路径结构吧? 

回答:不影响,因为每个Residual Block都有skip-connect,相当于每个Residual Block都可以任意相邻。 

残差网络中,真正起作用的是effective path,那些短些精悍的路径,Residual Block不多,27(Bin-dis的均值)左,相对浅的网络。 

为更有力的说明(最后致命一击),作者又加了个试验,每次训练的时候,随机挑23个Residual Block训练,结果证明,只训练理论上的effective path,整个网络的效果不比整体训练若,还更好(5.96% vs 6.1% 尴尬脸)。 

至此,残差网络被解释地更透彻: 

  1. 残差网络并不是真正的深度网络,而是浅层网络的集成网络(ensemble by construction)。 

  2. 没有解决掉梯度消失问题,长路径上仍然存在梯度消失现象。 

  3. 真正起作用的,是相对浅层的网络。

Variant of Residual module

对残差单元的结构设计,会影响性能么~答案,是的。下面看下几个网络结构。 激活函数ReLU,虽然在正值部分无影响,但是人为约束了负值。将其从post-activation变形到pre-activation怎么样?答案,OK。虽然这种变形不对称,但是对性能有提升。见附图。

思考 与 小结

一,集成的形态

1)跟dropout相比,dropout更近似于在单条路径上,通过训练来达到网络结构集成的效果(ensemble by training)。 

2)而残差网络,则是在网络结构本身,就是集成的结构(ensemble by construction)。 

3)随机森林,是在结构本身是集成的,并且训练输入对特征随机采样,也在某种程度上达成训练的ensembel。 

4)随机深度,这个方法稍后再补充。 

二,网络路径的表达

1)残差网络中,每个节点有均等机会的两条路可走。 2)HighwayNet中,在每个节点的两条路上,有个门函数控制。 3)如果多个其他选择,是不是可以多路径,某些路径具有决定性判别权重。人对初始新生事物的认知,是基于单个样本的,并无批量样本可供学习。

三,残差网络的理解

1)残差网络不是真正意义上的深层网络,而是浅层网络的集成。 2)网络深度问题仍然是未来的开放研究课题。

Reference

  1. Deep Reisdual Learning for Image Recognition

  2. Identity Mappings in Deep Residual Networks

  3. Residual Networks are Exponential Ensembles of Relatively Shallow Networks 

相关推荐

浅谈 梯度下降法/Gradient descent

界世的你当不

只做你的肩膀

 360官方技术公众号 

技术干货|一手资讯|精彩活动

空·