记录一下看resnet论文的心得体会

作者在摘要中提出一个现象:深度的神经网络是很难训练的。因此提出了一种残差学习的框架,使得训练深的神经网络变得相对简单的多。残差神经网络就是为了解决这个问题的。

那么resnet网络相比于 cnn来说有什么优点呢?

cnn随着层数的增多导致训练误差和测试误差都会增加,精度会降低。

但是resnet不会,他这残差神经网络有其特殊的优势。层数越来越多后,例如1000层,一万层,也许提高不了太多精度,但是至少不会降低精度。

以ImageNet举例。作者使用了152层的深度,比VGG深度多了8倍,但是计算复杂度却更低。也因此赢下了2015年的ImageNet的竞赛

这里对神经网络做一个简单的介绍

卷积神经网络主要由这几类层构成:输入层、卷积层,ReLU层、池化(Pooling)层和全连接层(全连接层和常规神经网络中的一样)。卷积神经网络不同层可以得到不同的特征,比如低级的视觉特征和高级的语义特征。

作者具体解释了一下深度神经网络难以训练的现象

普通神经网络随着层数的增加,特别是层数很多的时候,它的梯度要么消失要么爆炸。

解决这个问题的两个办法:

1 在权重初始化的的时候做好一点,权重不要太大也不要太小

2 第二个就是中间加入一些normalization,包括BN,batch normalization。可以校验每个层之间的输出和梯度的均值和方差,避免有些层的数据特别大,有些层特别小。

这样可以保证网络是可以训练的。

但是使用这些技术是能够训练,也就是说能够收敛。虽然你现在能够收敛了,但是随着网络层数的增多。你的性能实际上是变差的,精度会变差。

不管是训练,验证还是测试误差都会变差。并且这不是一个由于层数变多,模型变复杂,导致的一个过拟合现象(因为训练误差也变高了,过拟合overfitting 是指训练误差变得很低,但是测试误差变得很高

从图中看到,56层相对于20层,它的训练和测试误差都变高了,说明普通神经网络不是层数越深越好

Resnet算法的应用举例 resnet优缺点_神经网络


按道理来说,深层网络应该要比浅层网络好用些,至少深层网络前面层数可以和浅层网络保持参数一样,后面多出来的层数可以做一些identity mapping:你输出是X,那让你的输入也是x。至少不要帮倒忙。但是事实上SGD做不到这个。

作者提出的解决方法

作者提出一种解决方法,使得深度网络至少不能比浅的网络效果更差。

假设真实的东西为X,而神经网络学到的东西是H(X)。

残差神经网络后面的层数 学的东西不再是H(X)了,而是H(X)-X,即学到的东西和真实的东西的残差值。即F(X) = H(X)-X。

F(X)是后面网络学习到的东西,对网络的优化目标就是F(X)了,不停迭代使得F(X)尽可能小。

最终的输出的F(X)+X。

这就是残差神经网络的大致思想。论文后面举了很多例子说明加了残差神经网络会使得原本网络变得更好,并且收敛速度还会更快

Resnet算法的应用举例 resnet优缺点_图像处理_02

为什么普通深层神经网络会梯度消失而且训练速度慢的解释

看图,红色是普通神经网络运算,即不停求导。但是是梯度很小的,是在0附近的一个高斯分布,因此求导相乘会非常小,最后导致梯度消失。

蓝色则是残差神经网络运算。由相乘变成相加。所以不会导致梯度消失,并且运算量也大大减小。从而收敛速度更快

Resnet算法的应用举例 resnet优缺点_cnn_03

PS:

**残差神经网络如何处理输入输出是不等的情况

  1. 在输入输出上添加一些额外的0,使得两者的形状可以对应起来
  2. 投影,通过1X1的卷积层,空间上不做任何事情,在通道维度上改变。步幅为2**