深度学习模型中的过拟合良方【Dropout】

Dropout是什么?

Dropout是深度神经网络优化训练过程的一个算法。是由“AI教父”Geoff Hinton在其论文《Improving neural networks by preventing co-adaptation of feature detectors》中提出并在论文《Dropout: A Simple Way to Prevent Neural Networks from Overfitting》详细介绍。论文开篇就指出:当一个大的神经网络用来训练一个小的数据集时,会造成过拟合,使其得到的模型在测试集上的表现会不好。

而在训练过程中使用Dropout算法,可以防止模型过拟合。如下图所示,模型在使用Dropout之后网络中的某些神经元不被激活,暂时停止参与计算。
深度学习模型中的过拟合良方【Dropout】_第1张图片
根据上述分析,dropout不仅有防止模型过拟合,同时减少了计算量。

Dropout的原理

假设一个神经网络有 L L L个隐藏层,每个隐藏层的索引 l ∈ { 1 , . . . , L } l \in \{1,...,L\} l{1,...,L},一个标准的神经网络神经元计算为: z i ( l + 1 ) = w ⁡ i ( l + 1 ) y ⁡ l + b i ( l + 1 ) z_i^{(l+1)}=\operatorname{w}_i^{(l+1)}\operatorname{y}^l+b_i^{(l+1)} zi(l+1)=wi(l+1)yl+bi(l+1) y i ( l + 1 ) = f ( z i ( l + 1 ) ) y_i^{(l+1)}=f(z_i^{(l+1)})\quad\quad\quad yi(l+1)=f(zi(l+1))其中 z ⁡ l \operatorname{z}^l zl表示第 l l l层的输入向量, y ⁡ l \operatorname{y}^l yl表示第 l l l层的输出向量( y ⁡ 0 = x ⁡ \operatorname{y}^{0}=\operatorname{x} y0=x), w ⁡ l \operatorname{w}^l wl b ⁡ l \operatorname{b}^l bl表示第 l l l层的权重和偏置项, f f f表示激活函数。

带有Dropout算法的神经元训练计算有两个阶段:训练阶段和测试阶段
深度学习模型中的过拟合良方【Dropout】_第2张图片
训练时神经元计算如下: r j l = B e r n o u l l i ( p ) r_j^l=Bernoulli(p) rjl=Bernoulli(p) y ~ ⁡ l = r ⁡ l ∗ y ⁡ l   \operatorname{\tilde y}^l=\operatorname{r}^l*\operatorname{y}^{l}\quad\quad\quad\space y~l=rlyl  z i ( l + 1 ) = w ⁡ i ( l + 1 ) y ~ ⁡ l + b i ( l + 1 )   z_i^{(l+1)}=\operatorname{w}_i^{(l+1)}\operatorname{\tilde y}^l+b_i^{(l+1)}\space zi(l+1)=wi(l+1)y~l+bi(l+1)  y i ( l + 1 ) = f ( z i ( l + 1 ) )   y_i^{(l+1)}=f(z_i^{(l+1)})\quad\quad\quad\space yi(l+1)=f(zi(l+1)) 
深度学习模型中的过拟合良方【Dropout】_第3张图片
测试时,则预测模型每个神经元的权重参数要乘以概率 p p p,即 w t e s t l = p w ⁡ l w_{test}^l=p\operatorname{w}^l wtestl=pwl

Dropout如何防止过拟合

如上所述,Dropout在训练过程中有一个随机概率 p p p参与计算,因为这个概率 p p p使得模型训练时以这个概率随机地“临时丢弃”一部分神经元节点。具体来讲, Dropout 作用于每份小批量训练数据,由于真随机丢弃部分神经元的机制,相当于每次迭代都在训练 不同结构的神经网络 。类比于 Bagging方法, Dropout可被认为是一种实用的大规模深度神经网络的模型集成算法。 这是由于传统意义上的Bagging涉及多个模型的同时训练与测试评估,当网络与参数规模庞大时 ,这种集成方式需要消耗大量的运算时间与空间 。Dropout在小批量级别上的操作,提供了一种轻量级的Bagging集成近似,能够实现指数级数量神经网络的训练与评测。

Dropout的具体实现中,要求某个神经元节点激活值以一定的概率 p p p被“丢弃”,即该神经元暂时停止工作,如上第一张图。因此,对于包含 N N N个神经元节点的网结,在Dropout的作用下可看作为 2 N 2^N 2N个模型的集成。这 2 N 2^N 2N个模型可认为是原始网络的子网络,它们共享部分权值,并且具有相同的网络层数,而模型整体的参数数目不变,这就大大简化了运算。对于任意神经元,每次训练中都与一组随机挑选的不同的神经元集合共同进行优化,这个过程会减弱全体神经元之间的联合适应性,减少过拟合的风险,增强泛化能力。

参考资料:

  1. 深度学习中Dropout原理解析
  2. 百面机器学习( P ⁡ 217 − P ⁡ 219 \operatorname{P}_{217}-\operatorname{P}_{219} P217P219
  3. Improving neural networks by preventing co-adaptation of feature detectors
  4. Dropout: A Simple Way to Prevent Neural Networks from Overfitting

你可能感兴趣的:(人工智能,深度学习,过拟合,dropout)