ResNet(残差)网络

参考:https://v.qq.com/x/page/x0546ammpvd.html

https://blog.csdn.net/Sakura55/article/details/81512132

https://www.cnblogs.com/vincentqliu/p/7464918.html

https://blog.csdn.net/whz1861/article/details/78229124

一、网络的深度:

CNN能提取low/mid/high-level的特征,网络的特征越深,提取到的不同level的特征越丰富。越深的网络提取的特征越抽象,越具有语义信息。

二、为什么不能简单的增加网络深度:

简单的增加深度,会导致梯度弥散或梯度爆炸。

梯度弥散:反向传播法计算梯度优化,反向传播求隐藏层梯度时利用了链式法则,梯度进行一系列的连乘,导致浅层隐藏层的梯度剧烈衰减,导致梯度消失。

例子:

ResNet(残差)网络

σ **函数,连乘导致梯度爆炸和梯度消失

解决方法:正则化初始化和中间的正则化层(Batch Normalization),这样的话可以训练几十层的网络。

 

三、退化问题

训练层数增多,但是会出现退化问题。网络层数增加,训练集上的准确率却饱和甚至下降了。(不是过拟合,过拟合为准确率上升)。退化问题说明深度神经网络不能简单地很好的优化。

证明退化:何凯明团队,在深度网络中设置了恒等层(输入等于输出),但是在训练完成后,不能被训练为恒等。层数过深的平原网络具有更高的训练误差。

 

  • 如何解决退化问题:

解决方法:采用残差模块

如果把网络设计为H(x) = F(x) + x,如残差模块图。我们可以转换为学习一个残差函数F(x) = H(x) - x. 只要F(x)=0,就构成了一个恒等映射H(x) = x. 而且,拟合残差更加容易。

残差块结构如下:

ResNet(残差)网络

ResNet(残差)网络

记为:

ResNet(残差)网络

梯度:

ResNet(残差)网络

 

五、神经网络流程图

ResNet(残差)网络

ResNet(残差)网络

(图中参数解释:3*3卷积核尺寸,512卷积个数,/2尺寸缩2。Output size 图像尺寸)

Plain网络

受VGG启发采用3*3的卷积核,遵循两个设计原则:1)相同输出特征图尺寸(output size),(图中相同颜色),卷积层相同的滤波器个数;2)特征图尺寸缩小一半(图中不同颜色层之间),滤波器个数加倍保持每个层的计算复杂度。

Resnet

比VGGNet具有更少的滤波器和更低的复杂度。FLOPs(每秒浮点数运算次数)为VGGNets的18%。

实线部分:尺寸相同,直接H(x)=F(x)+x 

虚线部分:维度不同,Fx)和x相加时维数必须相等,采用H(x)=F(x)+ Wsx,通过执行线性投影Ws,具体的实现是卷积的步长设置为2

ResNet(残差)网络

 

不同layer的卷积核设置:

ResNet(残差)网络

 

Bottlenet

对常规二层结构的改进

作用:减少计算和参数量,降低了训练时间

2层的3*3卷积换成1*1+3*3+1*1卷积结构(3layer结构)

1x1卷积主要用来降维和扩维用,使得3x3的卷积输入输出的维度更低。

ResNet(残差)网络

 

两种结构分别针对ResNet34(左图)和ResNet50/101/152(右图)其目的主要为了降低参数数目,减少计算量。假设上图左右输入均为256(则左图的64均为256),计算如下:

1.左图是两个3x3x256的卷积,参数数目: 3x3x256x256x2 = 1179648

2.右图是第一个1x1的卷积把256维通道降到64维,然后在最后通过1x1卷积恢复,整体上用的参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,右图的参数数量比左图减少了近17.
   
故对于常规的ResNet,可以用于34层或者更少的网络中(左图);对于更深的网络(如101层),则使用右图,其目的是减少计算和参数量。