dropout理解:1神带9坑
Dropout是深度学习中防止过拟合的一项非常常见的技术,是hinton大神在12年提出的一篇论文里所采用的方法。有传言hinton大神的数学功底不是很好,所以他所提出的想法背后的数学原理并不是很复杂,往往采用简单但是非常巧妙的方法而取得非常好的效果。Dropout就是这么一种牛逼的方法。
工作原理:
所谓的dropout,从字面意思理解,就是“抛弃”。
抛弃什么呢?抛弃的是网络中隐藏层的节点(输入层和输出层是由数据类型和问题类型决定的,当然不能动啦!)。
怎么抛弃呢?dropout有一个参数p,p的取值介于0和1,含义是每个节点有p概率被抛弃。
被抛弃对这个节点有什么影响呢?dropout对于节点的影响表现在,一旦某个节点被选定为抛弃的节点,那么对于神经网络的forward过程这个节点的输出就被置为0;对于backward过程,这个节点的权重和偏置不参与更新。也就是说,在某次迭代中,网络中有部分节点不参与这一次的训练,整个网络结构等效于下图右侧(左侧是dropout前的)。
为什么管用?
回归到最重要的问题:为什么dropout效果这么好。Hinton大神的解释是dropout减少了节点之间的共适应。共适应这个词说起来好专业,我举个例子来说一下我的理解:
假设一个网络中有10个节点,有一个perfect节点,它的取值刚刚好,另外9个节点的取值还需要调整,也就是所谓的一神带9坑!这个时候网络的输出层往回传递误差,这10个节点都不知道自己现在的取值是不是合适的啊,毕竟咱们开了上帝视角,而它们没有。所以它们就根据传回来的误差更新自己的取值,虽然其他9个节点可能有更合适的取值,但是这个perfect的值就破坏了啊。而且,在更新取值的时候,其他9个坑逼节点心想“这个误差是咱们10个共同造成的,嗯,我只要把我那份误差更新掉就行”,而实际上最终的误差是9个节点造成的,也就是说这些个坑逼节点对自己的错误认识还不够充分!不行,不能这么宠着它们!一个很简单的想法,就是让perfect不工作,得了,您歇着吧!这个时候9个节点就可以更好的更新自己权值,直到出现下一个perfect节点。
但是,问题是咱们也不知道哪个节点是perfect节点啊,咱们训练的时候别说上帝视角了,有时候就连哪些个节点是dead node都看不穿啊。那怎么办呢?就让部分节点先不工作吧,先富带后富。假设不工作的节点全是坑壁节点,那对于perfect节点就是好事啊,毕竟最后的误差就小了。如果不工作的节点恰好有perfect节点,那对于那些个正在工作的菜鸡节点就是好事,让他们能正确认识到自己的错误!这样网络就能训练得更好了。
另外的视角:
当节点之间的共适应性减少了,除了能让网络取得更好的参数外,还能具有模型融合的优势。做过数据挖掘比赛的都知道,即使是几个弱鸡模型ensemble一下,也能有非常亮眼的表现。这就是dropout带来的另外一个好处。
dropout理解:1神带9坑的更多相关文章
- Deep Learning 23:dropout理解_之读论文“Improving neural networks by preventing co-adaptation of feature detectors”
理论知识:Deep learning:四十一(Dropout简单理解).深度学习(二十二)Dropout浅层理解与实现.“Improving neural networks by preventing ...
- 关于对于IT我自己的见解以及我踩过的坑(需要认真读文章才能理解我所遇到的坑.)
终于开始下决心写下这篇文章了. 就在写这篇总结文章的前天还是今天,我度过了我的17岁生日,正式踏入了已成年人的路程.生日那天我在想今夜必定要做件比较有意义的事,于是乎我想到两件比较可以证明自己是成年人 ...
- 在WIN SERVER 2016上安装DOCKER(带过坑)
目录 1 概要 1 1.1 主要优势 1 2 在Windows Server上部署Docker 2 概要 博客使用Word发博,发布后,排版会出现很多问题,敬请谅解 ...
- 老猪带你玩转自定义控件三——sai大神带我实现ios 8 时间滚轮控件
ios 8 的时间滚轮控件实现了扁平化,带来很好用户体验,android没有现成控件,小弟不才,数学与算法知识不过关,顾十分苦恼,幸好在github上找到sai大神实现代码,甚为欣喜,顾把学习这个控件 ...
- [OC笔记]@property之个人理解,大神轻拍
/** * 一个简单的对象 * * @author suzhen * */ public class SimpleObjcet { /** * 声明一个age字段 */ private Object ...
- 深入理解Java自带的线程池和缓冲队列
前言 线程池是什么 线程池的概念是初始化线程池时在池中创建空闲的线程,一但有工作任务,可直接使用线程池中的线程进行执行工作任务,任务执行完成后又返回线程池中成为空闲线程.使用线程池可以减少线程的创建和 ...
- 【附案例】UI交互设计不会做?设计大神带你开启动效灵感之路
随着网络技术的创新发展,如今UI交互设计应用越来越广泛,显然已经成为设计的主流及流行的必然趋势.UI界面交互设计中的动效包括移动,滑块,悬停效果,GIF动画等.UI界面交互设计为何越来越受到青睐?它有 ...
- gradle问题总结与理解(一篇文章带你理解android studio 与gradle 的关系)
前言:近日在网上找了个很不错的安卓二维码美化,由于下载的项目经常出问题,且不方便依赖使用,因此我想把它写个demo,并把源码发布到jcenter中,修改还是很顺利的,运行项目到手机也没问题,发布遇到了 ...
- Java大神带你领略queue的风采
作为数据结构中比较常见的类型,你足够了解队列(queue)吗?从今天开始,我将为你讲解关于队列(queue)的一切,包括概念.类型和具体使用方法,如果你对此足够感兴趣,赶快来加入我们,我将同你一起探索 ...
随机推荐
- AIO5程序中审批跳转条件:超过某一个值必须总经理审批
以实际需求为例看下系统中如何设置: 客户需求:采购订单中对总金额进行限制,超过20000的话必须要经过总经理审批含税金额<20000:采购部门某个员工发起→直接主管批→财务主管知会含税金额≥20 ...
- Html5如何自学 只需这几步
Html5在整个行业卷起了一场大潮流,好多人都,但是很多人都不知道该怎么学习Html5,不知道Html5该如何自学?不知道Html5开发多久才会学会?接下来将从以下几点内容详细讲述. 第一,很多人建议 ...
- idea+scala+spark遇到的一些问题
1.windows中以本地模式运行spark遇到"Could not locate executable null\bin\winutils.exe in the Hadoop binari ...
- robotframework自动化系统:操作mysql数据库
随着项目自动化深入和不断完善,大部分功能都已经能完成了自动化的操作:但是在设备添加的时候,遇到了难题.添加设备的时候mac必须是服务器设备管理中已经存在的mac地址,且是没有关联或绑定用户的设备信息. ...
- 多线程编程 - PHP 实现
* { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans ...
- Shell编程基础篇
1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚 ...
- jsp加java连接数据库,进行信息输入,并进行初步的拦截判断。
图形大概这样 按照图片要求设计添加新课程界面.(0.5分) 在后台数据库中建立相应的表结构存储课程信息.(0.5分) 实现新课程添加的功能. 要求判断任课教师为王建民.刘立嘉.刘丹.王辉.杨子光五位教 ...
- Laravel 5 框架性能优化技巧
性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能. 接下来分享一些开发的最佳实践,还有调优技巧,大家有别的建议也欢迎留言讨论 1.配置缓存信息 使用l ...
- mysql故障解决笔记
错误提示如图 一开始我查询了 [root@web01 mysql]# ls -al /lib/libc* -rwxr-xr-x 1 root root 1909464 Mar 22 01:49 /li ...
- 2017最新PHP初级经典面试题目汇总(下篇)
17.isset.empty.is_null的区别 isset 判断变量是否定义或者是否为空 变量存在返回ture,否则返回false 变量定义不赋值返回false unset一个变量,返回false ...