0%

残差网络

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

这是一个两层的神经网络,$l$层经过两层激活后得到$l+2$层

我们把权重矩阵记作$w^{[i]}$,偏差因子记作$b^{[i]}$,非线性激活函数ReLU记作$g$,则我们可以得到

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

而跳远连接就是一条捷径(shortcut),把$l$层的信息拷贝到更深的层中

如上图所示,$l+2$层的激活值的计算方法就相应的更改为

如果$a^{[l]}$和$z^{[l+2]}$的维度不同,我们就在$a^{[l]}$前乘上转换矩阵$W_s$,或者用$0$将$a^{[l]}$扩充到与$z^{[l+2]}$相同的维度
这样我们就构建出了一个跨越两层的残差块,下面是一个残差网络的示意图

将上图所有蓝线去掉就是我们常见的普通网络(plain network),而蓝线的存在将相邻的两层都构成了一个残差块,将残差块相连就构成了ResNet

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

则有

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

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

以下是用ResNet做图像处理的示意图

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