最近拜读了何凯明大神的深度残差网络,一方面惊讶于其对网络深度的拓展,一方面又被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≡input )。上图只是一种残差单元类型,后面会补充其他的类型。由这些类似的block组成的网络,就是 残差网络。
Residual idea inspired by What ?
残差网络的思想是受到什么启发才得来的呢?这是我很好奇的地方。
已知,一个浅层网络,可以通过叠加恒等映射( yl≡xl )的方式得到深层网络,并且其效果不会比原浅层网络弱才对。但是,加大网络的深度,训练&测试误差却随之增加,说明是没有训练好模型,而并不是overfitting带来的问题。该现象如下图。
猜测,是不是网络对恒等映射更难以学习,如果 每层并行加上恒等映射,会不会更好呢?于是残差的思路就有了,在单/多层间并行加个恒等映射。
why it work ?
对于残差网络为什么在深层下有明显效果提升,有两种解释,一个是原作者的数据流解释,一个是挑战者的集成思路解释。后者对残差网络的性质做了更深入的研究,刷新了大家对残差网络的认识。
Explanation One :: Data Dirtectly Flow
这个解释,认为数据在残差网络中有两套流转路径,一个是skip-connect(恒等映射)所表示的直传路径,一个是残差部分所表示的非线性路径。
1)残差网络的数据流形式。
简化网络,去掉累加后的激活函数ReLU(下层输入直接等于本层输出),则整个网络可表示为: