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的机制是怎样的那?
首先, 为每一层(输出层除外)单独设定一个概率值 ( 表示层索引 ) 作为该层的**单元保留下来的概率,隐层(红色标注处)的概率一般设置为0.5,输入层(蓝色标注处)一般设置为较接近1的值(这可能是为了尽可能多的捕获输入特征)。每层设置完之后,可能是:(0.8, 0.5, 0.5)。这样,每个**单元保留与否是一个伯努利随机变量(保留为1,不保留为0),为每个**单元独立的指定一个(0,1)之间的随机数, 表示该层哪一个**单元,若大于或等于该层设定的概率,则删除该**单元,否则保留。
下面简单解释Dropout具有集成学习效应的原因。应用Dropout到神经网络可以看做从原始神经网络中抽取一个更为“稀疏”的神经网络,一个具有 个**单元的神经网络最多大约可以抽出 个“稀疏”的神经网络,将训练过程中产生的所有“稀疏”神经网络的参数按照一定策略进行加权,产生最终的模型,这正是集成学习的要义所在!
使用Dropout训练神经网络
神经网络一般通过Mini-Batch和梯度下降进行训练,加入Dropout后依然如此。不同之处在于在每次Mini-Batch训练之前,从当前的神经网络中抽出一个“稀疏”的神经网络进行前向和反向传播,若经过 次Mini-Batch过后模型参数收敛到一定误差之内,则此时产生了 个不同的“稀疏”神经网络,每个“稀疏”的神经网络的结构可能不同,如下图所示:
图 2 Dropout神经网络训练过程中产生的“稀疏”神经网络
参数的更新规则是将所有“稀疏”神经网络中对应位置的参数的梯度值进行平均,作为最终模型该参数的最终梯度值。其中,若某一参数未出现在某一“稀疏”神经网络中,则该“稀疏”神经网络对应的参数梯度值为0。如图,设 初始值为 0.8,Mini-Batch One对应该参数的梯度值为 0.9,Mini-Batch Two对应该参数的梯度值为 0.7,Mini-Batch Three中对应该参数的梯度值为 0,若此时模型已收敛到误差范围之内(实际训练过程中还会经历多次epoch,这里仅用一次epoch进行简化说明),则该参数对应的梯度值为 。结合上图以及参数的更新规则可以直观感受到Dropout具有的集成学习效应。
Dropout神经网络的前向传播过程
这里重点介绍一下Dropout神经网络的前向传播过程,其反向传播过程与没有使用Dropout的神经网络训练过程相同。其前向传播公式如下:
为层索引,,为某一层中的**单元索引, 为第 层中的第 个**单元设定的随机保留( 等于1)概率,与未使用Dropout的神经网络前向传播差别在于公式(1)和(2)。
训练Dropout神经网络的一些建议
- Dropout rate(删除比率): 试数据集规模而定。
- Dropout神经网络由于在前后传播中引入较多的噪音,**单元之间的梯度值会发生相互抵消的 现象,为此,Dropout神经网络的学习率应该是非Dropout神经网络学习率的10-100倍,或者使用0.95-0.99之间的一个动量值。
- Dropout + Max-norm Regularization: 加上Max-norm Regularization,是为了保持建议2的优势之外,权重不会因为学习率过大而出现爆炸。半径值一般设未3-4之间。