浅谈残差网络——ResNet

一.ResNet是什么?

ResNet是一种残差网络,咱们可以把它理解为一个子网络,这个子网络经过堆叠可以构成一个很深的网络。我们可以先来看看它的结构,稍后会作详细的介绍。
浅谈残差网络——ResNet
残差:残差在数理统计中是指实际观察值与估计值(拟合值)之间的差。

二.为什么要引入ResNet?

前面我们说过VGG Net,但是要注意一个问题当VGG Net把网络加深到一定层次后就不能继续加深了,因为此时随着网络的继续加深,所得到的效果不仅不会优化,有可能还会变得更差,这是因为网络的加深会造成梯度爆炸和梯度消失的问题。但是我们又知道网络越深,我们所能获取的信息越多、特征也越丰富,ResNet就解决了网络加深所带来的问题,从而使网络可以加深到更深的层次,即是说我们可以利用到更多的信息。
浅谈残差网络——ResNet
对比上图我们可以看到,20层网络训练集的错误率明显比56层网络训练集的错误率低。
浅谈残差网络——ResNet
为了让更深的网络也能训练出好的效果,何凯明大神提出了一个新的网络结构——ResNet。这个网络结构的想法主要源于VLAD(残差的想法来源)和Highway Network(跳跃连接的想法来源)。

三.详解ResNet

我们再来看看ResNet的基本结构
浅谈残差网络——ResNet
将输入叠加到下层的输出上。对于一个堆积层结构(几层堆积而成)当输入为x时其学习到的特征记为H(x),现在我们希望其可以学习到残差F(x)=H(x)-x,这样其实原始的学习特征是F(x)+x 。当残差为0时(即F(x)为0时),此时堆积层仅仅做了恒等映射,是可以和浅层网络持平的,此时可以把该处的深度忽略掉,这样可以保证网络性能至少不会下降。但是实际上残差不会为0,这也会使得堆积层在输入特征基础上能学习到新的特征,从而拥有更好的性能。

ps:这里H(x)就是观测值,x就是估计值(也就是上一层ResNet输出的特征映射)。如果残差映射(F(x))的结果的维度与跳跃连接(x)的维度不同,那咱们是没有办法对它们两个进行相加操作的,必须对x进行升维操作,让他们的维度相同才能计算。

我们来看一下更多的ResNet层次
浅谈残差网络——ResNet
它的模型结构总结如下:
浅谈残差网络——ResNet
优点:
浅谈残差网络——ResNet

不同于VGG Net,因为残差网络有残差的存在,而残差我们就可以认为是图像的信息,且图像的信息可以直接再传递过来,所以在卷积层上学到的东西就比较少,只是学到了特殊的表达而已,而全部的信息是可以用残差的另一个恒等式保存下来。所以残差结构使得网络需要学习的知识变少,容易学习。

参考链接1
参考链接2