注:阅读本博客之前,你需要先掌握:全连接神经网络,卷积神经网络的基本原理。
背景介绍
随着LeNet-5,AlexNet,VGG等神经网络结构的出现,卷积神经网络逐渐从单纯的只拥有卷积操作和下采样的神经网络发展为具有max pooling、dropout以及非线性函数的神经网络。在网络结构变得不断复杂的同时,人们发现,神经网络的效率并没有预期得到提升,反而容易出现梯度消失等情况,因而导致loss难以减少等现象。
对于出现梯度消失的原因,大家可以参考这篇:
https://blog.csdn.net/jasonleesjtu/article/details/89185185
ResNet通过在两个卷积层之间添加短路(shortcut)的方式,有效地解决了在神经网络层数不断增加的情况下难以训练的问题。
网络结构
1、Basic Block
上图所示就是一个Basic Block。其中,weight layer可看成是卷积层,F(x)是x通过两个卷积层之后所学习到的。该结构的特点,就是在两个卷积层外面添加了一条shortcut,使得x经过两个卷积层之后可以以x+F(x)的形式输出。
那么,为什么这种结构可以有效地解决因网络层数增加而导致的模型难以训练的问题呢?我们以解决梯度消失为例:
y l y_l yl=h( x l x_l xl)+F( x l x_l xl, w l w_l wl)
x l + 1 x_{l+1} xl+1=f( y l y_l yl)
其中: x l x_l xl和 x l + 1 x_{l+1} xl+1分别是这个Basic Block的输入与输出项;h( x l x_l xl)= x l x_l xl,即identity,ResNet的核心;F( x l x_l xl, w l w_l w