深度学习经典论文(六)ResNet

注:借鉴整理,仅供自学,侵删

DRN

1 提出背景

我们知道,网络越深,咱们能获取的信息越多,而且特征也越丰富。但是根据实验表明,随着网络的加深,优化效果反而越差,测试数据和训练数据的准确率反而降低了。这是由于网络的加深会造成梯度爆炸和梯度消失的问题。目前针对这种现象已经有了解决的方法:对输入数据和中间层的数据进行归一化操作,这种方法可以保证网络在反向传播中采用随机梯度下降(SGD),从而让网络达到收敛。但是,这个方法仅对几十层的网络有用,当网络再往深处走的时候,这种方法就无用武之地了。
另一个问题,就是退化问题。网络层数增加,但是在训练集上的准确率却饱和甚至下降了。

2 学习残差

其设计的目的是解决深度网络的退化问题。在不知道多深的网络比较合适的情况下,按照现有研究,增加深度对于模型学习是有帮助的,所以需要加很深,但是太深就会有退化。解决办法是让多余的层变为恒等映射。直接让一些层去拟合一个潜在的恒等映射函数H(x) = x,比较困难,这可能就是深层网络难以训练的原因。但是,如果把网络设计为H(x) = F(x) + x,可以转换为学习一个残差函数F(x) = H(x) - x. 只要F(x)=0,就构成了一个恒等映射H(x) = x。因此,可以说是在学习残差。简单来说,在进行恒等映射的回收,学习残差比学习原来的映射函数要简单。

3 一些见解

F是求和前网络映射,H是从输入到求和后的网络映射。比如把5映射到5.1,那么引入残差前是F’(5)=5.1,引入残差后是H(5)=5.1, H(5)=F(5)+5, F(5)=0.1。这里的F’和F都表示网络参数映射,引入残差后的映射对输出的变化更敏感。比如s输出从5.1变到5.2,映射F’的输出增加了1/51=2%,而对于残差结构输出从5.1到5.2,映射F是从0.1到0.2,增加了100%。明显后者输出变化对权重的调整作用更大,所以效果更好残差的思想都是去掉相同的主体部分,从而突出微小的变化,看到残差网络我第一反应就是差分放大器。

至于为何shortcut的输入时X,而不是X/2或是其他形式。kaiming大神的另一篇文章[2]中探讨了这个问题,对以下6种结构的残差结构进行实验比较,shortcut是X/2的就是第二种,结果发现还是第一种效果好啊(摊手)。

redidual模块会明显减小模块中参数的值从而让网络中的参数对反向传导的损失值有更敏感的响应能力,虽然根本上没有解决回传的损失小得问题,但是却让参数减小,相对而言增加了回传损失的效果,也产生了一定的正则化作用。所谓反向传播就是网络输出一个值,然后与真实值做比较得到一个误差损失,同时将这个损失做差改变参数,返回的损失大小取决于原来的损失和梯度,既然目的是为了改变参数,而问题是改变参数的力度过小,则可以减小参数的值,使损失对参数改变的力度相对更大。

4 灵感来源

假设现有一个比较浅的网络(Shallow Net)已达到了饱和的准确率,这时在它后面再加上几个恒等映射层(Identity mapping,也即y=x,输出等于输入),这样就增加了网络的深度,并且起码误差不会增加,也即更深的网络不应该带来训练集上误差的上升。而这里提到的使用恒等映射直接将前一层输出传到后面的思想,便是著名深度残差网络ResNet的灵感来源。

很明显,将网络的输出优化为0比将其做一个恒等变换要容易得多。

5 网络结构

实线的Connection部分,表示通道相同,采用计算方式为H(x)=F(x)+x
虚线的的Connection部分,表示通道不同,采用的计算方式为H(x)=F(x)+Wx,其中W是卷积操作,用来调整x维度的,具体的实现是卷积的步长设置为2。

值得注意的是,作者在使用的网络中每个conv层之后激活之前都使用了Batch normalization层没有加入dropout层,同时使用全局平均池化层代替全连接层,从而减少参数模型的大小

注意relu激活函数使用位置!
在这里插入图片描述
针对快捷连接部分:
无参数恒等快捷连接对于瓶颈架构尤为重要,使用0填充时,可以保证模型的复杂度最低,这对于更深的网络是更加有利的

针对非快捷部分:
两种结构分别针对ResNet34(左图)和ResNet50/101/152(右图),其目的主要就是为了降低参数的数目。左图是两个3x3x256的卷积,参数数目: 3x3x256x256x2 = 1179648,右图是第一个1x1的卷积把256维通道降到64维,然后在最后通过1x1卷积恢复,整体上用的参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,右图的参数数量比左图减少了16.94倍,因此,右图的主要目的就是为了减少参数量,从而减少计算量。
对于常规的ResNet,可以用于34层或者更少的网络中(左图);对于更深的网络(如101层),则使用右图,其目的是减少计算和参数量。

1*1的卷积核不会带来信息损失,又减小了下一层卷积的计算量

6 恒等快捷连接和投影快捷连接的效果评估

我们已经表明没有参数,恒等快捷连接有助于训练。接下来我们调查投影快捷连接

shortcuts的映射方法进行了实验,有三种做法
(A)新增的维度采用初始化为0的feature maps快捷连接,原来的保持不变(仅在几个维度不统一的地方进行);
(B)对于要增加维度的快捷连接情况下,采用1x1卷积层映射将维度增加(仅在几个维度不统一的地方进行);
(C)对于所有快捷连接情况,都用1x1的卷积层进行映射(不管维度是否统一,都采用卷积映射)。
效果是C>B>A,但是差距不大,然而C相比B占用更多的计算资源,同时参数相比B也有很大的增加,为了考虑到模型的参数大小,内存和时间复杂度的问题,在后续的实验中,作者没有考虑C方法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值