深度学习: Dropout

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前后的神经网络,如下:

        

         以上图为例,可以看到这是一个由输入层,两个隐层和输出层组成的神经网络。部分激活单元连同输入和输出一并被删除。那么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{} 个不同的“稀疏”神经网络,每个“稀疏”的神经网络的结构可能不同,如下图所示。

 

 

     其中,若某一参数未出现在某一 “稀疏” 神经网络中,则该 “稀疏” 神经网络中对应的参数梯度的变化值为0。如图,设 w^2_{13} 初始值为 0.8,第一轮minibatch迭代完成后参数的梯度值保持0.8不变,第二轮minibatch迭代完成后参数的梯度值变为 0.7,若此时模型已收敛到误差范围之内(实际训练过程中会经历多次epoch,这里仅用一次epoch,两个minibatch来简化说明),则该参数最终的梯度值为 0.7 。


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 个激活单元是否保留(保留为1,不保留为0),与未使用Dropout的神经网络前向传播差别在于公式(1)和(2)。


Dropout神经网络的测试过程

      在测试过程中,不再对网络进行drop操作,保留所有激活单元及其输入输出,唯一不同之处在于每个权重 w^l_{ij} 在进行计算时需要乘上保留概率 p^l,这是为了保证训练时的激活单元的 期望输出 和测试时的激活单元输出保持一致。即变为 p^lw^l_{ij}\leftarrow w^l_{ij} 。其它计算过程保持不变。

     设产生了 n 个“瘦小”的神经网络,对于训练完成之后的某个权重 ww 在第 i 个神经网络的对应值为 w_i^n,  则其期望如下

                                                              E(w)=pw^n_1 + pw^n_2+......+pw^n_n=pw

      当 p 趋于 1 时,便是没有dropout的神经网络情形。若 p 的值为 0.5,  但在测试时不乘以0.5,则测试的输出将是训练时输出的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之间。
  4. 如果训练数据非常多,使用Dropout与否效果差别不大。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值