【图书推荐】《PyTorch深度学习与企业级项目实战》-CSDN博客
《PyTorch深度学习与企业级项目实战(人工智能技术丛书)》(宋立桓,宋立林)【摘要 书评 试读】- 京东图书 (jd.com)
卷积神经网络经典模型架构简介-CSDN博客
深度残差网络(Deep Residual Network,ResNet)的提出是CNN图像史上的一件里程碑事件,如图4-20所示,ResNet在ILSVRC和COCO 2015上的战绩,ResNet取得了5项第一,并又一次刷新了CNN模型在ImageNet上的历史。
图4-20
ResNet为什么会有如此优异的表现呢?其实ResNet解决了深度卷积神经网络模型难训练的问题, ResNet多达152层,和VGG在网络深度上完全不在一个量级上,所以第一眼看这个图,肯定会觉得ResNet是靠深度取胜的。事实当然是这样,但是ResNet还有架构上的技巧,这才使得网络的深度发挥出作用,这个技巧就是残差学习(Residual Learning)。
从经验来看,网络的深度对模型的性能至关重要,当增加网络层数后,网络可以进行更加复杂的特征模式的提取,所以当模型更深时,理论上可以取得更好的结果。但是更深的网络的性能一定会更好吗?实验发现深度网络出现了退化问题(Degradation Problem),即网络深度增加时,网络准确度出现饱和,甚至出现下降。
如图4-21所示,深层网络表现得竟然还不如浅层网络好,越深的网络越难以训练,56层网络比20层网络效果还要差。原因不会是过拟合问题,因为56层网络的训练误差同样高。我们知道深层网络存在着梯度消失或者爆炸的问题,这使得深度学习模型很难训练。
图4-21
当网络退化时,浅层网络能够达到比深层网络更好的训练效果,这时如果把低层的特征传到高层,那么效果应该至少不比浅层的网络效果差,或者说如果一个VGG-100网络在第98层使用的是和VGG-16第14层一模一样的特征,那么VGG-100的效果应该会和VGG-16的效果相同。但是实验结果表明,VGG-100网络的训练和测试误差比VGG-16网络更大。也就是说,我们不得不承认是目前的训练方法有问题,才使得深层网络很难找到一个好的参数。
想想看,深层网络表现得不如浅层网络是没有道理的,一个56层的网络,只用前20层,后面36层不干活,最起码性能应该达到和一个20层网络同等水平吧。所以,肯定有方法使得更深层的网络达到或者超过浅层网络的效果。那ResNet是如何解决这个问题的呢?它采用了一种“短路”的
结构,网络的一层通常可以看做y=H(x),而残差网络的一个残差块为:H(x)=F(x)+x,则F(x)=H(x)-x,而y=x是观测值,H(x)是预测值,所以H(x)-x即为残差,也即F(x)是残差,故称残差网络。
通过这样的方式,原始信号可以跳过一部分网络层,直接在更深的网络层传递。从直觉上来看,深层神经网络之所以难以训练,就是因为原始信号x在网络层中传递时,越来越失真,而这种“短路”结构使得原始信号直接传入神经网络的深层,避免了信号失真,这样一来便极大地加快了神经网络训练时的效率。
34层的深度残差网络的结构图如图4-23所示。通过Shortcut Connections(捷径连接)的方式,ResNet相当于将学习目标改变了,不再是学习一个完整的输出,而是目标值H(x)和x的差值,也就是所谓的残差,因此,后面的训练目标就要将残差结果逼近于0,使得随着网络加深,准确率不下降。
这里图4-23中有一些捷径连接是实线,有一些是虚线,有什么区别呢?因为经过捷径连接后,H(x)=F(x)+x,如果F(x)和x的通道相同,则可直接相加,那么通道不同怎么相加呢?
图4-23中的实线、虚线是为了区分以下两种情况:
实线的Connection部分,表示通道相同,如图4-23的第一个粉色矩形和第三个粉色矩形,都是3×3×64的特征图,由于通道相同,因此采用的计算方式为H(x)=F(x)+x。
虚线的Connection部分,表示通道不同,如图4-23的第一个绿色矩形和第三个绿色矩形,分别是3×3×64和3×3×128的特征图,通道不同,采用的计算方式为H(x)=F(x)+Wx,其中W是卷积操作,用来调整的x维度。
图4-23
经检验,深度残差网络的确解决了退化问题,如图4-24所示,左图为普通网络(Plain Network),网络层次深的(34层)比网络层次浅的(18层)误差率更高;右图为残差网络,ResNet的网络层次深的(34层)比网络层次浅的(18层)误差率更低。对比18-layer和34-layer的网络效果,可以看到普通的网络出现退化现象,但是ResNet很好地解决了退化问题。
图4-24
自从AlexNet在LSVRC2012分类比赛中取得胜利之后,深度残差网络(Deep Residual Network)可以说成为过去几年中在计算机视觉、深度学习社区领域中最具突破性的成果。ResNet可以实现高达数百甚至数千个层的训练,且仍能获得超赞的性能。这种残差跳跃式的结构打破了传统的神经网络n-1层的输出只能给n层作为输入的惯例,使某一层的输出可以直接跨过几层作为后面某一层的输入,其意义在于为叠加多层网络而使得整个学习模型的错误率不降反升的难题提供了新的方向。至此,神经网络的层数可以超越之前的约束,达到几十层、上百层甚至上千层,为高级语义特征提取和分类提供了可行性。