一、简单介绍及公式

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. PHP memcache add replace set的区别和其他用法收集

    add replace set的区别 最近在面试时遇到一个问题 memcache 的add replace set的区别,故在此进行加强 add 是向服务器添加一个缓存的数据,当该键已存在会返回一个f ...

  2. 众妙之门玄之又玄,游戏系统中的伪随机(Pseudo-Randomization)和真随机(True-Randomization)算法实现Python3

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_212 有人说,如果一个人相信运气,那么他一定参透了人生.想象一下,如果你在某款moba游戏中,在装备平平,队友天坑的情况下,却刀刀 ...

  3. 趣味问题《寻人启事》的Python程序解决

    偷懒了很久,今天我终于又来更新博客了~ 最近,我看到了一个趣味问题,或者说是数学游戏:<寻人启事>. 在表述这个问题前,我们需要了解一下"冰雹猜想": 对于任意一个正整 ...

  4. GreatSQL重磅特性,InnoDB并行并行查询优化测试

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 1 ...

  5. HttpServletRequest 类

    目录 HttpServletRequest类有什么作用 HttpServletRequest 类的常用方法 如何获取请求参数 doGet 请求的中文乱码解决: POST 请求的中文乱码解决 请求的转发 ...

  6. Taurus.MVC WebAPI 入门开发教程4:控制器方法及参数定义、获取及基础校验属性【Require】。

    系列目录 1.Taurus.MVC WebAPI  入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...

  7. PerfView专题 (第八篇):洞察 C# 内存泄漏之寻找静态变量名和GC模式

    一:背景 这篇我们来聊一下 PerfView 在协助 WinDbg 分析 Dump 过程中的两个超实用技巧,可能会帮助我们快速定位最后的问题,主要有如下两块: 洞察内存泄漏中的静态大集合变量名. 验证 ...

  8. 内网渗透之vlunstack靶场

    前言:vlunstack靶场是由三台虚拟机构成,一台是有外网ip的windows7系统(nat模式),另外两台是纯内网机器(外网ping不通),分别是域控win2008和内网主机win2003,这里就 ...

  9. 第八十七篇:Vue动态切换组件的展示和隐藏

    好家伙, 1.什么是动态组件? 动态组件指的是动态切换组件的限制与隐藏 2.如何实现动态组件渲染 vue提供了一个内置的<component>组件,专门用来实现动态组件的渲染. 可以将其看 ...

  10. grub2配置文件丢失如何修复

    实验操作准备 此步骤因实验需要所做,系统开机属grub界面无需此步! lsblk命令为了查看根分区挂载在什么位置 rm -rf /boot/grub2/grub.cfg命令为删除grub2配置文件到达 ...