深度学习模型之——Stochastic depth(随机深度)

前言:

随机深度文章是发表于ECCV2016,这篇文章早于DenseNet.,DenseNet也是因为随机深度网络受到启发,才提出来。Deep Network with Stochastic depth,在训练过程中,随机去掉很多层,并没有影响算法的收敛性,说明了ResNet具有很好的冗余性。而且去掉中间几层对最终的结果也没什么影响,说明ResNet每一层学习的特征信息都非常少,也说明了ResNet具有很好的冗余性。所以提出了DenseNet网络,DenseNet网络具体讲解参考前面链接博客。DenseNet网络和stochastic depth都是黄高博士提出的。

背景:


深的网络在现在表现出了十分强大的能力,但是也存在许多问题。即使在现代计算机上,梯度会消散、前向传播中信息的不断衰减、训练时间也会非常缓慢等问题。

ResNet的强大性能在很多应用中已经得到了证实,尽管如此,ResNet还是有一个不可忽视的缺陷——更深层的网络通常需要进行数周的训练——因此,把它应用在实际场景下的成本非常高。为了解决这个问题,作者们引入了一个“反直觉”的方法,即在我们可以在训练过程中任意地丢弃一些层,并在测试过程中使用完整的网络。

本文主要是提出随机深度,在训练时使用较浅的深度(随机在resnet的基础上pass掉一些层),在测试时使用较深的深度,较少训练时间,提高训练性能,最终在四个数据集上都超过了resnet原有的性能(cifar-10, cifar-100, SVHN, imageNet)。其训练过程中采用随机dropout一些中间层的方法改进ResNet,发现可以显著提高ResNet的泛化能力。随机深度网络也算是的ResNet变形.

网络基本思想:

基本架构使用ResNet-110或152. 

作者们用了残差块作为他们网络的构件,因此,在训练中,如果一个特定的残差块被启用了,那么它的输入就会同时流经恒等表换shortcut(identity shortcut)和权重层;否则输入就只会流经恒等变换shortcut。在训练的过程中,每一个层都有一个“生存概率”,并且都会被任意丢弃。在测试过程中,所有的block都将保持被激活状态,而且block都将根据其在训练中的生存概率进行调整。

H_{l}是第l个残差块的输出结果,f_{l}是由l第l个残差块的权重映射所决定的映射,b_{l}是一个随机变量(此变量的值只有1或0,反映出一个block是否是被激活的)),为每个残差模块的转换部分设置一个通过与不通过的概率P ,每一个残差块都有P可能性被dropout掉,即b_{l}为0。若保留,则b_{l}为1。
1

b_{l}=1时,这个block就是一个正常的残差块;当b_{l}=0时,上面的公式就变成了这样:


作者们将一个“线性衰减规律”应用于每一层的生存概率,他们表示,由于较早的层会提取低级特征,而这些低级特征会被后面的层所利用,所以这些层不应该频繁地被丢弃。这样,最终生成的规则就变成了这样: 
深度学习模型之——Stochastic depth(随机深度)_第1张图片

上面公式中的p_{l}表示的是第l层在训练中的生存概率,L表示block的总数量,因此p_{L}就是最后一个残差块的生存几率,这个几率在整个实验中一直都保持着0.5的水平。一定要注意的是,在这个情境中的输入被视为第一个层(l=0),所以这个第一层永远不会被丢弃。随机深度训练的整体框架如下图所示:

深度学习模型之——Stochastic depth(随机深度)_第2张图片

实验表明,同样是训练一个110层的ResNet,以任意深度进行训练的性能,比以固定深度进行训练的性能要好。这就意味着ResNet中的一些层(路径)可能是冗余的。 

优点:

1、这种方法成功地解决了深度网络的训练时间难题。’

2、它大大减少了训练时间,并显着改善了几乎所有数据集的测试错误(CIFAR-10,CIFAR-100,SVHN)

3、可以使得网络更深:随着随机深度,我们可以增加剩余网络的深度,甚至超过1200层,仍然可以在CIFAR-10上产生有意义的测试误差改善(4.91%)

你可能感兴趣的:(深度学习网络模型)