机器学习|残差块及ResNet残差网络


文章目录

          • 1 产生背景
          • 2 残差块
          • 3 RestNet

1 产生背景 Question:对神经网络模型添加新的层,充分训练后的模型是否只可能更有效地降低训练误差?
Answer:理论上,原模型解的空间只是新模型解的空间的子空间。也就是说,如果能将新添加的层训练成恒等映射f(x)=x,新模型和原模型将同样有效。由于新模型可能得出更优的解来拟合训练数据集,因此添加层似乎更容易降低训练误差。
【机器学习|残差块及ResNet残差网络】然而在实践中,添加过多的层后训练误差往往不降反升。
针对这一问题,何恺明等人提出了残差网络(ResNet)。
2 残差块 聚焦于神经网络局部。如下图所示,设输入为x。假设我们希望学出的理想映射为f(x),从而作为下图上方激活函数的输入。
左图虚线框中的部分需要直接拟合出该映射f(x),而右图虚线框中的部分则需要拟合出有关恒等映射的残差映射f(x)?x
残差映射在实际中往往更容易优化。以2.1中提到的恒等映射作为我们希望学出的理想映射f(x)。我们只需将下图中右图虚线框内上方的加权运算(如仿射)的权重和偏差参数学成0,那么f(x)即为恒等映射。实际中,当理想映射f(x)极接近于恒等映射时,残差映射也易于捕捉恒等映射的细微波动。下图右图也是ResNet的基础块,即残差块(residual block)。在残差块中,输入可通过跨层的数据线路更快地向前传播。
机器学习|残差块及ResNet残差网络
文章图片

3 RestNet ResNet沿用了VGG全3×3卷积层的设计。残差块里首先有2个有相同输出通道数的3×3卷积层。每个卷积层后接一个批量归一化层和ReLU激活函数。然后我们将输入跳过这两个卷积运算后直接加在最后的ReLU激活函数前。这样的设计要求两个卷积层的输出与输入形状一样,从而可以相加。如果想改变通道数,就需要引入一个额外的1×1卷积层来将输入变换成需要的形状后再做相加运算。

    推荐阅读