Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

Dropout分析

本文译者:哈工大SCIR本科生 施琦。出处: P. Galeone's blog《Analysis of Dropout》。原文链接:https://pgaleone.eu/deep-learning/regularization/2017/01/10/anaysis-of-dropout/ 

过拟合(Overfitting)是深度神经网络(DNN)中的一个重要的问题:该模型学习仅对训练集合进行分类,使其自身适应于训练示例,而不是学习能够对通用实例进行分类的决策边界。近些年,研究者们已经提出了许多过拟合问题的解决方案,其中,Dropout因为其简明且以经验为基础的良好结果而占据主流。

Dropout

 

(a)标准神经网络(左)                       (b)应用Dropout后的神经网络(右)

 

Dropout的视觉表示,如上图所示。图(a)是应用Dropout之前的神经网络,图(b)是应用Dropout之后同样的神经网络。参数经过学习后,左边的网络是在训练和测试时使用同样的网络结构。

 

Dropout的思想是训练DNNs的整体然后平均整体的结果,而不是训练单个DNN。DNNs以概率p丢弃神经元,因此保持其它神经元概率为q=1-p。当一个神经元被丢弃时,无论其输入及相关的学习参数是多少,其输出都会被置为0。丢弃的神经元在训练阶段的前向传播和后向传播阶段都不起作用:因为这个原因,每当一个单一的神经元被丢弃时,训练阶段就好像是在一个新的神经网络上完成。

 

引用自Dropout作者:

 

在标准神经网络中,每个参数接收的导数表明其应该如何变化才能使最终损失函数降低,并给定所有其它神经网络单元的状态。因此神经单元可能以一种可以修正其它神经网络单元的错误的方式进行改变。而这就可能导致复杂的共适应(co-adaptations)。由于这些共适应现象没有推广到未见的数据,将导致过拟合。我们假设对每个隐藏层的神经网络单元,Dropout通过使其它隐藏层神经网络单元不可靠从而阻止了共适应的发生。因此,一个隐藏层神经元不能依赖其它特定神经元去纠正其错误。

 

简而言之:Dropout在实践中表现良好,是因为它在训练阶段阻止了神经元的共适应。现在我们对Dropout有了直观的想法,让我们进行更深层次的分析。

Dropout是如何工作的

如前所述,Dropout以概率p关闭神经元,相应的,以大小为q=1-p的概率开启其他神经元。每个单个神经元有同等概率被关闭。这意味着:

给定

  • h(x) = xW + b 是di的一个线性投影(di是dh中的一个维度输入,dh是维度输出空间);
  • a(h)是一个激活函数。

 

对Dropout的应用建模是可行的,仅仅对于训练阶段来说,给定的投影作为一个修改的激活函数:

其中,


是伯努利向量Xi的一个dh维的向量。

 

一个伯努利随机变量有以下概率的质量分布:

其中,k是可能的输出结果。

 

显然,这个随机变量完美的模拟了在单个神经元上Dropout的过程。事实上,神经元被以概率 p = P(k=1) 被关闭,否则保持不变。

 

它可以看作Dropout在第i个神经元上的应用:

其中,P(Xi=0)=p.

 

因为在训练阶段,一个神经元以概率q保持;在测试阶段,我们必须模拟在训练阶段使用的神经网络的整体的行为。为此,作者建议在测试阶段将激活函数以q为比例系数进行缩放,以便将训练阶段产生的预期输出作为测试阶段使用的单个输出。因此:

训练阶段:

测试阶段:

 


反向Dropout

一个略有不同的方法是使用反向Dropout(Inverted Dropout)。该方法包括在训练阶段缩放激活函数,从而使得其测试阶段保持不变。比例因子是保持概率的倒数:

因此:

训练阶段:

测试阶段:

反向Dropout有助于只定义一次模型并且只改变了一个参数(保持/丢弃概率)以使用同一模型进行训练和测试。相反,直接Dropout,迫使你在测试阶段修改网络。因为如果你不乘以比例因子q,神经网络的输出将产生更高的相对于连续神经元所期望的值(因此神经元可能饱和):这就是为什么反向Dropout是更加常见的实现方式。 

一组神经元的Dropout

我们可以很容易的注意到,具有n个神经元的层h,在单个训练步骤中,可以被看作n个伯努利试验的集合,每个实验成功的概率等于p。因此,层h具有被丢弃的神经元的输出等于:

由于每个神经元现在被建模为伯努利随机变量,并且所有这些随机变量是独立分布的,所以丢弃的神经元的总数也是随机变量,称为二项式(Binomial):

其中,在n个实验中获得k次成功的概率由概率质量分布给出:

这个公式很容易理解:

  • pk(1-p)n-k 是n个实验中获得k个成功的单个序列的概率,因此是n-k次失败。
  • 是用于计算可能的成功序列的数量的二项式系数。

 

我们现在可以使用这个分布来分析丢弃指定数量神经元的概率。当使用Dropout时,我们为选定的层定义一个固定的Dropout概率p,我们期望从中降低一定比例数量的神经元。例如,如果我们应用Dropout的层具有n=1024个神经元,p=0.5,我们期望512个被丢弃,让我们来验证:

因此,准确丢弃np=512个神经元的概率只有0.025!Python3可以帮助我们可视化不同p值和固定值n的神经元,代码已注释。

二项分布在np附近时非常尖锐

 

从上图我们可以看出,无论p值是多少,平均下降的神经元数量都与np成正比,事实上:

此外,我们可以注意到,函数分布在p=0.5附近几乎是对称的,并且随着与p=0.5距离的增加,丢弃np神经元的概率增加。为补偿激活值,缩放因子已被作者添加,因为他们期望在训练阶段期间仅保持比例为1-p的神经元百分比。在训练阶段,相反,100%的神经元保持开启状态,因此该值应相应地按比例缩小。

Dropout和其它规则

Dropout通常与L2正则化和其它参数约束技术(如Max Norm1)一起使用。正则化有助于保持模型参数值在可控范围内增长。简而言之,L2正则化是损失的附加项,其中λ∈[0,1]是成为正则化强度的超参数,F(W;x)是模型函数,E是实际值y与预测值y^之间的误差函数。

我们很容易理解,当通过梯度下降进行反向传播时,其更新量减少。如果η是学习速率,则参数w∈W的更新量为

反向Dropout和其它正则化

由于Dropout不会阻止参数增长,应用L2正则化(或限制参数值的任何其它正则化方法)会有作用。添加缩放因子,上述方程变为:

可以容易的看出,当使用反向Dropout时,学习速率被缩放至q的因子。由于q具有在[0,1]之间的值,η和q之间的比率可以在如下区间变化:

因此,我们将其称q为推动因子(boosting factor),因为它推动了学习速率。此外,我们将r(q)称为有效学习速率(effective learning rate)。总之,有效学习速率相对于所选择的学习速率更高:由于这个原因,限制参数值的正则化可以帮助简化学习速率选择过程。

 

总结

1、Dropout有两种方式:直接Dropout(不常用)和反向Dropout。

2、可以使用伯努利随机变量来对单个神经元上的Dropout进行建模。

3、可以使用二项式随机变量来对一组神经元上的Dropout进行建模。

4、即使准确降低np神经元的概率很低,np神经元在具有n个神经元的神经网络层上也会平均下降。

5、反向Dropout可以提高学习速率。

6、反向Dropout应该与限制参数值的其他归一化技术一起使用,以便简化学习速率选择过程。

7、Dropout有助于在深度神经网络中防止过拟合。

注释[1]Max Norm对参数大小施加约束。选择超参数c的值施加约束

本文来源于哈工大SCIR

原文链接点击即可跳转

哈工大SCIR
哈工大SCIR

哈尔滨工业大学社会计算与信息检索研究中心

产业理论Dropout过拟合DNN神经网络
暂无评论
暂无评论~