Deep Learning -- Dropout

原文站点:https://senitco.github.io/2017/09/08/deep-learning-dropout/

  训练神经网络模型时(Nerual Network),如果网络规模较大,训练样本较少,为了防止模型过拟合,通常会采用Regularization(正则化,e.g. L2-norm、Dropout)。Dropout的基本思想是在模型训练时,让某些神经元以一定的概率不工作。

Overview

  深度学习领域大神Hinton在2012的一篇文献《Improving neural networks by preventing co-adaptation of feature detectors》中提出,在每次训练的时候,让一半的特征检测器停止工作,可以提高网络模型的泛化能力。Hinton认为过拟合可通过阻止某些特征的协同作用来缓解,并将这种方法称之为Dropout。
  Dropout的工作原理是在模型的迭代训练过程中,让网络中的某些隐层节点(神经元)以一定概率不工作,相当于去除部分节点,但节点的权重会保留下来,只是暂时不更新。每次迭代去除的节点不一样,这样相当于每次训练不同的网络,而且实现了网络的权值共享。

Procedure

  在训练一个普通的多层神经网络时,其流程是:将输入样本通过网络前向传播计算每次的激活值,并得到最后的Loss Function,然后反向传播误差并更新每层的权值参数。使用Dropout后,网络模型变化如下图所示:


dropout.jpg

如何实现让神经元以一定概率停止工作,可参考以下公式,一般情况下,网络的前向计算公式如下:

z(l+1)i=w(l+1)iy(l)+b(l+1)i

y(l+1)i=f(z(l+1)i)

采用Dropout后计算公式变成:
r(l)jBernoulli(p),y¯(l)=r(l)y(l)

z(l+1)i=w(l+1)iy¯(l)+b(l+1)i,y(l+1)i=f(z(l+1)i)

上式中, r(l)j 服从概率为 p 的伯努利二项分布,r(l)为生成的0、1向量。通过将激活值置0,实现了网络中 l 层部分节点停止工作,而l+1层的输入中,也只考虑了 l 层中非0的节点(其实考虑了所有节点,只是输出为0的结点对下一层网络不起作用,在反向传播时,也无法更新和其相关的网络权值)。关于Dropout还有几点需要注意:
- 如果网络某一层的神经元个数为1000,dropout的比例为0.4(p=0.6),那么经过Dropout操作后,大约会有400个神经元的激活值会置0
- 每次训练迭代,都会重新随机选取一定比例的节点激活值置0,因此每次删除的节点会有差异
- 反向传播时,非0节点的权值参数得到更新,而0节点的权值保持不变
- 删除某些节点使其激活值为0后,需要对其他节点进行rescale,也就是乘以1/p(p是保留节点的比例);如果训练时没有rescale,测试时则需要对权重rescale, Wtest=pW

Explanation

  关于Dropout能够缓解过拟合、提高模型泛化能力的几点直观解释:
- 减少神经元之间的共适应关系:在迭代训练时,隐层节点以一定概率随机出现(或消失),因此不能保证每两个节点同时出现,这样权值的更新不再依赖于有固定关系的隐层节点,阻止了某些特征在其他特征下才有效果的情况,迫使网络学习更鲁棒的特征
- 模型平均作用:Dropout删除不同的神经元,类似于每次训练不同的网络,整个训练过程相当于对不同的模型取平均,而且不同的网络结构共享权值参数

Summary

  Dropout比较适用于大型网络缓解过拟合,能够取得明显的效果,但网络的训练速度也会明显变慢,不过对测试没有影响。

reference

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值