常规废话环节
? ? ? ? 这篇是接触深度学习后读的第一篇论文,就像上篇博客结尾说的,这是个很厉害的东西。文中介绍的是2015 ImageNet中分类任务的冠军——MSRA何凯明团队的Residual Networks,这篇论文也是2016年CVPR最佳论文。当然,关于这方面的东西不过多提,还是很推荐阅读原作,虽然对于一个英语渣来说很困难。
?1、Motivations
? ? ? ? 介绍一下正文,作者首先抛出了一个问题:深度神经网络越深越好吗?
? ? ? ? 按照定义来看,网络随着深度的增加,不断地去学习,只要不出现梯度消失/梯度爆炸,而且不出现过拟合,那么网络越深,最后的输出应该越接近我们的预期值。
? ? ? ? 但是随着网络的加深,却出现了退化(degradation)现象。即网络加深了,精度却下降了,而且不是由过拟合引起的。如下图:
? ? ? ? ?图中很明显的可以看到,随着精度的加深,56层网络error反而比20层网络还要高,这是不合理的。理论上,可以训练一个 shallower 网络,然后在这个训练好的 shallower 网络上堆几层?identity mapping(恒等映射) 的层,即输出等于输入的层,构建出一个 deeper 网络。这两个网络(shallower 和 deeper)得到的结果应该是一模一样的,因为堆上去的层都是 identity mapping。这样可以得出一个结论:理论上,在训练集上,Deeper 不应该比 shallower 差,即越深的网络不会比浅层的网络效果差。
? ? ? ? 文中也提出了原因:随着网络越来越深,训练变得原来越难,网络的优化变得越来越难。理论上,越深的网络,效果应该更好;但实际上,由于训练难度,过深的网络会产生退化问题,效果反而不如相对较浅的网络。
? ? ? ? 本文提出的残差网络(Residual Networks)则解决了这个问题。
2、Residual Networks
? ? ? ? 文中引入残差网络结构,即在输入与输出之间(称为堆积层)引入一个前向反馈的shortcut connection,这有点类似与电路中的“短路”,也是上面提到identity mapping(恒等映射,即输入=输出)。原来的网络是学习输入到输出的映射H(x),而残差网络学习的是F(x)=H(x)?x。残差学习的结构如下图所示:
? ? ? ? 残差网络通过加入 shortcut connections,变得更加容易被优化。包含一个 shortcut connection 的几层网络被称为一个残差块,即上图所示结构。如图所示,x表示输入,,代表relu激活函数,则最后输出为。
? ? ? ? 那么这个结构为什么优化相对更容易呢?当没有 shortcut connection 时,残差块就是一个普通的 2 层网络。残差块中的网络可以是全连接层,也可以是卷积层。若第二层网络在激活函数之前的输出为?H(x)。假设极端情况:在该 2 层网络中,最优的输出就是输入的x,那么对于没有 shortcut connection 的网络,就需要将其优化成?H(x)=x;对于残差块来说,如果最优输出是?x,则只需要将?F(x)=H(x)?x优化为 0 即可。那么将残差优化到0比通过一个堆叠的非线性层去拟合一个恒等映射要容易得多。
3、网络结构
? ? ? ? ?上图最右侧就是一个残差网络的结构,残差网络和中间部分的 plain network 唯一的区别就是 shortcut connections。针对虚线部分的 shortcut connections,尺寸变化处理,有三种选择:
- zero-padding shortcuts。快捷连接仍然使用恒等映射,对不足的特征维数直接进行补零。
- projection shortcuts。利用1x1卷积核进行升降维匹配尺寸。其他的shortcut都是恒等映射(identity mapping)类型。
- 所有的shortcuts都使用projection shortcuts
4、深度瓶颈架构
????????减少训练时间,改为一种瓶颈设计。对于每个残差函数F,将2层结构改为3层,先用1x1压缩通道数目以减少计算量,3x3进行卷积,再用1x1进行升维,带来更高的效率。而图左因为该快捷连接连到了两个高维端,耗费太多时间。
5、实现
? ? ? ? ?这里直接粘上论文的原文,另外从大佬博客里偷到的翻译:
? ? ? ? 本来这篇博客昨天应该就写完发出来的,但是这两天感冒了昨天顶不住先回去睡觉了,今天早上吃了药昏昏沉沉了一整天,百度一查果然吃的药有嗜睡的副作用,淦。从早上晨会开始到晚上,盯着电脑脑袋就发昏,看不进去东西,明天早上不可能再吃了,摸了一天鱼,真香。(逃。
?
|