2020-02-23 14:14:06 +00:00
|
|
|
|
# ResNet 详解
|
|
|
|
|
|
|
|
|
|
## 背景简介
|
|
|
|
|
|
|
|
|
|
深度网络随着层数不断加深,可能会引起梯度消失/梯度爆炸的问题:
|
|
|
|
|
1. “梯度消失”:指的是即当梯度(小于1.0)在被反向传播到前面的层时,重复的相乘可能会使梯度变得无限小。
|
|
|
|
|
2. “梯度爆炸”:指的是即当梯度(大于1.0)在被反向传播到前面的层时,重复的相乘可能会使梯度变得非常大甚至无限大导致溢出。
|
|
|
|
|
|
|
|
|
|
随着网络深度的不断增加,常常会出现以下两个问题:
|
|
|
|
|
1. 长时间训练但是网络收敛变得非常困难甚至不收敛
|
|
|
|
|
2. 网络性能会逐渐趋于饱和,甚至还会开始下降,可以观察到下图中56层的误差比20层的更多,故这种现象并不是由于过拟合造成的。
|
|
|
|
|
这种现象称为深度网络的退化问题。
|
|
|
|
|
|
2020-04-25 08:45:19 +00:00
|
|
|
|
![pic](https://img.zeekling.cn/images/2020/04/25/nn_13.png)
|
2020-02-23 14:14:06 +00:00
|
|
|
|
|
|
|
|
|
ResNet深度残差网络,成功解决了此类问题,使得即使在网络层数很深(甚至在1000多层)的情况下,网络依然可以得到很好的性能与效
|
|
|
|
|
率。
|
|
|
|
|
|
|
|
|
|
## 参差网络
|
|
|
|
|
|
|
|
|
|
ResNet引入残差网络结构(residual network),即在输入与输出之间(称为堆积层)引入一个前向反馈的shortcut connection,这有
|
|
|
|
|
点类似与电路中的“短路”,也是文中提到identity mapping(恒等映射y=x)。原来的网络是学习输入到输出的映射H(x),而残差网络学
|
|
|
|
|
习的是$$ F(x)=H(x)−x $$。残差学习的结构如下图所示:
|
|
|
|
|
|
2020-04-25 08:45:19 +00:00
|
|
|
|
![pic](https://img.zeekling.cn/images/2020/04/25/nn_14.png)
|
2020-02-23 14:14:06 +00:00
|
|
|
|
|
|
|
|
|
另外我们可以从数学的角度来分析这个问题,首先残差单元可以表示为:
|
|
|
|
|
|
|
|
|
|
$$
|
|
|
|
|
y_l=h(x_l) + F(x_l, W-l) \\
|
|
|
|
|
x_{l+1} = f(y_l)
|
|
|
|
|
$$
|
|
|
|
|
|
|
|
|
|
其中$$ x_{l} $$ 和$$ x_{l+1} $$ 分别表示的是第 l 个残差单元的输入和输出,注意每个残差单元一般包含多层结构。 F 是残差函
|
|
|
|
|
数,表示学习到的残差,而h表示恒等映射, f 是ReLU激活函数。基于上式,我们求得从浅层 l 到深层 L 的学习特征为:
|
|
|
|
|
|
|
|
|
|
$$ x_L = x_l + \sum_{i=l}^{L-1} F(x_i, W_i) $$
|
|
|
|
|
|
|
|
|
|
利用链式规则,可以求得反向过程的梯度:
|
|
|
|
|
$$
|
|
|
|
|
\frac{\alpha{loss}}{\alpha{x_l}} = \frac{\alpha{loss}}{\alpha{x_L}} * \frac{\alpha{x_L}}{\alpha{x_l}}
|
|
|
|
|
= \frac{\alpha{loss}}{\alpha{x_L}} * (1 + \frac{\alpha}{\alpha{x_L}} \sum_{i=l}^{L-1} F(x_i, W_i) )
|
|
|
|
|
$$
|
|
|
|
|
|
|
|
|
|
式子的第一个因子表示的损失函数到达 L 的梯度,小括号中的1表明短路机制可以无损地传播梯度,而另外一项残差梯度则需要经过带
|
|
|
|
|
有weights的层,梯度不是直接传递过来的。残差梯度不会那么巧全为-1,而且就算其比较小,有1的存在也不会导致梯度消失。所以残
|
|
|
|
|
差学习会更容易。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
实线、虚线就是为了区分这两种情况的:
|
|
|
|
|
1. 实线的Connection部分,表示通道相同,如上图的第一个粉色矩形和第三个粉色矩形,都是3x3x64的特征图,由于通道相同,所以采
|
|
|
|
|
用计算方式为$$ H(x)=F(x)+x $$
|
|
|
|
|
2. 虚线的的Connection部分,表示通道不同,如上图的第一个绿色矩形和第三个绿色矩形,分别是3x3x64和3x3x128的特征图,通道不
|
|
|
|
|
同,采用的计算方式为$$ H(x)=F(x)+Wx $$,其中W是卷积操作,用来调整x维度的。
|
2020-04-25 08:45:19 +00:00
|
|
|
|
![pic](https://img.zeekling.cn/images/2020/04/25/nn_16.png)
|
2020-02-23 14:14:06 +00:00
|
|
|
|
|
|
|
|
|
## 残差学习的本质
|
|
|
|
|
|
2020-04-25 08:45:19 +00:00
|
|
|
|
![pic](https://img.zeekling.cn/images/2020/04/25/nn_15.png)
|
2020-02-23 14:14:06 +00:00
|
|
|
|
|
|
|
|
|
残差网络的确解决了退化的问题,在训练集和校验集上,都证明了的更深的网络错误率越小:
|
2020-04-25 08:45:19 +00:00
|
|
|
|
![pic](https://img.zeekling.cn/images/2020/04/25/nn_17.png)
|
2020-02-23 14:14:06 +00:00
|
|
|
|
|
|
|
|
|
下面是resnet的成绩单, 在imagenet2015夺得冠军:
|
|
|
|
|
|
2020-04-25 08:45:19 +00:00
|
|
|
|
![pic](https://img.zeekling.cn/images/2020/04/25/nn_18.png)
|
2020-02-23 14:14:06 +00:00
|
|
|
|
|
|
|
|
|
|