深度学习: Dropout

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gaoxueyi551/article/details/81144016

Dropout: A simple Way to Prevent Neural Networks from Overfitting

 

摘要

       过拟合是机器学习领域较为突出的问题之一,很多方法已提出用于缓解过拟合。该文提出的方法是Dropout(剔除、删除等翻译即可)。只需记住一句话即可: 在神经网络训练过程中随机删除一些激活单元以及与这些激活单元相连的边,这避免了激活单元之间过多的协同适应(生物学解释: In biology, co-adaptation is the process by which two or more species, genes or phenotypic traits undergo adaptation as a pair or group)。


引言

       这部分提出通过穷举所有可能的神经网络模型参数设置,对每种参数设置进行加权,再平均化。或者,通过集成学习的方式提高模型泛化能力。但是这两种方法,一个是天方夜谭(想想神经网络的规模吧),一个是计算量太大,均不可取。但是该文引入的Dropout却同时具有计算量小且有近似集成学习的功效(后面介绍原因)。

        首先来看一下应用Dropout前后的神经网络,如下:

        

图 1 Dropout前后对比

         以上图为例,可以看到这是一个由输入层,两个隐层和输出层组成的神经网络。部分激活单元连同输入和输出一并被删除。那么Dropout的机制是怎样的那? 

         首先, 为每一层(输出层除外)单独设定一个概率值 \mathbf{\mathit{\mathbf{P}}}^{l} l 表示层索引 作为该层的激活单元保留下来的概率,隐层(红色标注处)的概率一般设置为0.5,输入层(蓝色标注处)一般设置为较接近1的值(这可能是为了尽可能多的捕获输入特征)。每层设置完之后,可能是:(0.8, 0.5, 0.5)。这样,每个激活单元保留与否是一个伯努利随机变量(保留为1,不保留为0),为每个激活单元独立的指定一个(0,1)(0,1)(0,1)之间的随机数{R}^{l}_{j}j 表示该层哪一个激活单元,若{R}^{l}_{j}大于或等于该层设定的概率\mathbf{\mathit{\mathbf{P}}}^{l},则删除该激活单元,否则保留。

        下面简单解释Dropout具有集成学习效应的原因。应用Dropout到神经网络可以看做从原始神经网络中抽取一个更为“稀疏”的神经网络,一个具有 n\mathbf{\mathit{}} 个激活单元的神经网络最多大约可以抽出 2^{n} 个“稀疏”的神经网络,将训练过程中产生的所有“稀疏”神经网络的参数按照一定策略进行加权,产生最终的模型,这正是集成学习的要义所在!


使用Dropout训练神经网络

       神经网络一般通过Mini-Batch和梯度下降进行训练,加入Dropout后依然如此。不同之处在于在每次Mini-Batch训练之前,从当前的神经网络中抽出一个“稀疏”的神经网络进行前向和反向传播,若经过N\mathit{} 次Mini-Batch过后模型参数收敛到一定误差之内,则此时产生了 N\mathit{} 个不同的“稀疏”神经网络,每个“稀疏”的神经网络的结构可能不同,如下图所示:

扫描二维码关注公众号,回复: 4246604 查看本文章
Dropout神经网络训练过程中产生的“稀疏”神经网络示意图 图 2 Dropout神经网络训练过程中产生的“稀疏”神经网络

        参数的更新规则是将所有“稀疏”神经网络中对应位置的参数的梯度值进行平均,作为最终模型该参数的最终梯度值。其中,若某一参数未出现在某一“稀疏”神经网络中,则该“稀疏”神经网络对应的参数梯度值为0。如图,设 w_{32} 初始值为 0.8,Mini-Batch One对应该参数的梯度值为 0.9,Mini-Batch Two对应该参数的梯度值为 0.7,Mini-Batch Three中对应该参数的梯度值为 0,若此时模型已收敛到误差范围之内(实际训练过程中还会经历多次epoch,这里仅用一次epoch进行简化说明),则该参数对应的梯度值为 \partial w_{32} = (0.8 + 0.9 + 0.7 + \mathbf{0})\ /\ 4 = 0.6 。结合上图以及参数的更新规则可以直观感受到Dropout具有的集成学习效应。

Dropout神经网络的前向传播过程

        这里重点介绍一下Dropout神经网络的前向传播过程,其反向传播过程与没有使用Dropout的神经网络训练过程相同。其前向传播公式如下:

                                                             \center r_{j}^{(l)} \sim Bernoulli(p), \ \ \ \ (1)

                                                             \tilde{\mathbf{y}}^{l} = \mathbf{r}^{(l)} * \mathbf{y}^{(l)},\ \ \ \ (2)

                                                             z_{i}^{(l+1)} = \mathbf{w}_{i}^{l+1}\tilde{\mathbf{y}}^{l} \ + \ b_{i}^{(l+1)},\ \ \ \ (3)

                                                              y_{i}^{(l+1)} = f(z_{i}^{(l+1)}),\ \ \ \ (4)

       l 为层索引,ij为某一层中的激活单元索引,r_{j}^{(l)} 为第 l 层中的第 j 个激活单元设定的随机保留(p 等于1)概率,与未使用Dropout的神经网络前向传播差别在于公式(1)和(2)。


训练Dropout神经网络的一些建议

  1. Dropout rate(删除比率):  试数据集规模而定。
  2. Dropout神经网络由于在前后传播中引入较多的噪音,激活单元之间的梯度值会发生相互抵消的  现象,为此,Dropout神经网络的学习率应该是非Dropout神经网络学习率的10-100倍,或者使用0.95-0.99之间的一个动量值。
  3.   Dropout + Max-norm Regularization:  加上Max-norm Regularization,是为了保持建议2的优势之外,权重不会因为学习率过大而出现爆炸。半径值一般设未3-4之间。

猜你喜欢

转载自blog.csdn.net/gaoxueyi551/article/details/81144016