dropout的深入理解

Dropout

dropout提供了一种计算上可行并且非常有效的模型正则化方法。dropout可以看做是对于许多很大的神经网络的集成实际可行的bagging方法。bagging涉及到训练多个模型,以及在相应的测试集上评估多个模型。对于神经网络而言,这样的bagging方法似乎是不可行的,因为每一个很大的神经网络的训练和评估都是非常耗时和耗费内存的。

当使用bagging方法进行学习时,我们定义 k k k个不同的模型,从原始数据集中通过自助采样法形成 k k k个不同的训练数据集,然后在每个不同的训练数据集上训练相应的模型。dropout的目标是近似这个过程,但是在这个过程中我们有指数级别的神经网络模型。

dropout 的训练和bagging的训练并不是完全一样的。在bagging中,每个模型都是独立的。在dropout中,不同的模型之间共享参数,每一个dropout后得到的神经网络模型从父神经网络中继承部分参数。dropout的这种参数共享机制能够让我们以有限的内存去表示指数级别的神经网络模型数量。在bagging中,每一个模型都会在相应的训练集上充分训练以达到收敛为止;但是在dropout中,大部分的模型都不会被显示训练的,因为当父神经网络的规模足够大的时候,我们是不可能抽样出每个可能的子网络结构模型来训练的。实际上,在训练过程的每一步迭代中,只有极小部分的可能的子网络模型会被训练,但是dropout的参数共享机制能够让剩余的没被训练的网络模型达到一种较好的参数配置情况。除了这些不同之外,dropout和bagging算法是相同的。比如,在训练的过程中,每一个子网络模型遇到的训练集可以看做是从原始训练集通过自助采样法抽样得到的。

在预测阶段,bagging通过每个成员的投票(分类问题)或者平均(回归问题)来得到最终的预测。我们称这个过程为推理(inference)。假设我们的模型是输出一个概率分布。在bagging中,每一个模型 i i i产生一个概率分布 p ( i ) ( y ∣ x ) p^{(i)}(y|\boldsymbol{x}) p(i)(yx),那么整个集成模型的预测可以表示为:
1 k ∑ i = 1 k p ( i ) ( y ∣ x ) \frac{1}{k}\sum_{i=1}^kp^{(i)}(y|\boldsymbol{x}) k1i=1kp(i)(yx)
在dropout中,每一个由mask vector μ \boldsymbol{\mu} μ(binary mask vector,即指定哪些单元失活或者激活)定义的子模型能够输出一个概率分布 p ( y ∣ x , μ ) p(y|\boldsymbol{x},\boldsymbol{\mu}) p(yx,μ),整个最终模型的概率分布输出为:
∑ μ p ( μ ) p ( y ∣ x , μ ) \sum_{\boldsymbol{\mu}}p(\boldsymbol{\mu})p(y|\boldsymbol{x},\boldsymbol{\mu}) μp(μ)p(yx,μ)
其中 p ( μ ) p(\boldsymbol{\mu}) p(μ)是在训练的时候用来抽样产生 μ \boldsymbol{\mu} μ的概率分布。

我们可以通过一次前向传播的计算代价来获得对于整个集成模型的预测的一个比较好的近似。为了达到这个目的,我们需要使用几何平均而不是算术平均来表示整个模型的预测概率分布。由于多个概率分布的几何平均并不能保证是一个概率分布,因此我们需要对几何平均得到的概率分布进行归一化。具体表达式为:
p ~ e n s e m b l e ( y ∣ x ) = ∏ μ p ( y ∣ x , μ ) 2 d p e n s e m b l e ( y ∣ x ) = p ~ e n s e m b l e ( y ∣ x ) ∑ y ′ p ~ e n s e m b l e ( y ′ ∣ x ) \tilde{p}_{ensemble}(y|\boldsymbol{x})=\sqrt[2^d]{\prod_{\boldsymbol{\mu}}p(y|\boldsymbol{x},\boldsymbol{\mu})}\\p_{ensemble}(y|\boldsymbol{x})=\frac{\tilde{p}_{ensemble}(y|\boldsymbol{x})}{\sum_{y'}\tilde{p}_{ensemble}(y'|\boldsymbol{x})} p~ensemble(yx)=2dμp(yx,μ) pensemble(yx)=yp~ensemble(yx)p~ensemble(yx)
其中 d d d表示可能会被丢弃掉的神经元的数量。

Hinton指出在dropout中我们可以通过在这样的一个模型中通过评估 p ( y ∣ x ) p(y|\boldsymbol{x}) p(yx)来近似 p e n s e m b l e p_{ensemble} pensemble的值,这样的模型是:在评估阶段进行推理的时候,所有的神经元都被激活,但是神经元 i i i对应的权重要乘上这个神经元在训练时候的激活概率(比如0.5)。这样的做法是为了保证我们能够正确获得神经元 i i i所对应的期望输出值。我们把这种策略叫做weight scaling inference rule。虽然这样的近似推理规则在深度非线性网络中并没有明确的理论支撑,但是在实践中却表现得很好。

因为我们经常0.5的激活概率,所以weight scaling rule通常等价于在训练结束后将相应的权重除以2,然后正常的使用模型。另外一种方式是在训练过程中将对应的权重乘以2。这两种方式的目的都是为了保证在测试阶段相应神经元的总的期望输入和训练阶段的总的期望输入大致相同

相关研究表明dropout相比其他标准的低计算代价的正则化方法,比如weight decay,filter norm constraints(暂时不懂)以及sparse activity regularization(不懂)都更有效。dropout和其他的正则化方法通过恰当的组合可能能够产生更进一步的效果提升。

dropout的一个优点是计算代价很低。在训练期间对于每个样本的每次更新都只需要额外的 O ( n ) O(n) O(n)计算复杂度来产生mask vector μ \boldsymbol{\mu} μ。在推理阶段dropout并不会带来额外的计算复杂度。

dropout的另外一个优点是对于模型的类型或者训练过程没有明显的限制。任何使用分布式表示(distributed representation,不懂)的模型或者能够使用SGD进行训练的模型都能够使用dropout获得很好的训练效果。包括前馈神经网络、受限玻尔兹曼机、循环神经网络。其他有效的正则化方法可能对模型的结构有比较严格的要求。

尽管对于特定的模型而言,dropout只引入了线性的计算复杂度,但是对于一个完整的系统而言,使用dropout的代价可能会很明显。因为dropout是一种正则化技术,减少了模型的有效容量(effective capacity)。为了平衡这种影响,我们必须增加模型的规模。通常来说,使用dropout能够获得更低的验证集误差,但是我们需要更大规模的模型以及更多轮算法的迭代。对于非常大的数据集而言,正则化对于提高泛化误差的收益可能就没有那么大了,在这种情况下,由于模型规模的增大和额外的计算代价的引入,我们需要谨慎使用dropout。感觉这个和极大似然估计以及最大后验估计的关系很像。当数据集比较小的时候,极大似然估计容易过拟合,最大后验估计由于模型参数的先验概率分布的对数充当了正则化的作用,模型的泛化能力更好,相应的计算代价比极大似然估计大;当数据集很大的时候,极大似然估计由于其较好的统计性质能够收敛于真实模型,不会产生严重的过拟合现象,而MAP由于其额外的计算代价和相应的统计性质,这时的表现就比不上极大似然估计了。总的来说,当数据量足够大的时候,正则化带来的收益不是很大。

相关研究指出,当将dropout应用到线性回归时,dropout等价于L2 weight decay。对于深度模型而言,dropout并不等价于weight decay。

目前为止我们将dropout描述为一种高效的、近似的bagging算法,但是还有另外一种角度来理解dropout。dropout训练中的每个子模型都共享隐藏单元。这意味着每个隐藏单元本身必须表现得足够好,而不是依赖于某个具体的子模型中其他的隐藏单元而表现得好,训练的结果是在每个子模型中的表现都要足够好,这能够打破父神经网络中隐藏单元之间的相互依赖性。Dropout thus regularizes each hidden unit to be not merely a good feature but a feature that is good in many contexts.

dropout的优秀实践效果很大程度上来源于将masking noise(个人理解是mask vector μ \boldsymbol{\mu} μ所带来的随机性)应用到了隐藏单元。并且这种噪声是multiplicative。另外一种深度学习中常用的技术,batch normalization,在训练的时候在隐藏单元上引入了additivemultiplicative的噪声,但是这样的噪声在某种程度上起到了正则化的作用,因此有些时候在存在BN层的时候dropout层可以不必使用

preference

deeplearningbook,花书

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值