当类似VGG结构的网络层数过深的时候会产生退化,如下图所示,56层的网络效果要比20层的差,ResNet的提出就是解决退化问题,继续加深网络层数。
ResNet的基本思想是将原来一层一层堆叠在一起的网络结构变换成一种新的结构,这个结构如下所示
右部的含义是直接将输入按照原样映射到输出,左部分就和VGG一样是堆叠的卷积层等,新的网络结构可以这样去理解,假设原来的网络不包含左部分,仅包含右部分,这可以理解为一个较浅的网络,这个时候加入z左部分,整个网络的深度可以认为“没有加深”,而是在右部分直接映射的基础上增加了学习能力(因为网络参数更多,可以认为学习到了更多的信息),这样左右结合网络的学习能力就不会比仅有右部分的网络差。
这同样也可以换一个角度,用公式化的方式去理解,假设我们需要上述左右结合网络将输入x映射为H(x),右部分是直接映射为x,那么左部分需要映射的值为F(x)=H(x)-x,作者认为通过训练网络学习残差F(x)要比学习H(x)简单,通过一个极端的例子:假如我们需要学习的H(x)就是输入到输出直接映射( H(x)=x ),那么左部分堆叠的网络层可以直接置0( F(x)=0 ),如果需要这种堆叠的网络层去学习直接映射的话是很困难的,因为激活函数会导致非线性(sigmoid激活函数)。
作者在数据集上做了测试,测试结果验证了实验假设,残差网络确实是一种更有效的模型。
作者为了减少模型的训练时间,提出了一种"bottleneck"结构,如下所示:
作者将原来两层的堆叠结构变换成了三层的堆叠结构,其中右部分的11的卷积层是为了扩大和缩小channel数量,这为中间33的卷积层减少了参数数量(减少了输入和输出的channel数量)。左部分的参数数量为3 * 3 * 64 * 64 + 3 * 3 * 64 * 64,右部分的参数数量为1 * 1 * 256 * 64 + 3 * 3 * 64 * 64 + 1 * 1 * 64 * 256,经过计算后可以得知右部分的参数数量和左部分比较少,但是注意这里右部分的初始输入和最终输出channel是256,而左部分是64,所以右部分有效的压缩了参数量,减少了训练时间。