文章目录
-
-
-
-
- 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)。在残差块中,输入可通过跨层的数据线路更快地向前传播。文章图片
3 RestNet ResNet沿用了VGG全
3×3卷积层
的设计。残差块里首先有2个有相同输出通道数的3×3卷积层
。每个卷积层后接一个批量归一化层和ReLU激活函数。然后我们将输入跳过这两个卷积运算后直接加在最后的ReLU激活函数前。这样的设计要求两个卷积层的输出与输入形状一样,从而可以相加。如果想改变通道数,就需要引入一个额外的1×1卷积层
来将输入变换成需要的形状后再做相加运算。推荐阅读
- 动手学习深度学习|《动手学深度学习》Task04(机器翻译及相关技术+注意力机制与Seq2seq模型+Transformer)
- 深度学习|基于深度学习的视觉三维重建研究总结2进阶
- Python|用反向传播学习识别mnist手写数字(mini-batch版)
- pytorch|Pytorch全连接层神经网络(基于MNIST数据集的手写数字识别)
- Machine|Paper Notes: Cross-Domain Image Translation Based on GAN
- 深度学习|草图转换网络(SketchyGAN 和 style2paints)
- 大数据|python自然语言处理库_8个出色的Python库用于自然语言处理
- 手把手写深度学习|手把手写深度学习(10)(用Pix2Pix GANs实现sketch-to-image跨模态任务(理论基础))
- 计算机视觉|Opencv 基于C++识别绿灯