深度学习三人行(第12期)----CNN经典网络之ResNet
上一期,我们一起学习了深度学习卷积神经网络中的经典网络之GoogLeNet,
深度学习三人行(第11期)----CNN经典网络之GoogLeNet
接下来我们一起学习下关于CNN中的另一个比较经典的网络ResNet的相关知识,学习的路上我们多多交流,共同进步。本期主要内容如下:
残差学习
ResNet 构成
经典ResNet
小结
ResNet网络是由Kaiming He发展起来的,该网络赢得2015年ILSVRC的冠军,成功的把top-5的错误率降到了惊人的3.6%,用了一个由152层CNN组成的极深的卷积神经网络。这么深的一个网络是怎么能够训练成功的呢?关键是网络中用了skip connections或者叫shortcut connections: 就是将输入到网络中的信号也加到它的输出中去。我们看下为什么这样做是有效的?
一. 残差学习
当我们训练一个网络的时候,我们的目标就是找到一个模型目标函数h(x),使得h(x)能最大程度的匹配输入数据和label之间的映射。但是如果将输入x直接添加到输出中(增加一个skip connection),这样的话,我们的目标函数h(x)就可以转换成f(x)=h(x)-x,这个就叫做残差学习,如下图:
当我们初始化一个一般的网络参数的时候,权重接近于0,所以网络的输出也接近0,如果增加一个skip connection 的话,那么网络的输出将会是输入的一个copy,换句话说,它首先对恒等方程建模,如果目标函数接近恒等函数的话(通常情况下是这样),那么网络训练将会加快。
当然,如果,我们增加很多skip connections,当网络的一些层还没有开始学习的时候,网络其实已经略有成效了。由于skip connections的存在,信号能很容易的通过整个网络。深度残差网络可以看做是由一堆残差块组合而成的,每一个残差块是由一个小网络加上一个skip connection 组成。下图是一般的深度网络和深度残差网络的比较。
其中,左图为一般深度网络,右图为深度残差网络。红色的X表示接近初始状态的一些层,可以看出,在一般深度网络中,一旦出现一个层的接近初始状态的话,那么后面的层都将会处于初始状态,而在深度残差网络中,由于skip connections的存在,一些层接近初始状态并不会影响后面的层。
二. ResNet 构成
现在我们来看一下ResNet的构成,如下图:
其实网络很简单,网络的开始和结尾都很像GoogLeNet(除了dropout层),并且在中间有一堆的残差块,每一个残差块都由两层卷积神经网络组成,如上图,卷积层中用3x3的卷积核,stride为1,padding模式为SAME来保证输出图像的尺寸一致,在每个卷积层后面都会有一个Batch Normalization正则化 和ReLU激活层。
注意到在每隔几个残差块,特征图的数量都会翻倍,同时特征图的宽高会减半(stride=2),那么问题来了,由于特征图的shape不同,我们就不能将残差块的输入直接加到残差块的输出上了(上图中红色虚箭头所示),该怎么解决呢?
为了解决这个问题,我们得将这个加载到残差块输出的输入稍微通过一个1x1的卷积层(stride=2)修改一下shape,来保证输入和输出的尺寸一致。这样就可以直接叠加到残差块的输出上了。如下图:
三. 经典残差网络
了解完上面残差网络的构成,我们来看一下一些常见的残差网络,我们知道,中间的残差块可以堆叠很多个,但是到底该堆叠多少个呢?这个没有一个标准的答案,只有最适合具体项目的网络。
ResNet-34顾名思义,该网络中一共有34层(只算卷积层和全连接层),包括有64个特征图的3个残差块,有128个特征图的4个残差块,256个特征图的6个残差块以及512个特征图的3个残差块。抽空可以敲个代码试试这个网络的效果。
ResNet-152,该网络一共有152层(同样只算卷积层和全连接层),该网络对上面的残差块稍微有些不同,如下图:
上图左侧的残差块是我们刚才学过的残差块,ResNet-152中的残差块是上图右侧的残差块,其中首先是一个有64(输入的1/4)个特征图的1x1卷积层(之前讨论的瓶颈层),接着是一个64个特征图的3x3卷积层,最后又是一个1x1的卷积层,该层有256个特征图,用来恢复原始深度。
ResNet-152网络包括256特征图的3个残差块,512特征图的8个残差块,1024张特征图的36个残差块和最后的2048张特征图的3的残差块。
正如我们看到的一样,这个领域在快速发展,每年都会有新的网络推出,一个很明显的趋势就是网络的深度在逐渐加深,并且逐渐在轻量化,所需要的参数越来越少。无疑在ILSVRC中,残差网络目前是最强大的网络,但是,应该保持关注该比赛!2016年赢得该比赛冠军的是来自中国的Trimps-Soushen团队,他们把错误率降到了2.99%。获得这样的战绩是因为他们把之前训练的模型做了一个集成。
当然,还有一些其他很好的网络,比如:VGGNet,Inception-v4等网络,感兴趣的话可以自行研究研究。
四. 小结
今天,我们一起学习了卷积神经网络的经典框架深度残差网络,其中包括残差学习,残差块的构建,深度残差网络的构建,以及经典的残差模型,希望本期的知识能够对我们有所帮助,在学习的路上,我们共同进步,多谢有你。
(如需更好的了解相关知识,欢迎加入智能算法社区,在“智能算法”公众号发送“社区”,即可加入算法微信群和QQ群)