残差网络

under 算法  tag CNN  ResNet    Published on May 9th , 2019 at 10:46 pm

因为梯度消失和梯度爆炸问题的存在,非常深的神经网络是很难以训练的,但残差网络(ResNets)的出现打破了这一困境。实验表明,残差网络甚至可以构建到1000层以上
残差网络的组成基础是跳远连接(skip connection)构成的残差块(residual block)

这是一个两层的神经网络,$l$层经过两层激活后得到$l+2$层
residual1.png
我们把权重矩阵记作$w^{[i]}$,偏差因子记作$b^{[i]}$,非线性激活函数ReLU记作$g$,则我们可以得到

$$ z^{[l+1]}=w^{[l+1]}a^{[l]}+b^{[l+1]},\ a^{[l+1]}=g(z^{[l+1]}) \\ z^{[l+2]}=w^{[l+2]}a^{[l+1]}+b^{[l+2]},\ a^{[l+2]}=g(z^{[l+2]}) $$

这样信息就沿着主干道从$l$层流向$l+2$层

而跳远连接就是一条捷径(shortcut),把$l$层的信息拷贝到更深的层中
residual2.png
如上图所示,$l+2$层的激活值的计算方法就相应的更改为

$$ a^{[l+2]}=g(z^{[l+2]}+a^{[l]}) $$

如果$a^{[l]}$和$z^{[l+2]}$的维度不同,我们就在$a^{[l]}$前乘上转换矩阵$W_s$,或者用$0$将$a^{[l]}$扩充到与$z^{[l+2]}$相同的维度
这样我们就构建出了一个跨越两层的残差块,下面是一个残差网络的示意图
residual3.png
将上图所有蓝线去掉就是我们常见的普通网络(plain network),而蓝线的存在将相邻的两层都构成了一个残差块,将残差块相连就构成了ResNet

那么ResNet为什么可以加深网络的深度并且避免梯度消失和爆炸呢?
我们假设已经构建了一个大型的神经网络,并在其后加一个残差块
residual4.png
则有

$$ \begin{align*} a^{[l+2]} &= g(z^{[l+2]}+a^{[l]}) \\ &= g(w^{[l+2]}a^{[l+1]}+b^{[l+2]}+a^{[l]}) \end{align*} $$

当最坏情况出现,$w^{[l+2]}=0$(为了简化问题同样设$b^{[l+2]}=0$),即$l+2$层没有任何学到任何信息,则上式为

$$ \begin{align*} a^{[l+2]} &= g(w^{[l+2]}a^{[l+1]}+b^{[l+2]}+a^{[l]})\\ &= g(a^{[l]})\\ &= a^{[l]} \end{align*} $$

即把$a^{[l]}$的值赋给了$a^{[l+2]}$,所以无论残差块出现在网络中的什么位置,至少网络的效率不会因为残差块的出现而变得更差。但如果这两层中学到了有效的信息,残差块的出现就会提升网络的效率,正因残差块学习恒等函数十分容易,才使得ResNet如此有效

以下是用ResNet做图像处理的示意图
residual5.png
ResNet采用了same卷积来维持激活值的维度,若池化层处理改变了维度,就用$W_s$矩阵来保证$a^{[l]}$拷贝到更深层的有效性,最后通过全连接层和softmax来得出预测结果


本文由 cxh 创作,采用 知识共享署名4.0 国际许可协议进行许可,转载前请务必署名
  文章最后更新时间为:May 10th , 2019 at 01:23 pm
分享到:Twitter  Weibo  Facebook