论文:2015 ResNet-Deep Residual Learning for Image Recognition
首先需要明确一点,Resnet提出的基于一个重要的假设:越深的网络应具备更好的学习能力。
一、引出问题
基于这个假设,那么问题来了,我们用全连接网络,不断地堆叠卷积层和池化层不就形成超深的网络了吗?
答案是否定的,请看下图,下面两张图片,就是通过不断堆叠卷积层和池化层分别形成的56层的网络以及20层网络的训练集错误率以及测试集的错误率的对比图。可以很明显的看到,如果仅仅是通过不断地堆叠卷积层和池化层形成的超深网络,甚至比浅层网络的效果要差。
这是为什么呢?原因主要是有两个。
第一,梯度消失和梯度爆炸的问题。
假设每一层的误差梯度是一个小于1的数,那么在我们反向传播的过程中,由于每向前传播一层,都要乘以一个小于1的误差梯度,那么当我们的网络的深度越来越深的时候,就会使得梯度越来越小直到梯度消失。反过来,假设每一层的误差梯度是一个大于1的数,那么在我们反向传播的过程中,由于每向前传播一层,都要乘以一个大于1的误差梯度,那么当我们的网络的深度越来越深的时候,就会使得梯度越来越大直到梯度爆炸。 解决办法:Batch Normalization算法
第二,退化的问题。
退化问题指的是,哪怕我们解决了梯度消失和梯度爆炸的问题之后,我们还是存在随着网络层数的加深,网络预测效果不增反降。解决办法:加入残差结构
二、Resnet网络
这是应用了残差结构之后,20层网络和110层网络的错误率对比图,可以明显地看到,在应用了作者所提出的残差结构之后,深度网络比浅层网络具有更好地预测效果,符合基本假设。
那么到底什么是残差结构呢?如下图所示,其实就是在原来的网络的基础上在右边加上一个“小尾巴”shortcut
下图是不同层数的残差网络
下图是对上表34层,有残差结构以及无残差结构的对比图。那么上表中画红色圆圈的到底是什么东东呢?数字代表的是该层有多少个残差结构,x3就是代表有3个shortcut。细心的小伙伴可能会发现,下图中的shortcut为什么有些事实线,有些是虚线呢?这是因为,上一层所输出的矩阵的shape(也就是矩阵的大小)不符合下一层所需要的矩阵的shape的需求,因此在输入到下一层之前,需要先用1x1的卷积层进行升