美文网首页
Dropout作用原理

Dropout作用原理

作者: 三方斜阳 | 来源:发表于2021-05-03 21:21 被阅读0次

    一. 简介:

    在神经网络的训练过程中,对于一次迭代中的某一层神经网络,先随机选择其中的一些神经元并将其临时隐藏(丢弃),然后再进行本次训练和优化。在下一次迭代中,继续随机隐藏一些神经元,如此直至训练结束。由于是随机丢弃,故而每一个mini-batch都在训练不同的网络。

    二. Dropout 出现的原因:

    1. 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象。在训练神经网络的时候经常会遇到过拟合的问题,过拟合具体表现在:模型在训练数据上损失函数较小,预测准确率较高;但是在测试数据上损失函数比较大,预测准确率较低。
    2. 过拟合是很多机器学习的通病。如果模型过拟合,那么得到的模型几乎不能用。为了解决过拟合问题,一般会采用模型集成的方法,即训练多个模型进行组合。此时,训练模型费时就成为一个很大的问题,不仅训练多个模型费时,测试多个模型也是很费时。
    3. Dropout可以比较有效的缓解过拟合的发生,在一定程度上达到正则化的效果。
    4. Dropout 可以被认为是集成戴昂深层神经网络的实用的Bagging 方法,Bagging 涉及训练多个模型,并在每个测试样本上评估多个模型,当每个模型都是一个很大的神经网络时。这显然不切实际,Dropout 提供了一种廉价的 Bagging 集成近似,能够训练和评估指数级数量的神经网络。具体的,Dropout 训练的集成包括所有从基础网络除去非输出单元后形成的子网络。
    5. Bagging 下要求所有模型都是独立的,在 Dropout 下,所有模型共享参数,其中每个模型都继承父神经网络参数的不同子集,参数共享使得在有限可用的内存下表示指数级数量的模型变得可能。Bagging下每一个模型在其相应的训练集上训练到收敛,Dropout 下大部分模型都没有显示地被训练,取而代之的是,在单个步骤中我们训练一小部分子网络,参数共享会使得剩余的子网络也能有好的参数设定。除此之外,Bagging和 Dropout 算法一样,例如每个子网络中遇到的训练集确实是有放回采样的原始训练集中的一个子集。

    三. 具体细节:

    1. Dropout可以作为训练深度神经网络的一种trick供选择。在每个训练批次中,在前向传播的时候,让某个神经元的激活值以一定的概率p 停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征,如图所示:
    2. 一个标准的神经网络一般是这样的:

    首先把 x 通过网络前向传播,然后把误差反向传播以决定如何更新参数让网络进行学习。使用Dropout之后,过程变成:
    1)首先随机(临时)删掉网络中一半的隐藏神经元,输入输出神经元保持不变:

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

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

    在训练时,每个神经单元以概率p被保留(Dropout丢弃率为1−p);在预测阶段(测试阶段),每个神经单元都是存在的,权重参数w要乘以p,输出是:pw
    比如我们 dropout 比率选择0.4,那么这一层神经元经过dropout后,1000个神经元中会有大约400个的值被置为0而丢弃不用。
    以上就是 Dropout 机制实现的具体细节。

    四. 为什么Dropout 可以解决过拟合?

    1. 取平均的作用:
    • 先回到标准的模型即没有dropout,我们用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果,此时我们可以采用 “5个结果取均值”或者“多数取胜的投票策略”去决定最终结果。
    • 例如3个网络判断结果为数字9,那么很有可能真正的结果就是数字9,其它两个网络给出了错误结果。这种“综合起来取平均”的策略通常可以有效防止过拟合问题。因为不同的网络可能产生不同的过拟合,取平均则有可能让一些“相反的”拟合互相抵消。
    • dropout掉不同的隐藏神经元就类似在训练不同的网络,随机删掉一半隐藏神经元导致网络结构已经不同,整个dropout过程就相当于对很多个不同的神经网络取平均。而不同的网络产生不同的过拟合,一些互为“反向”的拟合相互抵消就可以达到整体上减少过拟合。
    1. 减少神经元之间复杂的共适应关系:
    • 用作者原话是“在标准神经网络中,每个参数接收的导数表明其应该如何变化才能使最终损失函数降低,并给定所有其它神经网络单元的状态。因此神经单元可能以一种可以修正其它神经网络单元的错误的方式进行改变。而这就可能导致复杂的共适应(co-adaptations)。由于这些共适应现象没有推广到未见的数据,将导致过拟合。我们假设对每个隐藏层的神经网络单元,Dropout通过使其它隐藏层神经网络单元不可靠从而阻止了共适应的发生。因此,一个隐藏层神经元不能依赖其它特定神经元去纠正其错误。”
    • 因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况 。迫使网络去学习更加鲁棒的特征 ,这些特征在其它的神经元的随机子集中也存在。
    • 换句话说假如我们的神经网络是在做出某种预测,它不应该对一些特定的线索片段太过敏感,即使丢失特定的线索,它也应该可以从众多其它线索中学习一些共同的特征。从这个角度看dropout就有点像L1,L2正则,减少权重使得网络对丢失特定神经元连接的鲁棒性提高。
    1. Dropout类似于性别在生物进化中的角色:
    • 物种为了生存往往会倾向于适应这种环境,环境突变则会导致物种难以做出及时反应,性别的出现可以繁衍出适应新环境的变种,有效的阻止过拟合,即避免环境改变时物种可能面临的灭绝(这个解释。。。因吹斯听)。

    五. 总结:

    当前Dropout被大量利用于全连接网络,而且一般认为设置为0.5或者0.3,而在卷积网络隐藏层中由于卷积自身的稀疏化以及稀疏化的ReLu函数的大量使用等原因,Dropout策略在卷积网络隐藏层中使用较少。总体而言,Dropout是一个超参,需要根据具体的网络、具体的应用领域进行尝试。

    • Dropout类似于bagging ensemble减少variance。也就是投通过投票来减少可变性。通常我们在全连接层部分使用dropout,在卷积层则不使用。但dropout并不适合所有的情况,不要无脑上Dropout。

    • Dropout一般适合于全连接层部分,而卷积层由于其参数并不是很多,所以不需要dropout,加上的话对模型的泛化能力并没有太大的影响。

    • 一般在网络的最开始和结束的时候使用全连接层,而hidden layers则是网络中的卷积层。所以一般情况,在全连接层部分,采用较大概率的dropout而在卷积层采用低概率或者不采用dropout。

    参考:
    深度学习中Dropout原理解析_Microstrong-CSDN博客_dropout
    深度学习(二十二)Dropout浅层理解与实现_hjimce的专栏-CSDN博客_dropout实现
    Dropout解决过拟合问题 - 知乎 (zhihu.com)

    相关文章

      网友评论

          本文标题:Dropout作用原理

          本文链接:https://www.haomeiwen.com/subject/jmqqdltx.html