zoukankan      html  css  js  c++  java
  • 关于 Dropout 防止过拟合的问题

      关于 Dropout 可以防止过拟合,出处:深度学习领域大神 Hinton,在2012年文献:《Improving neural networks by preventing co-adaptation of feature detectors》提出的。

      【Dropout 可以防止过拟合】

      运用了dropout的训练过程,相当于训练了很多个只有半数隐层单元的神经网络(后面简称为“半数网络”),每一个这样的半数网络,都可以给出一个分类结果,这些结果有的是正确的,有的是错误的。随着训练的进行,大部分半数网络都可以给出正确的分类结果,那么少数的错误分类结果就不会对最终结果造成大的影响。

      在每次训练的时候,让一半的特征检测器停过工作,这样可以提高网络的泛化能力,Hinton把它称之为dropout。

      Hinton认为:过拟合,可以通过阻止某些特征的协同作用来缓解。在每次训练的时候,每个神经元有百分之50的几率被移除,这样可以让一个神经元的出现不应该依赖于另外一个神经元。

      每次将一个神经网络进行dropout之后就是对这个网络进行了瘦身处理,有一些参数被dropout掉,得到了一个更加简单的网络。

      【迭代过程】

      1. 在训练开始时,我们随机地“删除”一半的隐层单元,视它们为不存在;

      2. 保持输入输出层不变,按照BP算法更新神经网络中的权值(虚线连接的单元不更新,因为它们被“临时删除”了)。

      以上就是一次迭代的过程,在第二次迭代中,也用同样的方法,只不过这次删除的那一半隐层单元,跟上一次删除掉的肯定是不一样的,因为我们每一次迭代都是“随机”地去删掉一半。第三次、第四次……都是这样,直至训练结束。

      另外一个可以防止过拟合的原因是:我们可以把dropout理解为模型平均。 假设我们要实现一个图片分类任务,我们设计出了1000个网络,这1000个网络,我们可以设计得各不相同,然后我们对这1000个网络进行训练,训练完后我们采用平均的方法,进行预测,这样肯定可以提高网络的泛化能力,或者说可以防止过拟合,因为这1000个网络,它们各不相同,可以提高网络的稳定性。而所谓的dropout我们可以这么理解,这 n 个网络,它们权值共享,并且具有相同的网络层数(这样可以大大减小计算量)。我们每次dropout后,网络模型都可以看成是整个网络的子网络。(需要注意的是如果采用dropout,训练时间大大延长,但是对测试阶段没影响)。

          根据个人实际经验,dropout在数据量比较小的时候,不建议使用,效果并没有特别好,dropout的值一般来说取值为0.5效果会比较好。

    【Reference】

    1、dropout为什么能够防止过拟合

    2、浅谈 Dropout防止过拟合

  • 相关阅读:
    BZOJ 1070 修车
    BZOJ 1927 SDOI2010 星际竞速 最小费用最大流
    LOJ 2321 清华集训2017 无限之环 拆点+最小费用最大流
    EZOJ 宝石迷阵 建图+网络流匹配
    BZOJ 1711 吃饭dining/Luogu P1402 酒店之王 拆点+最大流流匹配
    POJ 1637 Sightseeing tour 建图+网络流
    POJ 1149 PIGS 建图,最大流
    【2018 1月集训 Day1】二分的代价
    【2019 1月集训 Day1】回文的后缀
    20181228 模拟赛 T3 字符串游戏 strGame 博弈论 字符串
  • 原文地址:https://www.cnblogs.com/shenxiaolin/p/9841824.html
Copyright © 2011-2022 走看看