【精读AI论文】dropout----(A Simple Way to Prevent Neural Networks from Overfitting)

前言

前两天看的那个hinton作者的dropout(笔记在这里),据说他是第一个提出dropout的人,今天看的这个论文是dropout里比较普遍熟知的论文。

题目: A Simple Way to Prevent Neural Networks fromOverfitting

原文下载地址:https://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf

这篇论文看上去比上一篇dropout格式上不知道正规多少,摘要引言准备工作流程按部就班非常清晰。

1.摘要 (Abstract)

这里作者也是提出了过拟合的问题,并且说明了通过N多个不同的大型网络融合的方法来处理过拟合是很难的,这种用很多种模型融合起来处理过拟合问题也是我在上一篇论文复现的时候看到作者处理的方法(集成学习 bagging方法),思想上就是 不同的模型可能过拟合不同的数据,将他们融合,或者说将结果平均化处理,可以让这些不同模型之间过拟合的数据 ’相互抵消‘ 达到改善过拟合的效果。

作者后面说可以使用dropout的思想,解决这个问题,并且提到了关键方法是: randomly drop units (along with their connections) 随机丢弃节点和他的连接路径?这里保留一个疑问,作者应该是大致说了一下方法,在之前dropout上的思想是 被dropout中的节点重置输出为0,从而使权重不更新,达到不学习的效果,而这里作者说删除节点和链接?

2.引言 (Introduction)

这里作者再说了一下过拟合发生的原因。

一句话总结:数据规模太小,模型太复杂。这就导致复杂的模型将数据的噪声也训练上了。

作者说在写这篇论文之前也有了很多人去处理这个事,比如上一篇dropout论文,解决方法有:Hinton提出的L2正则化,L1正则化还有软权重共享和提前终止等。

关于 L1 、L2正则化:

就是在损失函数loss上增加了L1或L2范数项,达到参数惩罚的作用,即实现了正则化的效果,从而称为L1/L2正则化。

关于软权值共享:

权值共享是为了减少网络参数的一种手段,而软权值共享中的共享是形似的权值。
软权值共享利用高斯混合模型来对模型实施正则化,从而对损失函数进行最优化,得出权值和混合模型的参数,正则化借助简单的高斯分布变成了混合高斯。

后面说到一个不可取的不考虑计算成本的方法,就是根据训练数据的后验概率大小加权平均所有的可能参数(贝叶斯)。
作者采用了另一种策略:对指数数量级的共享参数的网络的进行平均。

文中提到一个Bayesian gold standard 贝叶斯黄金标准? 查了很多地方,只在一篇医学论文中看到了这个相关的东西,不是很理解这个黄金标准是什么意思。

之后作者又说不同网络的组合训练,集成式学习是一个很好的方法用来防止过拟合,但奈何 算力不够、数据不够、调参难、耗时等无数的问题。

言下之意就是:我没办法啊,虽然集成学习效果很好但是不行啊 不合适啊 没法用啊,只能用dropout了,dropout解决了集成学习的问题,并且效果还不错。

随后就开始介绍dropout了。

给了一张图

左边就是正常网络,右边是应用了dropout的网络,可以看到确实是摘要中说的 丢弃了节点和连接他的路径(暂时性的丢弃)。
在这里插入图片描述

作者继续给图:

左边是训练集神经元,右边是测试集神经元。

左边训练集的神经元以P概率被保留。右边测试集不做丢弃,但参数乘以p。 这里的意义就是保证训练集和测试集的输出期望一致。

在这里插入图片描述
关于期望:个人通俗的理解就是,假如有10个人拉10吨重的车,在训练集,每个人需要1吨的拉力,加入dropout后,假设概率P=0.5,只剩下5个人,这5个人需要每人2吨的拉力去拉这10吨重的车。在测试集 没有加入dropout时,如果10个人还是每个人2吨的拉力则会出错,所以每人应该是 2 * (1-p) = 1吨拉力。

这里有一个东西需要看一下 就是 Inverted-dropout 和dropout。 这是两种实现dropout的方式。

dropout:

比较老的方式,AlexNet就是用的这种方式,简单的说,在测试阶段乘以概率P。

Inverted-dropout

现在普遍使用的方式,就是在训练的时候直接除以P。

一些解释:

如果使用了dropout,神经元就可能有保留和关闭两种状态,把它看作一个离散型随机变量,它就符合概率论中的0-1分布,其输出激活值的期望变为 p*a+(1-p)*0=pa,如果保持输出期望不变,一种方法就是dropout的方法,在测试阶段乘以P,另一种就是Inverted-dropout的方法 在训练阶段乘以P。

在作者给出的图中可以看到,在测试阶段乘以P,这是dropout的实现方法。在数学层面上,两者的实现原理是一样的。

之后作者讲了一下dropout技术对于算力的影响,也就是介绍了一下参数数量级。文中说到A neural net with n units, can be seen as a collection of 2的n次方 possible thinned neural networks.

这句话的理解就是,假如有一个只有两个节点的网络,则这两个节点的所有可能情况有 2 2 2^2 22 = 4种情况,四种情况就意味着有四种网络:

  • 节点1丢 节点2留。
  • 节点1 丢 节点2丢。
  • 节点1 留 节点2丢。
  • 节点1 留 节点2留。

又因为他们是权重共享的,所以参数量依旧是 O ( n 2 ) O(n^2) On2 或者更少。

3.灵感来源 (Motivation)

这一块主要就是作者在阐述他发现dropout并应用于神经网络中的灵感,从有性繁殖谈到成功阴谋论啥的。

关于有性繁殖的灵感我在上一篇hinton的dropout中已经说过了,这就不说了。

剩下阴谋论啥的就不说了,这块我也没怎么详细看,我觉得灵感这个东西,知道来自于生物学就行了。更细节的就比较玄学了,略了略了。

4.相关工作 (Related Work)

这一块我觉得也没什么可看的 (有地方没看懂~),作者就是介绍了一下前人的工作,然后指出他们的不足,最后自己解决这些不足。

第一段作者通过实验得到的结论总结就两句话:

  • 添加噪声对无监督和有监督都有效。
  • dropout的参数最佳是 20%输入和50%的隐藏层。

随后两段作者开始介绍了前人的研究,这里有一个marginalizing out the noise. 噪音边缘化(网上查了一下就是把和dropout效果相同的正则项提取出来)。最后说了一下这些工作有缺陷,没探索隐藏层。

5.dropout模型介绍(Model Description)

这一节就是偏向数学原理的介绍了。

普通前馈操作:

在这里插入图片描述
其中:

  • L表示隐层的下标,从1~L。
  • Z表示输入层向量。
  • y表示输出层向量。
  • w和b就是权重和偏置。
  • f表示任何激活函数,论文里给了一个激活函数f(x) = 1/ (1 + exp(−x)). 是sigmoid激活函数。

添加了dropout之后的前馈操作:

其中

  • Bernounlli 就是伯努利随机变量。
  • *号 表示元素乘积。

第L层的输出 y ( l ) y ( l ) y(l) 经过dropout变成 y ( l ) y \textbf y^{(l)}y y(l)y

L+1层的输入和输出算法不变。在应用BP进行训练时,只对子网络的参数求导即可,测试时子网络的参数需要被缩放: W t e s t ( l ) = p W ( l ) W^{(l)}_{test}=pW^{(l)} Wtest(l)=pW(l),这里就是上面说的让他们有相同的期望。

6.训练过程 (Learning Dropout Nets)

这里说了一下训练过程的细节。

  • 使用随机梯度下降的方法,采用dropout策略,对每个mini_batch的结果取平均(每一次的epoch都会因为dropout从而产生不同结构的网络,所以这里取平均结果就体现了我在上面所说的过拟合‘相互抵消’)。
  • 被dropout的神经元上的参数不更新。注意:这里是不更新!并不是让他的权重或者参数变成0,如果非要这样说,那只能说 仅该节点对参数的变化贡献为0。 我在查资料的时候看到很多博主或者知识博客将这里直接写成 将 权重 置为0,我认为这样是不准确的。这里其实稍微想一下就懂了,假设在某一隐藏层的节点被dropout了,如果该被dropout的节点将上一层节点传过来的参数直接重置成0,那岂不是意味着在该节点之前的节点全部白训练了吗,显然是不对的,这里正确的理解应该是在之前论文中理解的那样,如果该节点被dropout,则强制重置该节点输出值为0,使得其权重更新为0,达到不更新参数的目的。
  • dropout 可以和各种正则化策略混合使用,比如 退火法,momentum,L2正则化。
  • 作者还发现一种正则化的方法对dropout很有用就是L2范式约束正则化,这块我觉得应该是借鉴Hinton大佬的那一篇droopout把,之前在读那一篇论文的时候Hinton提出将惩罚措施改成限制措施,就是加入的L2范式。这里和那里的说法一样,加入一个超参数C,模型在 ∣ ∣ w ∣ ∣ 2 < C ||w||_2 < C w2<C 状态下被约束。
  • 混合使用各种正则技巧搭配dropout有更好的效果,还是和之前的hinton的那篇dropout一样,限制了之后就可以将学习率边的大,增大了探索空间。且不会出现梯度爆炸的现象。

之后论文的第七页中的5.2小节,一开始介绍他们的dropout方案应用在预训练上还不错,也提到了将预训练结果 乘以 1 / p 1/p 1/p ,这就是上面我们说的期望保持一致。要么你训练 除 p p p 就是乘以 1 / p 1/p 1/p ,要么测试集乘以 p p p

这里作者提到一个关键信息:We were initially concerned that the stochastic nature of dropout might wipe out the information in the pretrained weights.This did happen when the learning rates used during finetuning were comparable to the best learning rates for randomly initialized nets.

这块翻译过来:我们最初担心 dropout 的随机性可能会消除预训练权重中的信息。当微调过程中使用的学习率与随机初始化网络的最佳学习率相当时,确实会发生这种情况。

我先尝试理解了一下这块作者在说一个什么问题,可能就相当于迁移学习?就是预训练好了一个网络权重,当用这个预训练模型加载到自己模型的时候开始微调,微调过程发现dropout会消除一些预训练模型里的参数信息。

之前对于dropout我一直有一个困惑就是,50%的丢弃率,有没有可能对于一个有100个特征的图片,其中10个非常重要的特征都被dropout了(在线性层的开始dropout),虽然这样的概率很小,但是如果发生那结果就直接崩了。

在这里作者是不是等于侧面回答了我这个困惑,就是有可能发生这种情况?

我也想过这种情况的解决办法和发生概率,如果在中间层隐层发生这样的情况其实是不用担心的,因为中间隐层的某一些节点被dropout了并不会丢失全部重要信息,毕竟是全连接网络,前一层还有这些重要信息给本层的其他节点。

但是如果发生在输入之后立即dropout呢?比如下图这样:

第一列输入特征的节点如果被dropout掉了,则后面的全部节点都无法学习到这个节点所携带的特征,那如果开局512个特征dropout掉了最重要的30个特征,结果岂不是崩了。。。

后来我也想了想,发生这种情况的概率极低,毕竟输入的特征量巨大,并且还有很多轮的epoch。

作者随后也提出了解决办法就是设置较小的学习率,确实,学习率较小的话,侧面等于将特征数量几何倍放大,这样丢掉全部重要特征的概率可能比买彩票还低。

论文的第六章,一直到14页都是实验结果,略了略了。

7.原因刨析(Salient Features)

这一章在解读dropout防止过拟合的可能原因,放了一张图:

左边没有dropout,右边有 dropout p=0.5。

在这里插入图片描述

可以看到左边的特征检测不是很明显,右边很明显。

左边的网络单元之间会因为损失函数而弥补其他单元的错误,这会导致这些单元之间有复杂的协同适应,返回来导致过拟合现象。
而右边的网络加入了dropout,随机使得某些单元‘失效’,所以只能依赖各种不同的前后节点来更新。这一定程度上防止了这种协同适应,从而防止过拟合现象,增加泛化能力。

总结一下后面这几个实验的结果:

  • dropout里的丢弃率P 最好的参数是0.5。也就是50%的丢弃率
  • 当数据量非常小的情况下,dropout带来的效果很小(或无效果)。
  • 蒙特卡洛方法(结果取平均值)随着采样率的增加效果越来越好,甚至可以超过权重缩放(rescale),伴随而来的是计算量的增加,但两者的方差接近,故权重缩放是一个比较合适的方法,

后面一直到23页介绍将dropout改进或者应用到各种东西上面,里面有很多东西我没法看了,比如什么 受限玻尔兹曼机(RBM)啊 什么乘性高斯噪声。看不到。额 后面接触到了再看吧。最后的Conclusion也没有说什么新的东西,谈了谈展望什么的,并不是本次的重点,大概看了看 过了。

为什么输出置为0就可以使这个神经元失效?

先看一下使权重W更新的反向传播公式:

在这里插入图片描述
可以看到,对 w w w 的偏导是与 a j a_j aj 相关的,如果 a j a_j aj为0那么偏导为0,即本次训练 w w w 不更新。

关于有性繁殖

在之前的那一篇dropout里我已经说到过有性繁殖的思考了,在这篇论文过后有了新的一些感悟,dropout是防止过拟合的手段,随机丢弃了一些节点,也就是说这使得每一个节点都不知道他要和谁进行交配,即每一个节点都不知道所要配合的上一个节点是谁。

为什么dropout可以防止过拟合大杂烩!

看完这两篇文章,基本对dropout有了全新的认识,来总结一下为什么dropout可以防止过拟合。

  • 1.模型集成,类似于我前面说的多模型之间的过拟合数据‘相互抵消’的思想。
  • 2.记忆随机性,随机抹去之前的记忆,不用死套了。
  • 3.相互依赖性减少,随机丢弃嘛,没办法准确依赖上一个节点进行学习了,也就是论文中常提到的减少协同作用。
  • 4.有性繁殖,作者的灵感来源,可以更好的抵抗周围环境的变化了。
  • 5.稀疏性,这个也在前面说过了。

小总结

读完这篇论文之后收获还是非常大的,解决了一直疑惑的那个丢掉重要特征的问题,虽然没有正面解决,但也算是让我想通了,侧面解决了吧。而且这篇才能叫论文吧,之前hinton大佬的那篇,顶多算是实验报告哈哈。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: dropout是一种简单的方法,用于防止神经网络过度拟合。它通过在训练过程中随机地将一些神经元的输出设置为零,从而减少了神经元之间的依赖关系,使得网络更加鲁棒和泛化能力更强。这种方法可以有效地提高模型的性能,并且在实际应用中得到了广泛的应用。 ### 回答2: dropout是一种简单有效的防止神经网络过拟合的方法,其原理是在训练神经网络时随机选择一部分神经元不参与计算。具体来说,对于每个训练样本,我们以一定的概率(通常是50%)随机将其中一些神经元的输出设为0。这样做有两个好处:一是可以减少每个神经元的依赖性,从而使网络更加健壮,避免“依赖某些特定神经元”的问题;二是可以防止过拟合,因为每个神经元都有一定的概率被“关闭”,这样可以避免某些神经元在处理训练数据时过于自信,而在处理测试数据时失效。实际实现时,dropout可以在每个层之间添加dropout层或者在每个全连接层之前添加dropout操作。使用dropout时需要注意,dropout的概率不能过高,否则会使网络无法学习到足够的信息。同时,dropout在测试时需要关闭,因为在测试时我们需要利用所有的神经元进行最终的预测。总的来说,dropout是一种简单而有效的防止神经网络过拟合的方法,可以提高网络的泛化性能和鲁棒性。 ### 回答3: 随着深度学习的发展,人们逐渐意识到过拟合问题的严重性。为了解决这个问题,大量的复杂度更高的网络或方法被提出,如L1,L2正则化,数据增强,dropout等。本文将重点介绍dropout这种简单且有效的方法。 dropout是由Geoff Hinton在2012年提出的。其基本思想是在训练神经网络时,通过以概率p(通常为0.5)随机地使一些隐含层单元输出为0。而在预测时,dropout仅仅将所有的单元都保留下来,并将其输出乘以概率p,以避免模型过度依赖于任何一个单元。 dropout的实现方法非常简单,主要包括两个步骤。第一步是在训练时,以概率p决定哪些单元要被保留,哪些要被丢弃。第二步是在预测时,将所有的单元都保留下来,同时将其输出与概率p相乘。 dropout具有以下几个优点: 1. dropout可以显著减少过拟合。通过在模型中随机丢弃一些单元,可以有效地减少模型之间的相互依赖,避免复杂模型过度学习训练数据,从而提高泛化能力。 2. dropout可以提高模型学习速度。相比其他正则化方法,dropout的运算速度非常快,只需要在前向传播中做一些简单的随机化,不会对反向传播过程带来额外的复杂度。 3. dropout可以解决模型中的特征选择问题。dropout的随机丢弃可以促使每个神经元的输出都得到充分利用,即使是那些在训练集中很少出现的特征也会得到一定程度的学习,从而避免了一些过拟合问题。 总之,dropout是一种简单且实用的正则化方法,可以显著减少神经网络过拟合的问题,同时也具有很高的运行速度和模型准确性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

深度不学习!!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值