Dropout技术分析 与总结

目录

什么是Dropout

标准的Dropout

DropConnect 

Standout

Gaussian Dropout 

Pooling Dropout

Spatial Dropout

Cutout

RNNDrop

变分RNN的dropout

模型压缩

总结


什么是Dropout

dropout是指在深度网络训练过程中,由于神经网络单元,按照一定的概率将其暂时从网络中丢弃,对于随机梯度下降来说,由于是随机丢弃的,故而每一个mini-batch都在训练不同的网络,drop是CNN中防止过拟合的一个大杀器。但对于其为何有效,却众说纷坛

动机

在深度机器学习模型中训练网络的一个主要挑战是协同适应,这意味着神经元是相互依赖的,它们对彼此的影响是相当大,相对于它们的输入还不够独立。我们也经常发现一些神经元比其他神经元更重要预测能力的情况,换句话说,我们会过度依赖于个别神经元的输出

这些影响必须避免,权重必须具有一定的分布,以防止过拟合。某些神经元的协同适应和高预测能力可以通过不同的正则化方法进行调节。其中最常用的是dropout。然后dropout全部功能很少被使用。

取决于它是DNN,一个CNN或一个RNN。不同的dropout方法可以被应用。在实践中,我们只(或几乎)使用一个。我认为这是一个可怕的陷阱。所以在本文中,我们将从数学和可视化上深入到dropouts的世界中去理解

  • 标准的Dropout方法
  • 标准的Dropout变体
  • 用在CNN上的dropout方法。
  • 用在RNN上的dropout方法。
  • 其他dropout的应用(蒙特卡洛和压缩)

符号

标准的Dropout

最常用的dropout方法是Hinton等人在2012年推出的Standard dropout。通常简单地称为“Dropout”,由于显而易见的原因,在本文中我们将称之为标准的Dropout。 

为了防止训练阶段过拟合,随机去掉神经元,在一个密集的(全连接)网络中,对于每一层,我们给出了一个dropout的概率p。在每次迭代中,每个神经元被去掉的概率为p。inton等人的论文建议,输入层的dropout概率为“p=0.2”,隐藏层的dropout概率为“p=0.5”。显然,我们对输出层感兴趣,这是我们的预测。所以我们不会在输出层应用dropout。 

数学上,我们说每个神经元的丢弃概率遵循概率p的伯努利分布。 因此,我们用一个mark对神经元(向量层)进行了一个元素级的操作。其中每个元素都是遵循伯努利分布的随机变量

在测试(或推断)阶段,没有dropout。所有神经元都是活跃的,为了补偿与训练阶段相比较的额外信息。我们用出现的概率来衡量加权权重,所以神经元没有被忽略的概率,是1-p。

DropConnect 

也许你已经熟悉标准的Dropout方法。但也有很多变化。要对密集网络的前向传递进行正则,可以在神经元上应用dropout。L. Wan等人介绍的DropConnect没有直接在神经元上应用dropout,而是应用在连接这些神经元的权重和偏置上。

因此,我们找到了与标准Dropout方法相同的机制。除了掩码(它的元素是遵循一个分布的随机变量)不是应用在某一层的神经元向量上,而是应用在连接该层与前一层的权重矩阵上。 

对于测试阶段,我们可以使用与标准的Dropout方法相同的逻辑,我们可以乘以出现的概率,但这并不是L. Wan等人提出的方法。他们提出了一个很有趣的随机方法,即使在测试阶段也是如此,他们采用了DropConnect的高斯近似。然后由从这个高斯表示中随机采样样本。我们会在Standout之后回到高斯近似。 

Standout

L. J. Ba和B. Frey介绍的Standout是一个标准的Dropout方法,基于一个Bernoulli mask(我将根据它们遵循的分布来命名这些mask,这样会更简单)。不同之处在于,神经元被遗漏的概率p在这一层中并不恒定。根据权重的值,它是自适应的

这可以适用于任何g激活函数,甚至是一个单独的神经网络。类似地,对于Ws,可以是一个W的函数。然后在测试阶段,我们根据存在的可能性进行平衡。 

 

这样不是很清楚,我们举个例子。在他们的论文中,他们表明在实践中,置信网络的权值可以近似为权值的仿射函数。例如,我取s的绝对值作为激活函数。 

因此,我们可以看到,权值越大,神经元被丢弃的概率就越大,这有力地限制了某些神经元的 高预测能力。

Gaussian Dropout 

应用于神经网络的dropout方法在继续增长,所以,在谈论DNNs以外的其他东西之前,我想先谈谈一种dropout方法,它当然是最吸引人的。

举几个例子,Fast Dropout, 变分DropoutConcrete Dropout是从贝叶斯角度解释Dropout的方法。具体地说,我们没有使用伯努利mask,而是使用了一个mask,它的元素是遵循高斯分布的随机变量**(**正态分布)。我不会在这里演示大数定律,这不是重点。我们来直观地理解一下。

我们可以模拟一个伯努利mask,使用正太规律进行dropout。但这又什么区别呢?什么都做,什么都不做?由于我们神经元协同适应能力和预测能力,其不会改变这些方法和过拟合的相关性,但是与之前方法相比,其改变了训练阶段所需的执行时间。 

逻辑上,通过在每次迭代中丢弃带有dropout的神经元,那些在迭代中丢弃的神经元在反向传播期间不会被更新。它们并不存在。所以训练阶段被“放慢”了。另一方面,通过使用Gaussian Dropout方法,在每次迭代和每个训练样本中,所有的神经元都暴露出来。这就避免了减速

在数学上,有一个高斯mask的乘法(例如以1为中心的伯努利定律的标准差p(1-p))。通过在每次迭代中保持所有的神经元都是活跃的,从而随机地对其预测能力进行加权,从而模拟了dropout。这种方法的另一个实际优势集中在测试阶段,与没有dropout的模型相比,不需要进行任何修改。 

保持所有神经元都是活跃的,从而随机对其预测能力进行加权)

Pooling Dropout

图像和特征图的问题是像素非常依赖于它们的邻居。简单地说,在一张猫的图片上,如果你取一个与它的外表相对应的像素,那么所有邻近的像素都将与同样的外表相对应。两者几乎没有区别。

所以我们理解了标准Dropout方法的限制。我们甚至可以说它是低效的,它带来的唯一改变就是额外的计算时间。如果我们随机丢弃图像上的像素,那么几乎没有信息被删除。丢弃的像素几乎与它们的邻居相同。防止过拟合的性能很差

为什么不利用CNNs中经常使用的的合适的层。例如最大池化层。最大池化层是一个过滤器,通过一个图片或(特征图)选择重叠区域的最大激活。 

Max-Pooling Dropout是H. Wu和X. Gu提出的一种用于CNNs的Dropout方法。它在执行池化操作之前,直接将伯努利mask应用到最大池化层的内核上。直观地说,这允许对具有高激活的pooling结果最小化。这是一个限制某些神经元的高预测能力的很好的观点。在测试阶段,你可以根据出现的概率来确定前面方法的权重。 

我们以最大池化层为例,但同样可以对其他池化层进行操作,例如,对于平均池化层,我们可以在训练阶段以同样的方式应用一个dropout。然后在测试阶段,没有变化,因为它已经是一个加权平均值了。 

Spatial Dropout

对于CNNs,我们可以利用池化层。但是我们也可以更聪明地遵循J. Tompson等人提出的Spatial Dropout方法。他们提出用经典的dropout方法来解决这个问题,因为相邻像素高度相关

我们可以不去随机应用一个dropout在像素上,我们可以考虑把dropout应用在每个特征图上。如果我们以我们的猫为例,那么这就像从图像中移除红色通道并强迫它去总结图像中的蓝色和绿色通道。然后在下一次迭代中随机放置其他特征图

我不知道如何用数学正确地书写,使它易于理解。但是如果你理解了前面的方法,你就不会有任何问题。在训练阶段,对每个feature map应用Bernoulli mask,其丢弃概率为p。然后在测试阶段,没有dropout,只有一个概率为1-p的加权

Cutout

让我们进一步了解我们的方法,以克服相邻像素高度相关的事实。不是对每个特征图应用伯努利mask,我们可以在不同的区域中应用。这就是T. DeVries和G. W. Taylor提出的Cutout方法。

最后以我们的猫图像为例:该方法可以通过对图像的隐藏区域进行泛化从而限制过拟合。我们最后看到的是猫的头丢弃掉的画面。这迫使CNN了解到可以描述猫的不太明显的属性

同样,在本节中没有数学。这种方法很大程度上依赖于我们的想象力:正方形、长方形、圆形,在所有的特征图上,一次在一个特征图上,或者可能在几个特征图上……这取决于你。😃
Max-Drop

 

在他们的论文中,他们表明这种方法给出的结果与 Spatial Dropout一样有效。除此之外,在每次迭代中,所有的神经元都保持活跃,这限制了训练阶段的减速。这些结果都是用µ = 0.02和σ² = 0.05的数据得到的。

RNNDrop

我们已经看到了一些DNNs和CNNs的dropout的方法。一些研究还试图找出哪些方法对递归神经网络是有效的。它们通常依赖于LSTMs,所以我将以RNNs为例。它可以推广到其他的RNNs。 

问题很简单:在RNN上应用dropout是危险的。RNN的目的是长期保存事件的记忆。但传统的dropout方法效率不高,因为它们会产生噪音阻止这些模型长期保存记忆。下面这些方法可以长期保存记忆

T. Moon等人提出的RNNDrop是最简单的方法。一个伯努利mask只应用于隐藏的单元格状态。但是这个掩码从一个序列到另一个序列保持不变。这称为dropout的逐序列采样。它只是意味着在每个迭代中我们创建一个随机掩码。然后从一个序列到另一个序列,这个掩码保持不变。所以被丢弃的元素一直被丢弃而留下来的元素一直留着。所有的序列都是这样。 

 

S. Semeniuta等人提出的循环Dropout是一个有趣的变体。单元格状态保持不变。dropout只应用于更新单元格状态的部分。所以在每次迭代中,伯努利的mask使一些元素不再对长期记忆有贡献。但是记忆并没有改变

变分RNN的dropout

 

 

模型压缩

最后,直观地,通过随机应用dropouts,我们可以看到给定神经元对预测是否有效,根据这个观察结果,我们可以通过减少参数的数量来压缩模型, 同时最大限度的地降低性能的损耗,K. Neklyudov等人提出了利用变分dropout来剪枝DNNs和CNNs的方法

总结

会自己学习不同方法及其技术中的思想的运用。全部都搞定都行啦的回事与打算。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值