1. 什么是Dropout(随机失活)

  就是在神经网络的Dropout层,为每个神经元结点设置一个随机消除的概率,对于保留下来的神经元,我们得到一个节点较少,规模较小的网络进行训练。

  标准网络和dropout网络:

左边是简单的模型,右边是含有dropout的模型

  l: hidden layer index (隐藏层索引)
  z: denote the vector of inputs into layer l(表示l层的向量输入)
  y: output of each layer(每一层的输出)
  y0: input layer(输入层)
  f: activation function(激活函数)

简单模型的输入输出的计算 含有dropout的模型,它在input layer 乘以伯努利随机概率,如果p =0.5,那么y就有50%的概率会变成0,这样它就不会参与运算

这个图表示的是不同的分类架构没有使用dropout和使用dropout有分类错误有显著的下降。

2.Dropout是如何防止过拟合的?

  • 不依赖于任何一个特征,因为该单元的输入可能随时被清除
  • 通过传播所有权重,dropout将产生收缩权重的平方范数的效果,和之前讲的L2正则化类似;
  • 实施dropout的结果实它会压缩权重,并完成一些预防过拟合的外层正则化;
  • L2对不同权重的衰减是不同的,它取决于激活函数倍增的大小。

3.怎么理解训练和测试的dropout不同?

  左边:在训练时,每个神经单元都可能以概率p去除。
  右边:在测试阶段,每个神经元都是存在的,权重参数w要乘以p,成为pw。

  左边我们应该比较好理解,每个神经元都有概率p参与单次神经网络的训练。而测试的时候,神经元是不会去除的,每个神经元都是存在的,权重参数w要乘以p。那么这里就产生一个问题,为什么参数w要乘以概率p。

  • 问题:怎么理解测试时权重参数w要乘以概率p?

  假设总共有100个神经元,训练的时候我们加上dropout,p=0.5,那么我们就有50个神经元参与训练,那么我们每次50个神经元训练出来的模型参数w是要比直接100个神经元要小的,因为它更新的次数会更少。我们测试的时候100个神经元是都会参与计算的,这就跟训练的时候我们使用50个神经元产生差异了,如果要保证测试的时候每个神经元的关联计算不能少,只能从通过改变w来达到跟训练时一样输出,所以才会有权重参数w乘以p。

4.实施dropout的细节

  • 如果你担心某些层比其它层更容易发生过拟合,可以把某些层的keep-prob值设置得比其它层更低, 缺点是为了使用交叉验证,你要搜索更多的超级参数,
  • 另一种方案是在一些层上应用dropout,而有些层不用dropout,应用dropout的层只含有一个超级参数,就是keep-prob。

  训练:input 的dropout概率推荐是0.8(添加噪声);hidden layer 推荐是0.5(随机生成的网络结构最多)

  测试:不需要dropout,但是需要将w乘以p,得到跟训练一样的输出

5.dropout常在计算机视觉应用中

  • 计算视觉中的输入量非常大,输入太多像素,以至于没有足够的数据,所以dropout在计算机视觉中应用得比较频繁,有些计算机视觉研究人员非常喜欢用它,几乎成了默认的选择。
  • 但要牢记一点,dropout是一种正则化方法,它有助于预防过拟合,除非算法过拟合,不然我是不会使用dropout的
  • 它在其它领域应用得比较少,主要存在于计算机视觉领域,因为我们通常没有足够的数据,所以一直存在过拟合

6.dropout缺点

  • dropout 的一大缺点是成本函数无法被明确定义。因为每次迭代都会随机消除一些神经元结点的影响,因此无法确保成本函数单调递减。因此,使用 dropout 时,先将keep_prob全部设置为 1.0 后运行代码,确保 J(w,b)函数单调递减,再打开 dropout
  • 明显增加训练时间,因为引入dropout之后相当于每次只是训练的原先网络的一个子网络,为了达到同样的精度需要的训练次数会增多。dropout的缺点就在于训练时间是没有dropout网络的2-3倍

7.实现Dropout的方法

8.其他正则化方法

  • 减小网络容量

  减少模型中可学习参数的个数(这由层数和每层的单元个数决定)。深度学习中,模型中可学习参数的个数通常被称为模型的容量,直观上来看,
参数更多的模型拥有更大的记忆容量,因此能够在训练样本和目标之间轻松的学会完美的字典式映射,这种映射没有任何泛化能力。
因此,为了让损失最小化,网络必须学会对目标具有很强预测能力的压缩表示。同时,使用的模型应该具有足够多的参数,防止欠拟合,即模型
避免记忆资源不足。在容量过大与容量不足之间要找到一个折中。

  • 数据扩增(Data augmentation):通过图片的一些变换,得到更多的训练集和验证集;

  • Early stopping:在交叉验证集的误差上升之前的点停止迭代,避免过拟合。这种方法的缺点是无法同时解决bias和variance之间的最优。

 

 
参考文献:
 

Dropout正则化和其他方法减少神经网络中的过拟合的更多相关文章

  1. Batch Normalization原理及其TensorFlow实现——为了减少深度神经网络中的internal covariate shift,论文中提出了Batch Normalization算法,首先是对”每一层“的输入做一个Batch Normalization 变换

    批标准化(Bactch Normalization,BN)是为了克服神经网络加深导致难以训练而诞生的,随着神经网络深度加深,训练起来就会越来越困难,收敛速度回很慢,常常会导致梯度弥散问题(Vanish ...

  2. 9、改善深度神经网络之正则化、Dropout正则化

    首先我们理解一下,什么叫做正则化? 目的角度:防止过拟合 简单来说,正则化是一种为了减小测试误差的行为(有时候会增加训练误差).我们在构造机器学习模型时,最终目的是让模型在面对新数据的时候,可以有很好 ...

  3. 神经网络中batch_size参数的含义及设置方法

    本文作者Key,博客园主页:https://home.cnblogs.com/u/key1994/ 本内容为个人原创作品,转载请注明出处或联系:zhengzha16@163.com 在进行神经网络训练 ...

  4. 神经网络中的降维和升维方法 (tensorflow & pytorch)

    大名鼎鼎的UNet和我们经常看到的编解码器模型,他们的模型都是先将数据下采样,也称为特征提取,然后再将下采样后的特征恢复回原来的维度.这个特征提取的过程我们称为"下采样",这个恢复 ...

  5. 1.6 dropout正则化

    除了L2正则化,还有一个非常实用的正则化方法----dropout(随机失活),下面介绍其工作原理. 假设你在训练下图左边的这样的神经网络,它存在过拟合情况,这就是dropout所要处理的.我们复制这 ...

  6. 【DeepLearning】深入理解dropout正则化

    本文为转载,作者:Microstrong0305 来源:CSDN 原文:https://blog.csdn.net/program_developer/article/details/80737724 ...

  7. 吴恩达深度学习笔记(十一)—— dropout正则化

    主要内容: 一.dropout正则化的思想 二.dropout算法流程 三.dropout的优缺点 一.dropout正则化的思想 在神经网络中,dropout是一种“玄学”的正则化方法,以减少过拟合 ...

  8. TensorFlow之CNN:运用Batch Norm、Dropout和早停优化卷积神经网络

    学卷积神经网络的理论的时候,我觉得自己看懂了,可是到了用代码来搭建一个卷积神经网络时,我发现自己有太多模糊的地方.这次还是基于MINIST数据集搭建一个卷积神经网络,首先给出一个基本的模型,然后再用B ...

  9. 【深度学习篇】--神经网络中的调优一,超参数调优和Early_Stopping

    一.前述 调优对于模型训练速度,准确率方面至关重要,所以本文对神经网络中的调优做一个总结. 二.神经网络超参数调优 1.适当调整隐藏层数对于许多问题,你可以开始只用一个隐藏层,就可以获得不错的结果,比 ...

随机推荐

  1. Thinkphp 中的自动验证 上一篇有例子

    说明,只要定义了Model,在任何地方调用,都会进行验证.很方便. 必须是D方法,才会有效.M方法不会触发自动验证. 说明:这里没练习静态自动验证:如果用到静态验证首先自定义一个控制器,再在Model ...

  2. linux下安装cmake(安装opencv库)

    apt-get install cmake cmake --version(显示版本号) cmake-gui(打开gui界面) 如果打不该GUI界面时候就需要apt-get install cmake ...

  3. [No000014C]让大脑高效运转的24个技巧

    内容来译自David Rock “Your Brain at Work” and Nir Eyal, NirAndFar.com. Nir Eyal 是<上瘾>这本书的作者. 如何抓住转瞬 ...

  4. win10 SVN不能显示图标

    参考的解决办法有很多(http://blog.csdn.net/lishehe/article/details/8257545),大多数是操作一下注册表. 我就按照他们的办法,svn的注册表顺序根本上 ...

  5. The Structure of the Java Virtual Machine Java虚拟机结构 虚拟机内存模型

    小结: 1.实现一台Java虚拟机,只需正确读取class文件中的每一条字节码指令且能正确执行这些指令所蕴含的操作. 2.设计者决定:运行时数据区的内存如何布局,选择哪种垃圾收集算法,是否对虚拟机字节 ...

  6. Copycat - command

    client.submit(new PutCommand("foo", "Hello world!")); ServerContext connection.h ...

  7. Android抓包方法 之Fiddler代理

    1.抓包原理 Fiddler是类似代理服务器的形式工作,它能够记录所有你的电脑和互联网之间的http(S)通讯,可以查看.修改所有的“进出”的数据.使用代理地址:127.0.0.1, 默认端口:888 ...

  8. pandas与sqlalchemy交互实现科学计算

      import pandas as pd import numpy as np from sqlalchemy import create_engine #建立数据库引擎 engine = crea ...

  9. 根据Request获取客户端IP

    转自: http://www.cnblogs.com/icerainsoft/p/3584532.html http://www.cnblogs.com/bingya/articles/3134227 ...

  10. javascript高级技巧篇(作用域安全、防篡改、惰性载入、节流、自定义事件,拖放)

    安全的类型检测 在任何值上调用Object原生的toString()方法,都会返回一个[object NativeConstructorName]格式字符串.每个类在内部都有一个[[Class]]属性 ...