热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【精读AI论文】dropout(Improvingneuralnetworksbypreventingcoadaptationoffeaturedetectors)

文章目录前言第一页:第一段:第二段:第二页第一段第二段第三段第3-6页思考与总结dropout丢弃的是权重还是输出?drop


文章目录

  • 前言
  • 第一页:
    • 第一段:
    • 第二段:
  • 第二页
    • 第一段
    • 第二段
    • 第三段
  • 第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页

作者将带有dropout方法的训练网络应用于各种不同的数据集,都取得了不错的成果(这些实验没啥看的我觉得,直接略过了~~~)。

后面作者提到了一下贝叶斯和朴素贝叶斯(极端情况下的dropout)。

最后作者还提到了一下性别进化论的问题。

关于性别进化论的我在博客看到一个挺不错的:

有性生殖取一半父亲基因,一半母亲基因,还有低概率的基因突变,产生后代。
无性生殖直接取父代的基因,加低概率的基因突变,产生后代。
直觉上无性生殖更好,因为它把父代的优秀基因直接传给了后代。但是有性生殖是物种演化中最重要的方式,一个可能的解释是自然选择的准则并不是保持个体健康,而是基本的混合交流。基因不能依赖于当前已存在的基因,它需要和其它的基因共同协同学习有用的东西。
基于这个理论,使用dropout可以减小和固有神经元之间的依赖,使得它们可以随机地和其它神经元来共同学习,这可以使得神经元更加鲁棒,能够学到更多有用的特征。


思考与总结


dropout丢弃的是权重还是输出?

我们知道,在每一层使用dropout后,都会对没有被dropout掉的神经元进行rescale。即rescale=1/(1−keepprob)rescale = 1/(1-keep_prob)rescale=1/(1keepprob)。此步骤是为了弥补因为随即删除节点而造成的输出减少的副作用。

所以dropout时,权重并没有被丢弃(个人理解只是未被更新),只是后面需要对未丢弃神经元做一个rescale来保持期望输出大小不变。实际丢弃的是就是神经元的输出(输出项置为0)。


dropout的正确性以及随机丢弃对结果的影响?

这是我在前面思考的一个问题,就是如果每次epoch都丢掉了同一个重要特征,那岂不是对结果有比较重大的影响吗?

查阅诸多资料后发现,深度学习没什么正确性,,哈哈 玄学了。只有可能效果好不好而已,多一些或者少一些精度,丢弃不合理可能是丢弃率没设置好。且输出期望并没有改变,改变的只是隐层的输出。

所以我好像并没有找到对于这个问题的直观解答,都是侧面的解答,额。


dropout丢弃的是前一层还是后一层?

是丢弃的路径,可以理解为丢弃的前一层的输出,或者是丢弃的后一层的输入。

所以他也不是丢弃的节点,而是该隐层节点的输出或输入变成0,其权重不更新。


总结


  • dropout防止过拟合的关键就是:在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,它不会太依赖某些局部的特征。

  • 关于preventing co-adaptation:减少神经元之间的共适应关系,通俗的理解就是假如训练识别人脸,可能的情况是模型可以识别出整张人脸,但是只给左脸或者右脸就无法识别,可能在训练过程中 左脸特征总是依赖右脸来训练的,当加入dropout之后,减小左右脸的依赖关系,可以让模型只看左脸就识别成功,增加了系统的鲁棒性。

  • 关于生物进化,更直白的说,物种会不断的适应所生存的周围环境,但是如果环境发生突变,生物可能无法做出及时反映,性别的出现可以繁衍出适应新环境的变种,有效的阻止过拟合,即避免环境改变时物种可能面临的灭绝。


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • 统一知识图谱学习和建议:更好地理解用户偏好
    本文介绍了一种将知识图谱纳入推荐系统的方法,以提高推荐的准确性和可解释性。与现有方法不同的是,本方法考虑了知识图谱的不完整性,并在知识图谱中传输关系信息,以更好地理解用户的偏好。通过大量实验,验证了本方法在推荐任务和知识图谱完成任务上的优势。 ... [详细]
  • 建立分类感知器二元模型对样本数据进行分类
    本文介绍了建立分类感知器二元模型对样本数据进行分类的方法。通过建立线性模型,使用最小二乘、Logistic回归等方法进行建模,考虑到可能性的大小等因素。通过极大似然估计求得分类器的参数,使用牛顿-拉菲森迭代方法求解方程组。同时介绍了梯度上升算法和牛顿迭代的收敛速度比较。最后给出了公式法和logistic regression的实现示例。 ... [详细]
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • OCR:用字符识别方法将形状翻译成计算机文字的过程Matlab:商业数学软件;CUDA:CUDA™是一种由NVIDIA推 ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
  • cs231n Lecture 3 线性分类笔记(一)
    内容列表线性分类器简介线性评分函数阐明线性分类器损失函数多类SVMSoftmax分类器SVM和Softmax的比较基于Web的可交互线性分类器原型小结注:中文翻译 ... [详细]
author-avatar
端庄的一白_167
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有