dropout基本原理详解

何为dropout?

Dropout是Srivastava等人在2014年发表的一篇论文中,提出了一种针对神经网络模型的正则化方法Dropout
(《A Simple Way to Prevent NeuralNetworks from Overfitting》)。

那Dropout在训练模型中是如何实现的呢?

Dropout的做法是在训练过程中按一定比例(比例参数可设置)随机忽略或屏蔽一些神经元。
这些神经元会被随机“抛弃”,也就是说它们在正向传播过程中对于下游神经元的贡献效果暂时消失了,
反向传播时该神经元也不会有任何权重的更新。
所以,通过传播过程,Dropout将产生和L2范数相同的收缩权重的效果。随着神经网络模型的不断学习,
神经元的权值会与整个网络的上下文相匹配。神经元的权重针对某些特征进行调优,进而产生一些特殊化。
周围的神经元则会依赖于这种特殊化,但如果过于特殊化,模型会因为对训练数据的过拟合而变得脆弱不堪。
神经元在训练过程中的这种依赖于上下文的现象被称为复杂的协同适应(Complex Co-Adaptations)。

效果呢?

加入了Dropout以后,输入的特征都是有可能会被随机清除的,所以该神经元不会再特别依赖于任何一个输入特征,
也就是说不会给任何一个输入设置太大的权重。由于网络模型对神经元特定的权重不那么敏感。
这反过来又提升了模型的泛化能力,不容易对训练数据过拟合。

Dropout训练的集成包括所有从基础网络除去非输出单元形成子网络,
在这里插入图片描述
Dropout训练所有子网络组成的集合,其中子网络是从基本网络中删除非输出单元所构建的。我们从具有两个可见单元和两个隐藏单元的基本网络开始,这4个单元有16个可能的子集。图5-7展示了从原始网络中丢弃不同的单元子集而形成的所有的16个子网络。在这个例子中,所得的大部分网络没有输入单元或没有从输入连接到输出的路径。当层较宽时,丢弃所有从输入到输出的可能路径的概率变小,所以这个问题对于层较宽的网络不是很重要。

较先进的神经网络基于一系列仿射变换和非线性变换,我们可以将一些单元的输出乘零,这样就能有效地删除一些单元。这个过程需要对模型进行一些修改,如径向基函数网络,单元的状态和参考值之间存在着一定区别。为简单起见,在这里提出乘零的简单Dropout算法,被简单地修改后,可以与其他操作一起工作。
Dropout在训练阶段和测试阶段是不同的,一般在训练中使用,测试时不使用。不过在测试时,为了平衡(因训练时舍弃了部分节点或输出),一般将输出按Dropout Rate比例缩小。

如何或何时使用Dropout呢?以下是一般原则:

1)通常丢弃率控制在20%~50%比较好,可以从20%开始尝试。如果比
例太低则起不到效果,比例太高则会导致模型的欠学习。
2)在大的网络模型上应用。当Dropout应用在较大的网络模型时,更有可能得到效果的提升,模型有更多的机会学习到多种独立的表征。
3)在输入层和隐藏层都使用Dropout。对于不同的层,设置的keep_prob也不同,一般来说神经元较少的层,会设keep_prob为1.0或接近于1.0的数;神经元较多的层,则会将keep_prob设置得较小,如0.5或更小。
4)增加学习速率和冲量。把学习速率扩大10~100倍,冲量值调高到0.9~0.99。
5)限制网络模型的权重。大的学习速率往往会导致大的权重值。对网络的权重值做最大范数的正则化,被证明能提升模型性能。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI扩展坞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值