—— 原文发布于本人的微信公众号“大数据与人工智能Lab”(BigdataAILab),欢迎关注。算法
一提及“深度学习”,天然就联想到它很是显著的特色“深、深、深”(重要的事说三遍),经过很深层次的网络实现准确率很是高的图像识别、语音识别等能力。所以,咱们天然很容易就想到:深的网络通常会比浅的网络效果好,若是要进一步地提高模型的准确率,最直接的方法就是把网络设计得越深越好,这样模型的准确率也就会愈来愈准确。微信
那现实是这样吗?
先看几个经典的图像识别深度学习模型:
这几个模型都是在世界顶级比赛中获奖的著名模型,然而,一看这些模型的网络层次数量,彷佛让人很失望,少则5层,多的也就22层而已,这些世界级模型的网络层级也没有那么深啊,这种也算深度学习吗?为何不把网络层次加到成百上千层呢?网络
带着这个问题,咱们先来看一个实验,对常规的网络(plain network,也称平原网络)直接堆叠不少层次,经对图像识别结果进行检验,训练集、测试集的偏差结果以下图:
从上面两个图能够看出,在网络很深的时候(56层相比20层),模型效果却愈来愈差了(偏差率越高),并非网络越深越好。
经过实验能够发现:随着网络层级的不断增长,模型精度不断获得提高,而当网络层级增长到必定的数目之后,训练精度和测试精度迅速降低,这说明当网络变得很深之后,深度网络就变得更加难以训练了。app
【问题来了】为何随着网络层级越深,模型效果却变差了呢?分布式
下图是一个简单神经网络图,由输入层、隐含层、输出层构成:
回想一下神经网络反向传播的原理,先经过正向传播计算出结果output,而后与样本比较得出偏差值Etotal
根据偏差结果,利用著名的“链式法则”求偏导,使结果偏差反向传播从而得出权重w调整的梯度。下图是输出结果到隐含层的反向传播过程(隐含层到输入层的反向传播过程也是相似):
经过不断迭代,对参数矩阵进行不断调整后,使得输出结果的偏差值更小,使输出结果与事实更加接近。函数
从上面的过程能够看出,神经网络在反向传播过程当中要不断地传播梯度,而当网络层数加深时,梯度在传播过程当中会逐渐消失(假如采用Sigmoid函数,对于幅度为1的信号,每向后传递一层,梯度就衰减为原来的0.25,层数越多,衰减越厉害),致使没法对前面网络层的权重进行有效的调整。oop
那么,如何又能加深网络层数、又能解决梯度消失问题、又能提高模型精度呢?学习
【主角登场】深度残差网络(Deep Residual Network,简称DRN)测试
前面描述了一个实验结果现象,在不断加神经网络的深度时,模型准确率会先上升而后达到饱和,再持续增长深度时则会致使准确率降低,示意图以下:
那么咱们做这样一个假设:假设现有一个比较浅的网络(Shallow Net)已达到了饱和的准确率,这时在它后面再加上几个恒等映射层(Identity mapping,也即y=x,输出等于输入),这样就增长了网络的深度,而且起码偏差不会增长,也即更深的网络不该该带来训练集上偏差的上升。而这里提到的使用恒等映射直接将前一层输出传到后面的思想,即是著名深度残差网络ResNet的灵感来源。大数据
ResNet引入了残差网络结构(residual network),经过这种残差网络结构,能够把网络层弄的很深(听说目前能够达到1000多层),而且最终的分类效果也很是好,残差网络的基本结构以下图所示,很明显,该图是带有跳跃结构的:
残差网络借鉴了高速网络(Highway Network)的跨层连接思想,但对其进行改进(残差项本来是带权值的,但ResNet用恒等映射代替之)。
假定某段神经网络的输入是x,指望输出是H(x),即H(x)是指望的复杂潜在映射,若是是要学习这样的模型,则训练难度会比较大;
回想前面的假设,若是已经学习到较饱和的准确率(或者当发现下层的偏差变大时),那么接下来的学习目标就转变为恒等映射的学习,也就是使输入x近似于输出H(x),以保持在后面的层次中不会形成精度降低。
在上图的残差网络结构图中,经过“shortcut connections(捷径链接)”的方式,直接把输入x传到输出做为初始结果,输出结果为H(x)=F(x)+x,当F(x)=0时,那么H(x)=x,也就是上面所提到的恒等映射。因而,ResNet至关于将学习目标改变了,再也不是学习一个完整的输出,而是目标值H(X)和x的差值,也就是所谓的残差F(x) := H(x)-x,所以,后面的训练目标就是要将残差结果逼近于0,使到随着网络加深,准确率不降低。
这种残差跳跃式的结构,打破了传统的神经网络n-1层的输出只能给n层做为输入的惯例,使某一层的输出能够直接跨过几层做为后面某一层的输入,其意义在于为叠加多层网络而使得整个学习模型的错误率不降反升的难题提供了新的方向。
至此,神经网络的层数能够超越以前的约束,达到几十层、上百层甚至千层,为高级语义特征提取和分类提供了可行性。
下面感觉一下34层的深度残差网络的结构图,是否是很壮观:
从图能够看出,怎么有一些“shortcut connections(捷径链接)”是实线,有一些是虚线,有什么区别呢?
由于通过“shortcut connections(捷径链接)”后,H(x)=F(x)+x,若是F(x)和x的通道相同,则可直接相加,那么通道不一样怎么相加呢。上图中的实线、虚线就是为了区分这两种状况的:
除了上面提到的两层残差学习单元,还有三层的残差学习单元,以下图所示:
两种结构分别针对ResNet34(左图)和ResNet50/101/152(右图),其目的主要就是为了下降参数的数目。左图是两个3x3x256的卷积,参数数目: 3x3x256x256x2 = 1179648,右图是第一个1x1的卷积把256维通道降到64维,而后在最后经过1x1卷积恢复,总体上用的参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,右图的参数数量比左图减小了16.94倍,所以,右图的主要目的就是为了减小参数量,从而减小计算量。
对于常规的ResNet,能够用于34层或者更少的网络中(左图);对于更深的网络(如101层),则使用右图,其目的是减小计算和参数量。
经检验,深度残差网络的确解决了退化问题,以下图所示,左图为平原网络(plain network)网络层次越深(34层)比网络层次浅的(18层)的偏差率更高;右图为残差网络ResNet的网络层次越深(34层)比网络层次浅的(18层)的偏差率更低。
结语
ResNet在ILSVRC2015竞赛中惊艳亮相,一会儿将网络深度提高到152层,将错误率降到了3.57,在图像识别错误率和网络深度方面,比往届比赛有了很是大的提高,ResNet毫无悬念地夺得了ILSVRC2015的第一名。以下图所示:
在ResNet的做者的第二篇相关论文《Identity Mappings in Deep Residual Networks》中,提出了ResNet V2。ResNet V2 和 ResNet V1 的主要区别在于,做者经过研究 ResNet 残差学习单元的传播公式,发现前馈和反馈信号能够直接传输,所以“shortcut connection”(捷径链接)的非线性激活函数(如ReLU)替换为 Identity Mappings。同时,ResNet V2 在每一层中都使用了 Batch Normalization。这样处理后,新的残差学习单元比之前更容易训练且泛化性更强。
墙裂建议
建议仔细阅读下何凯明关于深度残差网络的两篇经典论文,深度残差网络的主要思想即是在这论文中提出来的,值得收藏阅读
《Deep Residual Learning for Image Recognition》(基于深度残差学习的图像识别)
《Identity Mappings in Deep Residual Networks》(深度残差网络中的特征映射)
扫描如下二维码关注本人公众号“大数据与人工智能Lab”(BigdataAILab),而后回复“论文”关键字可在线阅读这两篇经典论文的内容。
推荐相关阅读