在学习深度学习时,常常有人会问到这样一个问题:Dropout技术为什么能防止过拟合?
当然,简单的回答是:防止参数过分依赖训练数据,增加参数对数据集的泛化能力。
Overfitting 也被称为过度学习,过度拟合。 它是机器学习中常见的问题。 举个Classification(分类)的例子。
过拟合
图中黑色曲线是正常模型,绿色曲线就是overfitting模型。尽管绿色曲线很精确的区分了所有的训练数据,但是并没有描述数据的整体特征,对新测试数据的适应性较差。
Srivastava等大牛在2014年的论文《Dropout: A Simple Way to Prevent Neural Networks from Overfitting》提出了Dropout正则化。Dropout的意思是:每次训练时随机忽略一部分神经元,这些神经元dropped-out了。换句话讲,这些神经元在正向传播时对下游的启动影响被忽略,反向传播时也不会更新权重。
神经网络的所谓“学习”是指,让各个神经元的权重符合需要的特性。不同的神经元组合后可以分辨数据的某个特征。每个神经元的邻居会依赖邻居的行为组成的特征,如果过度依赖,就会造成过拟合。如果每次随机拿走一部分神经元,那么剩下的神经元就需要补上消失神经元的功能,整个网络变成很多独立网络(对同一问题的不同解决方法)的合集。
Dropout的效果是,网络对某个神经元的权重变化更不敏感,增加泛化能力,减少过拟合。
方法一: 增加数据量, 大部分过拟合产生的原因是因为数据量太少了. 如果我们有成千上万的数据, 线也会慢慢被拉直, 变得没那么扭曲 .
方法二:运用正规化. L1, L2 regularization 等等。 我们简化机器学习的公式为 y=Wx . 在过拟合中, W 的值往往变化得特别大或特别小. 为了不让W变化太大, 我们在计算误差上做些手脚. 原始的 cost 误差是 cost = (预测值-真实值)的平方. 如果 W 变得太大, 我们就让 cost 也跟着变大, 变成一种惩罚机制. 这一种形式的 正规化。
还有一种:专门用在神经网络的正规化的方法, 叫作 dropout. 在训练的时候, 我们随机忽略掉一些神经元和神经联结 , 是这个神经网络变得”不完整”. 用一个不完整的神经网络训练一次.
到第二次再随机忽略另一些, 变成另一个不完整的神经网络. 有了这些随机 drop 掉的规则, 我们可以想象其实每次训练的时候, 我们都让每一次预测结果都不会依赖于其中某部分特定的神经元. 像L1, L2正规化一样, 过度依赖的 W , 也就是训练参数的数值会很大, L1, L2会惩罚这些大的 参数. Dropout 的做法是从根本上让神经网络没机会过度依赖.
假设我们要训练这样一个神经网络
输入是x输出是y,正常的流程是:我们首先把x通过网络前向传播然后后把误差反向传播以决定 如何更新参数让网络进行学习。使用dropout之后过程变成:
1. 首先随机(临时)删掉网络中一半的隐藏神经元,输入输出神经元保持不变(下图中虚线为部分临时被删除的神经元)
2. 然后把输入x通过修改后的网络前向传播,然后把得到的损失结果通过修改的网络反向传播。一小批训练样本执行完这个过程后就按照随机梯度下降法更新(没有被删除的神经元)对应的参数(w,b)。
3. 然后继续重复这一过程:
不断重复这一过程。
dropout 的过程好像很奇怪,为什么说它可以解决过拟合呢?(正则化)
(还有一个比较有意思的解释是,Dropout类似于性别在生物进化中的角色:物种为了生存往往会倾向于适应这种环境,环境突变则会导致物种难以做出及时反应,性别的出现可以繁衍出适应新环境的变种,有效的阻止过拟合,即避免环境改变时物种可能面临的灭绝。 当地球都是海洋时,人类是不是也进化出了再海里生活的能力呢?)
原论文对很多标准机器学习问题做出了比较,并提出了下列建议:
Dropout概率不要太高,从20%开始,试到50%。太低的概率效果不好,太高有可能欠拟合。
参考:
Neural networks and deep learning
Deep learning:四十一(Dropout简单理解)