ResNet残差网络的理解

前言

个人对ResNet的理解,欢迎一起交流学习!
本文转载:https://mp.weixin.qq.com/s/DvezkbMSFy_NpHF_ifWm6w

2015年提出来的ResNet残差网络让传统的神经网络得到了飞速的发展与延伸,现在几乎所有的网络都受到ResNet中的残差思想的影响,它主要有以下四个优点:
1、加深网络层数
2、解决梯度消失问题
3、提升模型精度
4、提出深度残差网络

一、为什么要提出残差网络?

如上图所示,在早期实验发现,深层网络的层数越深,准确度反而降低,从而导致数据在深层网络上面的实现效果反而还不如浅层网络。造成这种现象的原因主要有以下几点:
1、过拟合
2、梯度消失或者梯度爆炸

针对以上这两个问题,我们可以使用权重初始化中间层归一化(batch normalization)解决这些问题。但是解决了以上两个问题后,深层网络越深,准确度下降变缓,但是依旧还是会下降。这个时候可能出现的原因如下:
****网络层数加深的时候,需要训练的参数也会增多,各个参数以及数据在训练的过程中会不断的传递和反向传播,输入和输出在经过每一层的时候都会发生改变,这意味着数据的改变是不可控的,我们并不知道数据的分布是怎样的,这就导致了数据和参数在传递过程中误差不断增大的现象,然后网络训练了误差很大的数据和参数,故而网络层数越深,拟合的效果就会越差。
ResNet残差网络的理解_第1张图片
由上图可以看出,网络层数越深,训练误差越大,测试误差越大,也就是准确率越低

于是作者提出了ResNet成功的解决了这个问题。

二、什么是残差网络?

残差网络中最大的特点就是残差学习。在残差网络中提出了一种新的连接方式成为“shortcut connection”,可以理解为“抄近道”的意思。意思就是说,前面层数的网络的输出可以直接跳到后面的部分使用,一个残差块如下图所示:
ResNet残差网络的理解_第2张图片
上面只是ResNet网络中的一个残差块,而整个网络都由这样的残差块堆叠而成。这里的网络思想借鉴了高速网络的跨层连接(skipped connection)思想,但是残差项原本是带有权值的,ResNet使用恒等映射代替了。

那么什么是恒等映射呢?假设神经网络的某层的输入是 x x x,该网络层的输出是 H ( x ) H(x) H(x),那么恒等映射之后的网络层的输出就是 H ( x ) = F ( x ) + x H(x)=F(x)+x H(x)=F(x)+x,其中的项 F ( x ) = H ( x ) − x F(x)=H(x)-x F(x)=H(x)x成为残差,网络训练的目的之一就是使这个值趋近于0。

三、残差网络只有这一种吗?

当然不是!不考虑其他的改进的版本,在作者描述的论文提到了两种网络,如下图所示
ResNet残差网络的理解_第3张图片
上图中左边的残差块是上述已经讨论过的,主要对应于34层的ResNet网络,而在右边的残差块主要对应于50/101/152层的ResNet网络。既然已经有了左边的残差块,又为什么要提出右边的残差块呢?

当网络层数增加的时候,参数的量也会随之增加,为了考虑计算成本,我们通常会选择右侧的残差块,通过计算可以得到右侧的残差块可以极大的减少模型中训练的参数的计算量,因此深层网络一般都是用右侧的残差块。
两个残差块的计算量对比,很明显右侧的残差块的计算量会小很多:
1、左侧残差块计算量=
3 × 3 × 256 × 256 + 3 × 3 × 256 × 256 = 1179648 3\times3\times256\times256+3\times3\times256\times256=1179648 3×3×256×256+3×3×256×256=1179648
2、右侧残差块计算量=
1 × 1 × 64 × 256 + 3 × 3 × 64 × 64 + 1 × 1 × 256 × 64 = 69632 1\times1\times64\times256+3\times3\times64\times64+1\times1\times256\times64=69632 1×1×64×256+3×3×64×64+1×1×256×64=69632

四、残差网络分析

以34层的网络为例,下面给出部分网络结构:
ResNet残差网络的理解_第4张图片

可以看到网络中的残差块有实线的也有虚线的,这是为了方便通道相同的特征直接相加,也就是在 H ( x ) = F ( x ) + x H(x)=F(x)+x H(x)=F(x)+x中,只有 F ( x ) F(x) F(x) x x x的通道相同时,才可以直接相加。

在上图网络结构中:
实线部分:表示的是网络通道相同的可以直接相加,这和我们前面提到的一样

虚线部分:表示的是网络通道不同的,不可以直接相加,这个时候采用计算公式 H ( x ) = F ( x ) + w x H(x)=F(x)+wx H(x)=F(x)+wx,其中 w w w是卷积操作,调整 x x x的维度,使得F(x)和x的通道数一样,这样便可以直接相加了。

你可能感兴趣的:(深度学习,机器学习,神经网络,网络)