深度学习:Dropout解决过拟合问题

在学习深度学习时,常常有人会问到这样一个问题:Dropout技术为什么能防止过拟合?

当然,简单的回答是:防止参数过分依赖训练数据,增加参数对数据集的泛化能力。

Overfitting 也被称为过度学习,过度拟合。 它是机器学习中常见的问题。 举个Classification(分类)的例子。

深度学习:Dropout解决过拟合问题_第1张图片

过拟合

图中黑色曲线是正常模型,绿色曲线就是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 的做法是从根本上让神经网络没机会过度依赖.

假设我们要训练这样一个神经网络

深度学习:Dropout解决过拟合问题_第2张图片

 

输入是x输出是y,正常的流程是:我们首先把x通过网络前向传播然后后把误差反向传播以决定 如何更新参数让网络进行学习。使用dropout之后过程变成:


1. 首先随机(临时)删掉网络中一半的隐藏神经元,输入输出神经元保持不变(下图中虚线为部分临时被删除的神经元)

深度学习:Dropout解决过拟合问题_第3张图片



2. 然后把输入x通过修改后的网络前向传播,然后把得到的损失结果通过修改的网络反向传播。一小批训练样本执行完这个过程后就按照随机梯度下降法更新(没有被删除的神经元)对应的参数(w,b)。

3. 然后继续重复这一过程:

  • 恢复被删掉的神经元(此时 被删除的神经元 保持原样,而没有被删除的神经元已经有所更新)
  • 从隐藏神经元中随机选择一个一半大小的子集 临时删除掉(备份被删除神经元的参数)。
  • 对一小批训练样本,先前向传播然后反向传播损失并根据随机梯度下降法更新参数(w,b) (没有被删除的那一部分参数得到更新,删除的神经元参数保持被删除前的结果)

不断重复这一过程。

dropout 的过程好像很奇怪,为什么说它可以解决过拟合呢?(正则化)

  • 取平均的作用: 先回到正常的模型(没有dropout),我们用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果,此时我们可以采用 “5个结果取均值”或者“多数取胜的投票策略”去决定最终结果。(例如 3个网络判断结果为数字9,那么很有可能真正的结果就是数字9,其它两个网络给出了错误结果)。这种“综合起来取平均”的策略通常可以有效防止过拟合问题。因为不同的网络可能产生不同的过拟合,取平均则有可能让一些“相反的”拟合互相抵消。dropout掉不同的隐藏神经元就类似在训练不同的网络(随机删掉一半隐藏神经元导致网络结构已经不同),整个dropout过程就相当于 对很多个不同的神经网络取平均。而不同的网络产生不同的过拟合,一些互为“反向”的拟合相互抵消就可以达到整体上减少过拟合。
  • 减少神经元之间复杂的共适应关系: 因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。(这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况)。 迫使网络去学习更加鲁棒的特征 (这些特征在其它的神经元的随机子集中也存在)。换句话说假如我们的神经网络是在做出某种预测,它不应该对一些特定的线索片段太过敏感,即使丢失特定的线索,它也应该可以从众多其它线索中学习一些共同的模式(鲁棒性)。(这个角度看 dropout就有点像L1,L2正则,减少权重使得网络对丢失特定神经元连接的鲁棒性提高)

(还有一个比较有意思的解释是,Dropout类似于性别在生物进化中的角色:物种为了生存往往会倾向于适应这种环境,环境突变则会导致物种难以做出及时反应,性别的出现可以繁衍出适应新环境的变种,有效的阻止过拟合,即避免环境改变时物种可能面临的灭绝。 当地球都是海洋时,人类是不是也进化出了再海里生活的能力呢?)

使用Dropout正则化的技巧

原论文对很多标准机器学习问题做出了比较,并提出了下列建议:

  1. Dropout概率不要太高,从20%开始,试到50%。太低的概率效果不好,太高有可能欠拟合。

  2. 网络要大。更大的网络学习到不同方法的几率更大。
  3. 每层都做Dropout,包括输入层。效果更好。
  4. 学习率(带衰减的)和动量要大。直接对学习率乘10或100,动量设到0.9或0.99。
  5. 限制每层的权重。学习率增大会造成权重增大,把每层的模限制到4或5的效果更好。

参考:

Neural networks and deep learning

Deep learning:四十一(Dropout简单理解)

你可能感兴趣的:(深度学习)