文章目录
- 前言
- 第一页:
-
- 第一段:
- 第二段:
- 第二页
-
- 第一段
- 第二段
- 第三段
- 第3-6页
- 思考与总结
-
- dropout丢弃的是权重还是输出?
- dropout的正确性以及随机丢弃对结果的影响?
- dropout丢弃的是前一层还是后一层?
- 总结
论文下载地址:点我下载
有很多dropout的文章,我选了两个比较知名的。
一个是dropout提出的论文:《Improving neural networks by preventing co-adaptation of feature detectors》
还有一个是比较知名的dropout论文:《Dropout:A Simple Way to Prevent Neural Networks from Overfitting》
今天先看一下上面的那个。
前言
之前在复现LeNet的时候,作者用到了丢弃式卷积,已经有了Dropout的思想,后来的AlexNet VGG等也都一部分使用了Dropout,不过只知道dropout用于正则化,随机的丢弃了一部分特征不参与训练,防止了过拟合,我本来想复现一下inceptionV2的,突然想到一个问题,dropout这样随机的丢弃难道不会导致某些重要的特征丢失嘛?也想深入了解的一下dropout,所以来读读这篇论文。
第一页:
这篇论文看着很乱,没有平常论文那种摘要引言开头啥的,这篇论文就是一大串到底,然后就是附录了。
上来一段加黑的字体说 在大训练网络应用在小数据集的时候会产生过拟合现象,使用了dropout技术,随机放弃一半的神经元使其不工作,有效的防止了复杂的协同适应(prevents complex co-adaptations)。
这里这样翻译其实不太对。
co-adaptations :
意思是每个神经元学到的特征,必须结合其它的特定神经元作为上下文,才能提供对训练的帮助。
然后作者说 随机的“dropout”已经实验取得比较大的成功。
第一段:
第一段都在介绍前馈神经网络的过拟合问题,在一个大的前馈神经网络中,中间可能会有很多的隐层单元,他们能非常好的贴合训练集,但是在验证集上的效果却不好。
第二段:
第二段介绍了一种方法就是用不同的网络模型去训练相同的数据,然后取这些结果的平均,这样可以减少过拟合现象,但是这样的方法非常 ’昂贵‘ 计算成本 时间成本等都很高,所以作者在这样方法的基础上加入dropout技术,随机使得一半的神经元不工作,这样的不同网络训练方案 就不再那么 ‘昂贵’。
有一个要注意的点,就是这里所说的‘不同网络’,并不是像ResNet那样的多模型融合技术,而是当使用了dropout技术,每次一epoch都会随机丢弃不同的隐层神经元,所以每一次的epoch都是不同的网络,但是这些网络的权值是共享的。
关于这里 取平均的泛化 理解:
假如我们使用五个不同的神经网络去训练同一数据模型,得到的五个结果来取平均,或者使用多数为主的策略来定结果。比如预测数字,其中四个网络给出结果为5,另一个网络为2,则结果取多数为主的5。这种取平均的思想可以一定程度上防止过拟合的发生,因为每个网络可能过拟合不同的数据,取平均思想让这些不同网络的过拟合数据 ’相互抵消‘,从而使结果变好。在加入 了dropout技术之后,每一次的epoch都相当于一个新的网络,所以在每次epoch中就已经 ’相互抵消‘了,整体结果上自然就变好了。
不过这里保留一个问题,这样的随机丢弃,难道不会丢失重要特征吗?50%的几率丢弃,则会有很大概率导致某些重要特征从未参与训练,这样的结果是可以的吗?
第二页
第一段
作者使用 随机梯度下降 mini-batches 来训练网络,但没有使用通常的L2范数惩罚项,而是使用约束取代惩罚,对每一个隐藏节点的权值L2范数设置一个上限,这样的约束可以防止权重爆炸的同时,让学习率变大,从而可以探索更多的地方。
即:当w的L2范式要大于某个阈值c时,把它进行一个规范化操作(即同时除以该L2范数值)。
L2范式:
L2范数是指向量各元素的平方和然后求平方根。我们让L2范数的规则项||W||2最小,可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0。越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象。
第二段
这段开头有一个 “mean network”,其实就是在网络前向传播到输出层前时隐含层节点的输出值都要减半,这一小段没太看懂,作者说这种均值网络和dropout有相似的地方,结果比用dropout之后再平均的结果要好。
第三段
开始实验,使用了MNIST数据集,MNIST数据集在之前复现LeNet上介绍过一次,这就不说了。然后作者使用了 一些数据增强的方法。
然后给了一张图描述它的实验结果:
可以看到什么都没有用,在MNIST没有dropout时160个错误,50%的dropout得到130个错误,在输入加入20%的dropout得到110个错误。
第3-6页
在第六页提到一个 “bagging”算法:
关于bagging:
Bagging算法 (英语:Bootstrap aggregating,引导聚集算法),又称装袋算法,是一种集成式学习方法,假设我们有一个数据集D,使用Bootstrap sample(有放回的随机采样)的方法取了k个数据子集(子集样本数都相等):D1,D2,…,Dk,作为新的训练集,我们使用这k个子集分别训练一个分类器(使用分类、回归等算法),最后会得到k个分类模型。我们将测试数据输入到这k个分类器,会得到k个分类结果,比如分类结果是0和1,那么这k个结果中谁占比最多,那么预测结果就是谁。
关于集成学习:
集成学习是一种机器学习范式。在集成学习中,我们会训练多个模型(通常称为「弱学习器」)解决相同的问题,并将它们结合起来以获得更好的结果。最重要的假设是:当弱模型被正确组合时,我们可以得到更精确和/或更鲁棒的模型。
作者将带有dropout方法的训练网络应用于各种不同的数据集,都取得了不错的成果(这些实验没啥看的我觉得,直接略过了~~~)。
后面作者提到了一下贝叶斯和朴素贝叶斯(极端情况下的dropout)。
最后作者还提到了一下性别进化论的问题。
关于性别进化论的我在博客看到一个挺不错的:
有性生殖取一半父亲基因,一半母亲基因,还有低概率的基因突变,产生后代。
无性生殖直接取父代的基因,加低概率的基因突变,产生后代。
直觉上无性生殖更好,因为它把父代的优秀基因直接传给了后代。但是有性生殖是物种演化中最重要的方式,一个可能的解释是自然选择的准则并不是保持个体健康,而是基本的混合交流。基因不能依赖于当前已存在的基因,它需要和其它的基因共同协同学习有用的东西。
基于这个理论,使用dropout可以减小和固有神经元之间的依赖,使得它们可以随机地和其它神经元来共同学习,这可以使得神经元更加鲁棒,能够学到更多有用的特征。
思考与总结
dropout丢弃的是权重还是输出?
我们知道,在每一层使用dropout后,都会对没有被dropout掉的神经元进行rescale。即rescale=1/(1?keepprob)rescale = 1/(1-keep_prob)rescale=1/(1?keepp?rob)。此步骤是为了弥补因为随即删除节点而造成的输出减少的副作用。
所以dropout时,权重并没有被丢弃(个人理解只是未被更新),只是后面需要对未丢弃神经元做一个rescale来保持期望输出大小不变。实际丢弃的是就是神经元的输出(输出项置为0)。
dropout的正确性以及随机丢弃对结果的影响?
这是我在前面思考的一个问题,就是如果每次epoch都丢掉了同一个重要特征,那岂不是对结果有比较重大的影响吗?
查阅诸多资料后发现,深度学习没什么正确性,,哈哈 玄学了。只有可能效果好不好而已,多一些或者少一些精度,丢弃不合理可能是丢弃率没设置好。且输出期望并没有改变,改变的只是隐层的输出。
所以我好像并没有找到对于这个问题的直观解答,都是侧面的解答,额。
dropout丢弃的是前一层还是后一层?
是丢弃的路径,可以理解为丢弃的前一层的输出,或者是丢弃的后一层的输入。
所以他也不是丢弃的节点,而是该隐层节点的输出或输入变成0,其权重不更新。
总结
-
dropout防止过拟合的关键就是:在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,它不会太依赖某些局部的特征。
-
关于preventing co-adaptation:减少神经元之间的共适应关系,通俗的理解就是假如训练识别人脸,可能的情况是模型可以识别出整张人脸,但是只给左脸或者右脸就无法识别,可能在训练过程中 左脸特征总是依赖右脸来训练的,当加入dropout之后,减小左右脸的依赖关系,可以让模型只看左脸就识别成功,增加了系统的鲁棒性。
-
关于生物进化,更直白的说,物种会不断的适应所生存的周围环境,但是如果环境发生突变,生物可能无法做出及时反映,性别的出现可以繁衍出适应新环境的变种,有效的阻止过拟合,即避免环境改变时物种可能面临的灭绝。