Dropout为什么有正则化的作用?

下面来直观理解一下。

上面讲到,dropout每次迭代都会让一部分神经元失活,这样使得神经网络会比原始的神经网络规模变小,因此采用一个较小神经网络好像和使用正则化的效果是一样的。

第二个直观认识是

我们从单个神经元入手,这个单元的工作就是输入并生成一些有意义的输出,通过dropout,该单元的输入被随机地消除,因此该神经元不能只依靠任何一个特征(即输入),因为每个特征都有可能被随机清除,或者说该神经元的输入可能被随机清除,因此不会把所有赌注都放在一个输出上,不愿意给任何一个输入加上太多权重,因为它(输入)可能会被删除。因此该单元将通过这种方式积极地传播开,并为单元的四个输入只赋予一点权重。通过传播所有权重,dropout将产生收缩权重的平方范数的效果。和我们之前讲过的L2正则化类似,实施dropout的结果是它会压缩权重,并完成一些预防过拟合的外层正则化。事实证明,dropout被真实地作为一种正则化的替代方式,但是L2正则化对不同权重衰减是不同的,它取决于倍增的激活函数的大小。

总结一下,dropout的功能类似于L2正则化,与L2正则化不同的是,被应用的方式不同。Dropout也会有不同,甚至更适用于不同的输入范围。

实施dropout的另外一个细节是,下面是一个拥有三个输入特征的网络,其中一个要选择的参数是keep_prob,不同层的keep_prob也可以变化。比如说第一层,矩阵W[1]大小是3x7,第二个权重矩阵大小是7x7,等等。W[2]是最大的权重矩阵,因为W[2]拥有最大的参数集,即7x7,为了预防矩阵的过拟合,那么对于这一层,我们可以将该层的keep_prob的值设置的低一些,比如说0.5,对于其他层,过拟合的程度可能没那么严重,它们的keep_prob值可能高一些,如0.7,如果在某一层,我们不担心其存在过拟合的情况,那么keep_prob值可以设置为1。下图中紫色框出的小数即为每一层的keep_prob值。注意keep_prob值是1的话,那么意味着保留所有单元,即不在这一层使用dropout。

从技术上讲,我们也可以对输入层应用dropout,我们有机会删除一个或者多个输入特征,虽然现实中我们通常不这样做。

总结一下,如果你担心某些层比其他层更容易发生过拟合,可以把某些层的keep_prob值设置得比其他层更低,缺点是需要使用交叉验证,你要搜索更多的超参数;另一种方案是在一些层上应用dropout,而有些层不使用dropout,应用dropout的层只有一个超参数,即keep_prob。

下面分享两个实施过程中的技巧

实施dropout,在计算机视觉领域有很多成功的第一次,计算机视觉中输入量非常大,输入太多像素,以至于没有足够的数据,所以dropout在计算机视觉中应用得比较频繁。但要牢记的一点是,dropout是一种正则化方法,它有助于预防过拟合,因此,除非算法过拟合,不然一般不用dropout,因此一般用在计算机视觉领域,因为我们没有足够的数据,所以会造成过拟合。

Dropout的一大缺点就是代价函数J不再被明确定义(造成每次迭代损失函数值可能不会总体上单调递减),每次迭代,都会随机移除一些节点,如果再三检查梯度下降的性能,实际上很难进行复查。因此,一般是在调试前,先将keep_prob设置为1,先训练一遍,确保损失J是不断下降的,保证网络本身没问题之后,再设置合适的keep_prob值,再进行训练。

内容主要来自与:

Andrew Ng的改善深层神经网络:超参数调试、正则化以及优化课程

1.7 理解dropout的更多相关文章

  1. [转]理解dropout

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

  2. 理解dropout

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

  3. 理解dropout——本质是通过阻止特征检测器的共同作用来防止过拟合 Dropout是指在模型训练时随机让网络某些隐含层节点的权重不工作,不工作的那些节点可以暂时认为不是网络结构的一部分,但是它的权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了

    理解dropout from:http://blog.csdn.net/stdcoutzyx/article/details/49022443 http://www.cnblogs.com/torna ...

  4. 简单理解dropout

    dropout是CNN(卷积神经网络)中的一个trick,能防止过拟合. 关于dropout的详细内容,还是看论文原文好了: Hinton, G. E., et al. (2012). "I ...

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

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

  6. 【深度学习】理解dropout

    dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃.注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络. ...

  7. 『cs231n』作业2选讲_通过代码理解Dropout

    Dropout def dropout_forward(x, dropout_param): p, mode = dropout_param['p'], dropout_param['mode'] i ...

  8. Deep learning:四十一(Dropout简单理解)

    前言 训练神经网络模型时,如果训练样本较少,为了防止模型过拟合,Dropout可以作为一种trikc供选择.Dropout是hintion最近2年提出的,源于其文章Improving neural n ...

  9. 深度学习中Dropout原理解析

    1. Dropout简介 1.1 Dropout出现的原因 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象. 在训练神经网络的时候经常会遇到过拟合的问题 ...

随机推荐

  1. async generator promise异步方案实际运用

    es7 async方案 /******************async***********************/ var timeFn=function(time){ return new P ...

  2. es6 Generator生成器函数

    生成器函数使用function*声明. 在生成器函数内部,有一种类似return的语法:关键字yield.二者的区别是,普通函数只可以return一次,而生成器函数可以yield多次(当然也可以只yi ...

  3. ArrayList 源码分析

    ArrayList 源码分析 1. 结构   首先我们需要对 ArrayList 有一个大致的了解就从结构来看看吧. 1. 继承   该类继承自 AbstractList 这个比较好说 2. 实现 这 ...

  4. hadoop2.6.5运行wordcount实例

    运行wordcount实例 在/tmp目录下生成两个文本文件,上面随便写两个单词. cd /tmp/ mkdir file cd file/ echo "Hello world" ...

  5. 【Python】排列组合itertools & 集合set

    ■itertools 利用python的itertools可以轻松地进行排列组合运算 itertools的方法基本上都返回迭代器 比如 •itertools.combinations('abcd',2 ...

  6. selenium +python+windows 环境搭建

    很久不弄selenium了,好怀念,现在搭建下环境 1,先安装pip ,因为装的是python3,所以只要你不是在渣渣网站下载到坏的版本,在scripts目录下都有pip.exe文件 直接在环境变量里 ...

  7. [poj1094]Sorting It All Out_拓扑排序

    Sorting It All Out poj-1094 题目大意:给出一些字符串之间的大小关系,问能否得到一个唯一的字符串序列,满足权值随下标递增. 注释:最多26个字母,均为大写. 想法:显然,很容 ...

  8. Android权限Uri.parse的几种用法(转载)

    1,调web浏览器 Uri myBlogUri = Uri.parse("http://xxxxx.com"); returnIt = new Intent(Intent.ACTI ...

  9. oracle中事务处理--事务隔离级别

    概念:隔离级别定义了事务与事务之间的隔离程度. ANSI/ISO SQL92标准定义了一些数据库操作的隔离级别(这是国际标准化组织定义的一个标准而以,不同的数据库在实现时有所不同). 隔离级别 脏读 ...

  10. 201621123050 《Java程序设计》第2周学习总结

    1.本周学习总结 java的数据类型 基本数据类型:介绍了java特有的boolean 引用数据类型 String:不变性:需要频繁修改时使用StringBuilder 包装类:自动拆.装箱 数组 一 ...