一 为什么读这篇
传说中的ResNet v2。ResNet系列中的一篇,算是主题阅读。看看v2对原始的v1做了哪些改进。
二 截止阅读时这篇论文的引用次数
2018.12.3 1382次。这篇比何恺明那篇开创性的v1引用次数少了一个数量级。
三 相关背景介绍
ResNet续作,4个作者一个没变,甚至连次序也没变。。本文刊发于ECCV2016
四 关键词
ResNet v2
additive residual function
skip connections
pre-activation
Residual Units
五 论文的主要贡献
分析了残差块背后的传播公式。
提出一种新的残差单元。
从理论上证明为什么残差网络有效。
六 详细解读
1 介绍
和是第l层的输入和输出单元,是残差函数,在原始的ResNet中,是恒等映射,是ReLU函数。
ResNet的核心思想就是学习关于的加性残差函数,一个关键选择就是使用恒等映射。这是通过附加恒等跳跃连接(shortcut)来实现的。
通过聚焦在创建一个用于传播信息的direct path来分析深度残差网络,而不仅仅是残差单元。如果和都是恒等映射,那么信号可以直接从一个单元传递给任意其他单元。
为了理解跳跃连接(skip connections)的本质,分析比较了不同类型的。发现相比scaling,gating,1x1卷积还是恒等映射效果最好,这说明保持一个『clean』的信息通道有助于简化优化。
将激活函数(ReLU,BN)视为权重层的『pre-activation』(和传统的post-activation作为对比),这种视角产生了新的残差单元设计,达到了更好的效果。
2 残差网络分析
和是第l层的输入和输出单元,是残差函数(在v1中是2个3x3卷积层),在原始的ResNet中,是恒等映射,是ReLU函数。
上式有2个非常好的性质
1. 更深单元L的特征$x_{L}$可以被认为是更浅单元l的特征$x_{l}$加上一个$\sum_{i=1}^{L-1}F$形式的残差函数。这意味着模型在任意单元L和l之间都是residual fashion??
2. 对于任意深度单元L,$x_{L}$特征是所有前面残差函数输出的**和**。与之对照,『plain network』的特征$x_{L}$是一系列矩阵向量乘法。$\prod_{i=0}^{L-1}W_{i}x_{0}$(忽略BN和ReLU)
将定义为损失函数,上式是的微分公式,可见有两个加法部分组成,第一项说明信息可以不考虑任意权重层直接传递,另一项通过权重层来传播。第一项保证了信息能直接回传给任意浅层单元l。第二项说明了甚至当权重非常小的时候梯度也不会消失。
上面两个公式从正向和反向传播两个方面说明了信号能直接从任意单元传播给另一个单元。
3 恒等跳跃连接的重要性
从一个简单的修改开始,,这样公式变为
推导的微分公式为
若网络非常深(L很大),当时,这个连乘因子会指数级变大,当时,会指数级缩小并消失。导致优化困难。
如果跳跃连接表示更复杂的变换(例如门和1x1卷积),根据上述微分公式,也会阻碍信息传播并影响训练过程。
在CIFAR-10上做实验都要跑5次,减小随机因素的干扰。
下面开始分析不同的shortcut,结果发现还是原始的a好
Constant scaling
当shortcut的信号缩小时很难优化
Exclusive gating
这个门机制是『Highway Networks』采用的
Shortcut-only gating
为了单独证明门函数对shortcut的影响,这里用非互斥门的机制。当越接近1时,shortcut连接越接近恒等映射,因此结果也越好。
1x1 convolutional shortcut
这个机制已经在ResNet v1中用过了(option C)。当时在ResNet-34中有效,但是在ResNet-110中失效了。
Dropout shortcut
跟乘0.5的constant scaling类似,也阻碍了信息传播
以上在shortcut上的乘法操作(scaling, gating, 1x1 conv, dropout)阻碍了信息传播导致优化困难。所谓弄巧成拙,既然都叫捷径连接了,就不要整那么多花活了。
值得一提的是gating和1x1 conv引入了更多参数,因此相比恒等跳跃连接有更强的表示能力,然而,结果并不好说明这些模型的优化问题导致模型退化,而代替了表示能力的优势。
4 激活函数的用法
重新调整激活函数(ReLU and/or BN)的顺序,看看有什么不一样
用架构为Bottleneck的ResNet-110和ResNet-164在CIFAR-10上做实验。
BN after addition
在这种情况下,由BN和ReLU组成。因为BN层修改了通过shortcut传播的信号,因此阻碍了信息的传播。
ReLU before addition
在这种情况下,会导致非负输出,但直觉上残差函数的取值范围应该是负无穷到正无穷。
Post-activation or pre-activation?
后激活与前激活的区别是通过元素加法区分的。对于有N层的plain网络,它有N-1个激活(BN/ReLU),对它来说至于是前激活还是后激活是无关紧要的。但对于通过加法合并的分支层,激活的位置很重要。
实验证明,把BN和ReLU都放在前置激活效果最好。
前置激活的影响来自两方面:
-
因为是恒等映射,所以更容易优化
当=ReLU时,如果信号是负的则会受影响,特别是当有许多残差单元时,这个影响变得非常大。
当是恒等映射时,信号可以直接在两个单元传递。
-
使用BN作为前置激活提升了模型的正则化
在原始残差单元中,尽管BN归一化了信号,之后就将其与shortcut相加,因此并未归一化合并后的信号。这种未归一化的信号直接作为下一层的输入。
与之相反的是,在前置激活的版本中,所有权重层的输入都被归一化了。
5 实验结果
图放大了,效果变好了。
模型的计算复杂度与深度是线性关系(1001层是100层的10倍)
在CIFAR上,用2块GPU训练ResNet-1000花27个小时
在ImageNet上,用8块GPU训练ResNet-200花3周。。。
6 总结
我们的推导说明恒等捷径连接(identity shortcut connections)和恒等后激活(identity after-addition activation)对于信息平滑传播至关重要。
7 训练配置
7.1 CIFAR
数据增强用translation和flipping。学习率从0.1开始,在32k和48k迭代次数后分别除10。用warm up机制(刚开始用0.01的学习率训练400个迭代,之后回到0.1的学习率)。batch_size为128,在2个GPU上(每个64)。weight decay为1e-4,momentum为0.9,权重初始化用He。
7.2 ImageNet
数据增强用ResNet v1的方法。学习率从0.1开始(没有warm up),在30和60epoch时分别除10。batch_size为256,在8个GPU上(每个32)。weight decay为1e-4,momentum为0.9,权重初始化用He。
七 读后感
先从理论上证明为什么ResNet有效,然后做实验论证,分析各种情况为什么不work,解释理论。
更深的网络更容易过拟合,因为pre-activation有助于减小过拟合,所以在深网络上效果更明显。
这篇文章相比ResNet v1要难,有更多的理论推导部分,不过看得依然很爽,最后的效果还是要通过扎实的实验来说话。
八 补充
这个库用pytorch实现了经典CNN网络 https://github.com/mandeer/Classifier