深度网络解析之-ResNet

 

ResNet:   (参考:ResNet解析)

  • 随着网络的加深,出现了训练集准确率下降的现象,这不是由于Overfit过拟合造成的 (过拟合的情况训练集应该准确率很高) ,故此引入深度残差网络;
  • ResNet提出了两种mapping:一种是identity mapping  x 部分,指的就是图中”弯弯的曲线”,另一种residual mapping F(x) 残差部分,指的就是除了”弯弯的曲线“那部分,所以最后的输出是 y = f(x) + x
  • 如果继续加深网络,Resnet提供上述两种选择方式,如果网络已经到达最优residual mapping将被push为0只剩下identity mapping,这样理论上网络一直处于最优状态了,网络的性能也就不会随着深度增加而降低了。
  • 使用了一种叫做 “shortcut connection” 的连接方式 (即图中弧线)

      深度网络解析之-ResNet_第1张图片

 

Building Block:

  • 下图两种结构分别针对ResNet34(左图)和ResNet50/101/152(右图),整个结构为一个”building block“。右图又称为”bottleneck design”,目的是为了降低参数的数目和计算量:
  • 第一个1x1的卷积把256维channel降到64维,在最后通过1x1卷积恢复,参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的话就是两个3x3x256的卷积,参数数目: 3x3x256x256x2 = 1179648,差了16.94倍。 
  • 对于常规ResNet,可以用于34层或者更少的网络中,对于Bottleneck Design的ResNet通常用于更深的如101这样的网络中。

        深度网络解析之-ResNet_第2张图片

其他:

  • 如果 F(x) 和 x 的 channel 不相同,则输出变为 y=F(x) + Wx,其中W是新的映射(projection shortcut),一般采用1x1的卷积; 或者用 Zero Padding 增加维度,此时一般要先做一个down sampling,可以采用strde=2的pooling;
  •  没有pooling层,通过 stride=2 的卷积控制特征图尺寸;
  • 用global average pool层替换了全连接层;
  • ResNet的一个重要设计原则是:当feature map大小降低一半时,featuremap的数量增加一倍,这保持了网络层的复杂度。
  • ResNet50 和 ResNet101 网络都分成5部分:conv1,conv2_x,conv3_x,conv4_x,conv5_x,其区别在于conv4_x,ResNet50有6个building block,而ResNet101有23个building block,差了17个block,即17 x 3 = 51层。(层数仅指卷积层和全连接层)
  • 残差学习需要学习的内容少,学习相对更容易,依据链式求导反向传播误差,可得不会出现梯度消失:

       ResNet中有很多跨层连接结构 \frac{\partial loss}{\partial x_1} = \frac{\partial loss}{\partial x_L}\cdot \frac{\partial x_L}{\partial x_l} = \frac{\partial loss}{\partial x_L}\cdot (1+\frac{\partial}{\partial x_L} \sum^{L-1}_{i=1} F(x_i, W_i)),小括号中的1表明短路机制可以无损地传播梯度,而另外一项残差梯度则需要经过带有weights的层,梯度不是直接传递过来的。残差梯度不会那么巧全为-1,而且就算其比较小,有1的存在也不会导致梯度消失,所以残差学习会相对容易。

你可能感兴趣的:(深度网络解析之-ResNet)