ResNet先导 1.论文论文题目Deep Residual Learning for Image Recognition作者 Kaiming He Xiangyu Zhang Shaoqing Ren Jian Sun核心思想残差学习在传统的方式中让几层非线性层直接拟合目标映射 H(x)而残差的方式为让这些层拟合残差映射F(x)H(x)−x则最终输出为yF(x)x。论文中比较关键的一段话The degradation (of training accuracy) indicates that not all systems are similarly easy to optimize. Let us consider a shallower architecture and its deeper counterpart that adds more layers onto it. There exists a solution by construction to the deeper model: the added layers are identity mapping, and the other layers are copied from the learned shallower model. The existence of this constructed solution indicates that a deeper model should produce no higher training error than its shallower counterpart. But experiments show that our current solvers on hand are unable to find solutions that are comparably good or better than the constructed solution (or unable to do so in feasible time).翻译为训练精度的退化现象表明并非所有系统都同样容易优化。让我们考虑一个较浅的网络架构以及在其基础上添加更多层所得到的更深网络。对于这个更深模型通过构造的方式是存在一个解只需将新增的层设为恒等映射即输出等于输入而其他层则直接复制已训练好的浅层模型的参数。这个构造解的存在说明深层模型的训练误差在理论上不应高于其浅层对应物。然而实验结果表明我们现有的优化求解器无法找到与这个构造解相当或更好的解或者说无法在可行的时间内做到这一点。从这段看出需要新的方法来优化即上文的残差学习。2.ResNet2.1 Batch NormalizationBatch Normalization 是在每一层的输入上做一个归一化操作让数据分布更稳定从而让梯度下降更顺畅。为什么要用Batch Normalization?因为在深度网络中每一层的输入分布会随着前一层参数的变化而不断变化。这就导致1.每一层都需要不断适应前一层输出的分布变化。2.训练过程不稳定。3.需要更小的学习率、更细致的初始化。而传统方法例如 Dropout 等正则化手段使用较小的学习率等不能根本解决这一问题这就需要Batch Normalization对每个 mini-batch 的数据进行归一化使用了Batch Normalization的好处在于1.加速训练。2.缓解梯度消失/爆炸。3.降低对初始化的依赖。4.允许使用饱和激活函数。2.2 残差块ResNet沿用了VGG完整的3×3卷积层设计。残差块里首先有2个有相同输出通道数的3×3卷积 层。每个卷积层后接一个批量规范化层和ReLU 激活函数。2.2.1 残差块网络参数输入数据x为224×224×3三通道的图像。1输入为224×224×3卷积核数量为64个卷积核的尺寸大小为3×3×3步幅为1填充为1 卷积后得到shape为224×224×64的特征图输出。2输入为224×224×64将输入的特征图经过批量规范化然后经过ReLU激活函数进行激活。输出的特征图大小形状不变为224×224×64。3输入为224×224×64卷积核数量为3个卷积核的尺寸大小为3×3×64步幅为1填充为1 卷积后得到shape为224×224×3的特征图输出。4输入为224×224×3将输入的特征图经过批量规范化。输出的特征图大小形状不变为224×224×3。5此时残差结构需要输出特征图之前将经过上述1、 2、3、4操作的输出特征图和一开始的输入x进行 相加操作因为x的大小为224×224×3经过1、2、 3、4操作的输出特征图大小为224×224×3这两个特征图的高宽和通道数一样因此此时就不需要利用1×1的卷积核 对输出x的通道进行改变可以直接进行相加即可。2.3 ResNet网络结构