一、简单介绍及公式

Dropout是深度学习中强大的正则化方法。过程很简单:在训练时候,随机的挑选一些节点参与预测和反向传播,当test时候,全部节点参与,但是权重要乘以留存概率p。数学实现是:

\[z_i^{l+1} = f(W_i^{l}*B(p)*z^{l}+b_i^{l})
\]

其中,\(z_i^{l+1}\)表示l+1层的某个节点,\(z^{l}\)表示l层的一个整层。\(B(p)\)表示概率为p的二项式概率分布函数。\(W_i^{l}\)表示\(z_i^{l+1}\)的权重矩阵。\(b_i^{l}\)表示\(z_i^{l+1}\)的偏置向量。

与标准网络相比,只是多了一个二项式函数。

在traing阶段,与标准网络对比如下图,

二、为什么dropout有效-原因定性分析

关于Dropout有效的原因,大多数都是在定性分析,并没有太多的定量分析,以下是一些观点。

首先是Nitish Srivastava的观点《Dropout: A Simple Way to Prevent Neural Networks from Overfitting》。

2.1 ensemble论

2.1.1 ensemble

这个是Nitish Srivastava的《Dropout: A Simple Way to Prevent Neural Networks from Overfitting》原文的观点。通常比较好的缓解过拟合的方法是ensemble(类似随机森林的方法),但是训练神经网络很费时间和金钱(这篇文章是14年前出来的,算力确实不怎么够),所以ensemble好像是不成。但是假如,退一步,如果我们在训练时候随机去掉部分节点,那么就好像我们每次都在训练一个个独立的新网络,网络训练好之后,就可以看做共享部分节点的N多个神经网络ensemble在一起了。这个观点有点牵强。

2.1.2 动机:联合适应(co-adapting)

试想,50个恐怖分子搞破坏,如果是50人一起去搞破坏,搞了一两次破坏后,容易被团灭。如果是5人一组,分成10组,搞得破坏次数就能增加很多。前者就是co-adapting,后者是相对来说集中性小,联合性弱,适应能力更加强。

自然界中,细菌病毒这类的,它们是无性繁殖,DNA或者RNA是自我复制的。另外一种是有性繁殖,每次都需要交叉母本和父本的DNA,生成子代的DNA。前者面对的环境简单,不求生存率,所以每次基本很少变异,遗传物质是大段大段的拷贝的,可以认为很多碱基对联合一起工作的。后者,面对的环境复杂,遗传物质多,所以将功能拆分到许许多多的小基因片段中,是相对小联合一起工作。

现在回到神经网络中,那么多的神经节点一起工作,那么不是就很容易就又大规模co-adapting的吗?而dropout后,肯定缩小co-adapting的规模。所以dropout减少了其co-adaping。

思考:

如果我们造一些很窄的网络,然后ensemble在一起如何,会不会以后dropout那么好?

猜想:应该不是的,1)神经网络更深更宽,能力更加强悍,窄网络可能会有泛化能力不足的问题。2)多个窄网络训练起来比较费时间。

2.1.3 推论和小技巧

dropout是正则的一种,用于治疗过拟合的。经过上面的介绍,应该有些简单的推论:

  • 因为是ensemble,所以dropout=0.5的时候效果最好,因为这样随机性最大。调训的N个网络,最不一样。
  • 可以用于治疗数据量不足引起的过拟合,但是对于其他类型的过拟合不适用。
  • 治疗过拟合,数据集越大,dropout效果越好。(其他的正则化方法也存在这类)
  • 与其他方法搭配更好:soft-weight sharing, max-norm regularization等

2.2 噪音派

dropout可以拿来做数据增强(Data Augmentation),而其之所以有效是因为在训练数据中加了噪音。

  • 不明白点1:dropout后,样本空间变小了,样本数量不应该变少了吗?为什么还能达到数据增多的效果?

当样本集是非线性空间的时候,使用一系列的局部特征,会使预测更加稳定。dropout能够造成稀疏性。确实,因为他们在学习过程中,去掉了某些节点,也就是置0,那么结果是很多时候生产的向量具有一定的稀疏性。dropout能够帮助学习到更多的局部特征。

  • 不明白点:当样本集是非线性空间的时候,使用一系列的局部特征,会使预测更加稳定。

  • 不明白点:dropout由固定值变为一个区间,可以提高效果

  • dropout学习出来的特征向量具有稀疏性

  • 待做实验:试验中,纯二值化的特征的效果也非常好,说明了稀疏表示在进行空间分区的假设是成立的,一个特征是否被激活表示该样本是否在一个子空间中。

四、缺点

  • dropout后训练时间更长,2-3倍

Dropout----Dropout来源的更多相关文章

  1. 深度学习(dropout)

    other_techniques_for_regularization 随手翻译,略作参考,禁止转载 www.cnblogs.com/santian/p/5457412.html Dropout: D ...

  2. [转]理解dropout

    理解dropout 原文地址:http://blog.csdn.net/stdcoutzyx/article/details/49022443     理解dropout 注意:图片都在github上 ...

  3. tensorflow dropout函数应用

    1.dropout dropout 是指在深度学习网络的训练过程中,按照一定的概率将一部分神经网络单元暂时从网络中丢弃,相当于从原始的网络中找到一个更瘦的网络,这篇博客中讲的非常详细   2.tens ...

  4. 深度学习(一)cross-entropy softmax overfitting regularization dropout

    一.Cross-entropy 我们理想情况是让神经网络学习更快 假设单模型: 只有一个输入,一个神经元,一个输出   简单模型: 输入为1时, 输出为0 神经网络的学习行为和人脑差的很多, 开始学习 ...

  5. 深度学习基础系列(九)| Dropout VS Batch Normalization? 是时候放弃Dropout了

    Dropout是过去几年非常流行的正则化技术,可有效防止过拟合的发生.但从深度学习的发展趋势看,Batch Normalizaton(简称BN)正在逐步取代Dropout技术,特别是在卷积层.本文将首 ...

  6. dropout 为何会有正则化作用

    在神经网络中经常会用到dropout,大多对于其解释就是dropout可以起到正则化的作用. 一下是我总结的对于dropout的理解.花书上的解释主要还是从模型融合的角度来解释,末尾那一段从生物学角度 ...

  7. Dropout & Maxout

    [ML] My Journal from Neural Network to Deep Learning: A Brief Introduction to Deep Learning. Part. E ...

  8. 理解dropout

    理解dropout 注意:图片都在github上放着,如果刷不开的话,可以考虑FQ. 转载请注明:http://blog.csdn.net/stdcoutzyx/article/details/490 ...

  9. 深度学习面试题14:Dropout(随机失活)

    目录 卷积层的dropout 全连接层的dropout Dropout的反向传播 Dropout的反向传播举例 参考资料 在训练过程中,Dropout会让输出中的每个值以概率keep_prob变为原来 ...

  10. TensorFlow——dropout和正则化的相关方法

    1.dropout dropout是一种常用的手段,用来防止过拟合的,dropout的意思是在训练过程中每次都随机选择一部分节点不要去学习,减少神经元的数量来降低模型的复杂度,同时增加模型的泛化能力. ...

随机推荐

  1. Bika LIMS 开源LIMS集—— SENAITE的使用(检测流程)

    客户管理 登记客户信息,包括地址.合同报告邮寄地址.账单邮寄地址.付款银行账号等. 产品批次管理 例如某乳品公司生产处一批产品,该批产品送往实验室检测,实验室登记该批产品批号,如对该批产品做多次检测, ...

  2. Spark: Cluster Computing with Working Sets

    本文是对spark作者早期论文<Spark: Cluster Computing with Working Sets>做的翻译(谷歌翻译),文章比较理论,阅读起来稍微有些吃力,但读完之后总 ...

  3. pat甲级考试+pat1051+1056

    同上一篇博客: 贪心题目我已经刷了将近30道了,由于那几天考驾照就没写,以后有空的时候补过来吧,都在codeblock里 pat的题也刷了点,acwing 的题也刷了点,基本都攒下了.以后也会慢慢补过 ...

  4. 论文翻译:2021_LACOPE: Latency-Constrained Pitch Estimation for Speech Enhancement

    论文地址:延迟约束的语音增强基音估计 引用格式:Schröter H, Rosenkranz T, Escalante-B A N, et al. LACOPE: Latency-Constraine ...

  5. Ubuntu 20.04安装Docker

    Docker学习系列文章 入门必备:十本你不容错过的Docker入门到精通书籍推荐 day1.全面的Docker快速入门教程 day2.CentOS 8.4安装Docker day3.Windows1 ...

  6. Three---面向对象与面向过程/属性和变量/关于self/一些魔法方法的使用/继承/super方法/多态

    python的面向对象 面向对象与面向过程 面向过程 面向过程思想:需要实现一个功能的时候,看重的是开发的步骤和过程,每一个步骤都需要自己亲力亲为,需要自己编写代码(自己来做) 面向对象 面向对象的三 ...

  7. Spring源码 03 IOC原理

    参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...

  8. JDK数组阻塞队列源码深入剖析

    JDK数组阻塞队列源码深入剖析 前言 在前面一篇文章从零开始自己动手写阻塞队列当中我们仔细介绍了阻塞队列提供给我们的功能,以及他的实现原理,并且基于谈到的内容我们自己实现了一个低配版的数组阻塞队列.在 ...

  9. Python之验证码识别功能

    Python之pytesseract 识别验证码 1.验证码来一个 2.适合什么样的验证码呢? 只能识别简单.静态.无重叠.只有数字字母的验证码 3.实际应用:模拟人工登录.页面内容识别.爬虫抓取信息 ...

  10. Spark基础入门(01)—RDD

    1,基本概念 RDD(Resilient Distributed Dataset) :弹性分布式数据集 它是Spark中最基本的数据抽象,是编写Spark程序的基础.简单的来讲,一个Spark程序可以 ...