【深度学习】残差网络Resnet重点问题解读

1.残差网络解决的问题:

  • 可以加深网络层数,避免了由于层数过多反而导致错误率上升的问题(并不是由过拟合造成的,而是由于梯度消失或者梯度爆炸、退化问题)
  • 使用BatchNormalization加速训练(丢弃了传统的dropout)

2.残差块中的虚线shortcut:
实线与虚线的不同在于,虚线部分的x(shortcut)和y(主分支)的维度不同。
【深度学习】残差网络Resnet重点问题解读
我们拿34-layers的Resnet来说
【深度学习】残差网络Resnet重点问题解读
在何凯明的原论文中有这样一个表格,为5种深度的残差网络的层结构,其中x2、x3表示每个con_v中有两个、三个这样的残差块。
【深度学习】残差网络Resnet重点问题解读
【深度学习】残差网络Resnet重点问题解读
对于34-layers的残差网络的层结构,112x112的图像通过尺寸为7x7、深度为64、步长为2的卷积层得到的是56x56x64大小的feature map,再通过3x3、步长为2的最大池化层得到的是28x28x64的feature map。
【深度学习】残差网络Resnet重点问题解读
在conv2_x的第一个残差块中,由于卷积层的滤波器步长均为1,所以主分支最后得到的维度与shortcut的维度一致。conv2_x最终输出的维度为28x28x64。
【深度学习】残差网络Resnet重点问题解读
上图为conv3_x的第一个残差块,我们发现其主分支的维度与shortcut的维度并不一致,为此,shortcut必须经过一层卷积层才能达到与主分支相同的维度,即如下所示:
【深度学习】残差网络Resnet重点问题解读
即shortcut通过过滤器尺寸为1x1、深度为128、步长为2的卷积层实现与主分支维度相同的操作。对于conv3_x剩余的残差块,由于卷积层步长均为1,且深度为128,所以剩余残差块的主分支与shortcut的维度均一致。conv4_x、conv5_x的残差块的操作与conv3_x都是一样的,这里不再赘述。
对于50-layers的层结构与34-layers的略有不同,其残差块由三部分组成:
【深度学习】残差网络Resnet重点问题解读
1x1x64卷积层对输入进行降维,1x1x256卷积层则进行升维,中间的3x3x64卷积层使得输出具有更小的维度(并不是指通道数),当主分支与shortcut的维度不一致时,3x3x64作为下采样,其步长变为2。

3.卷积层最好不要设置偏置项,否则经过BatchNormalization后的结果与没有偏置项的结果一样,同时还增加卷积层的训练参数:
【深度学习】残差网络Resnet重点问题解读

加入偏置项b后上述公式可改写为以下形式:
【深度学习】残差网络Resnet重点问题解读
由此可见,偏置项加与不加对于BatchNormalization的结果而言都是相同的。