Resnet 学习笔记

目标

深度学习网络的深度对最后的分类和识别的效果有着很大的影响,所以一般把网络设计的越深效果越好,但是事实上却不是这样,常规的网络的堆叠(plain network)在网络很深的时候,效果却越来越差了。这里的效果差不是单指在测试集上的效果差,而是在训练集和测试集上的效果都变差。

产生这种问题的原因之一即是网络越深,梯度消失的现象就越来越明显,网络的训练效果也不会很好。但是现在浅层的网络(shallower network)又无法明显提升网络的识别效果了,所以 Resnet(残差网络)的目标是在网络深度加深的情况下解决梯度消失的问题。

方法

常规的神经网络结构如上图所示。

ResNet 引入了残差网络结构(residual network),通过残差网络,可以把网络层弄的很深,据说可以达到了1000多层,最终的网络分类的效果也是非常好,残差网络的基本结构如上图所示。

通过增加一个恒等映射(identity mapping),同时在输出个输入之间引入一个 shortcut connection,而不是简单的堆叠网络。将原始所需要学习的函数 H(x) 转换成 F(x) + x。这样可以解决网络由于很深出现梯度消失的问题,从而可以把网络做的很深,ResNet 其中一个网络结构如下图所示:

Resnet 网络结构的基本设计方案 — VGG-style:

  1. 所有的3x3卷积层(几乎所有)
  2. 空间规模/2 => #过滤器x2 (~每一层的复杂度相同)
  3. 简约的设计风格

训练方法:

  1. 所有的平原/残差网络都是从头开始训练的。

  2. 所有的平原/残差网络都运用组归一化(Batch Normalization)。

  3. 标准化的超参数&增强。

论文中介绍了一个深层次的残差学习框架来解决精准度下降问题。并且明确地让这些层适合残差映射,而不是寄希望于每一个堆叠层直接适合一个所需的底层映射。形式上,把 H(x) 作为所需的基本映射,让堆叠的非线性层适合另一个映射 F(x) := H(x) - x。

公式 F(x) + x 可以通过 shortcut 前馈神经网络实现。shortcut 是那些跳过中的一层或更多层。在我们的情景中,shortcut 简单的执行身份映射,并将它们的输出添加到叠加层的输出。身份快捷连接添加既不产生额外的参数,也会增加不计算的复杂度。通过反向传播的SGD,整个网络仍然可以被训练成终端到端的形式。

理解

残差网络的精美之处在于那个 shortcut 的设计。

增加一个恒等映射这一步,将原始所需要学的函数 H(x) 转换成 F(x) + x。论文认为这两种表达的效果是相同的,但是优化的难度却并不相同。

首先作者假设 F(x) 的优化会比H(x)简单的多。这一想法也是源于图像处理中的残差向量编码,通过一个 reformulation,将一个问题分解成多个尺度直接的残差问题,能够很好的起到优化训练的效果。

这个 Residual block 通过 shortcut connection 实现,通过 shortcut 将这个 block 的输入和输出进行一个 element-wise 的加叠,这个简单的加法并不会给网络增加额外的参数和计算量,同时却可以大大增加模型的训练速度、提高训练效果,并且当模型的层数加深时,这个简单的结构能够很好的解决退化问题。

残差网络也可以从另一个角度来理解,如上图所示。

残差网络单元其中可以分解成右边的形式,从图中可以看出,残差网络其实是由多种路径组合的一个网络,即,残差网络其实是很多并行子网络的组合,整个残差网络其实相当于一个多人投票系统(Ensembling)。

为了证明,如果删除残差网络的一部分

如果把残差网络理解成一个Ensambling系统,那么网络的一部分就相当于少一些投票的人,如果只是删除一个基本的残差单元,对最后的分类结果应该影响很小;而最后的分类错误率应该是和删除的残差单元的个数成正比的,这个结论也被学者实验证明。