一:Dropout的原理及bagging思想

1:Dropout原理

Dropout是深度学习中应对过拟合问题简单且有效的一种正则化方法。原理很简单:在训练阶段,在每一个Epoch中都以一定比例随机的丢弃网络中的一些神经元,如图一所示,使得每次训练的模型包含的神经元都不同。这种方式使得网络权重在更新过程中不依赖隐藏节点之间的固定关系(隐藏层节点的固定关系可能会影响参数更新过程),同时使得网络不会对某一个特定的神经元过分敏感,从而提高了网络的泛化能力。图一:Dropout原理图

2:Dropout的Bagging思想

从《百面深度学习》这本书中的相关内容介绍领悟到,Dropout这种以一定比例随机丢弃神经元的方式是一种Bagging的思想:神经网络通过Dropout层以一定比例随即的丢弃神经元,使得每次训练的网络模型都不相同,多个Epoch下来相当于训练了多个模型,同时每一个模型都参与了对最终结果的投票,从而提高了模型的泛化能力。在此注意,Dropout与Bagging有一点不同是:Bagging的各个模型之间是相互独立的,而Dropout各个模型之间是共享权重的。bagging是利用相同数据训练多个模型,然后将各个模型的结果投票或者加权取平均等。

二:Dropout使用要点

1:Dropout参数设置介绍

首先说一下Dropout的参数:官方文档中是这样介绍的:p: probability of an element to be zeroed. Default: 0.5

inplace: If set to ``True``, will do this operation in-place. Default: ``False``第一个参数p代表Dropout率:即一个神经元被丢弃的概率,相反一个神经元被保留下来的概率即1-p;当p设置为1时,表示所有的神经元都被丢弃,输出全为0。

第二个参数inplace,是布尔量,默认为'False',当inplace = True时,这个Dropout操作会作用在tensor自身上;当inplace = False时,tensor自身则不会改变。设置为True的好处是:上层网络传递下来的tensor直接进行修改,可以节省运算内存,不用多储存变量,所以显存不够的可以设置成'True'。

为了便于大家理解,请看下面代码:

import torch

import torch.nn as nn

d = nn.Dropout(p = 0.5, inplace = True)

input = torch.randn(4, 3)

d(input)

input

#input输出结果

tensor([[-0.0000, 0.0000, 0.0000],

[ 0.0000, -0.1043, 1.8617],

[-0.0000, -0.0000, 0.0000],

[-0.0000, -0.0000, -0.4744]])

import torch

import torch.nn as nn

d = nn.Dropout(p = 0.5, inplace = False)

input = torch.randn(4, 3)

d(input)

input

#input输出结果

tensor([[ 1.1641, 1.6885, -0.5561],

[ 0.4439, -0.3091, -0.7204],

[-0.8396, 0.2921, -2.7595],

[ 1.7675, -0.6382, 1.6372]])

2:Dropout层在训练和测试中的区别

在本文的第二段提到了,Dropout层利用了Bagging思想,在测试阶段,每一个模型都参与了测试结果的投票,这也就是测试阶段并没有设置Dropout率,而是将此功能关闭了,那么在网络中是如何实现的呢?

以pytorch框架为例说明,训练过程中,网络的模式会设置成train,即model.train(),在测试过程中网络的模式会设置成eval,即model.eval()。当设时成model.eval()时,表示这种模式关闭了Dropout功能,除此之外也改变了BatchNorm层。其中,测试时关闭Dropout功能我们上面解释了,对BatchNorm的改变是因为:BatchNorm训练时是将以minibatch的形式送入网络的,而测试是单个图片进行的,没有minibatch这个概念,所以测试过程中利用的是全部数据的统计结果,即均值和标准差,具体可参见。

3:Dropout层的复现问题

由于Dropout以一定比例随机丢弃神经元这种模式的存在,使得网络每次的训练结果都不同,那么结果即无法复现。解决办法:可以通过设置随机种子来保证网络每次丢弃固定的神经元,使结果得以复现。代码如下:

seed = 3

torch.manual_seed(seed)

以上内容仅代表个人观点,有不足之处还请指正。

dropout和bagging_Dropout的Bagging思想以及使用要点相关推荐

  1. 机器学习建模中的Bagging思想!

    Datawhale干货 作者:小偶,来源:偶数科技 我们在生活中做出的许多决定都是基于其他人的意见,而通常情况下由一群人做出的决策比由该群体中的任何一个成员做出的决策会产生更好的结果,这被称为群体的智 ...

  2. 最全APP测试思想及流程要点,高薪测试人员一定要看

    App已经渗透到每个人的生活.娱乐.学习.工作当中,APP作为现如今几乎最广泛的应用程序,在所有的移动平台上都有应用,并且以极高的速度增长.但是作为程序而言,出现的时间并不是非常久.很多原有的软件测试 ...

  3. 深度学习机器学习理论知识:范数、稀疏与过拟合合集(5)Dropout原理,操作实现,为什么可以缓解过拟合,使用中的技巧

    范数.稀疏与过拟合合集(1)范数的定义与常用范数介绍 范数.稀疏与过拟合合集(2)有监督模型下的过拟合与正则化加入后缓解过拟合的原理 范数.稀疏与过拟合合集(3)范数与稀疏化的原理.L0L1L2范数的 ...

  4. bagging算法_集成算法——三个“臭皮匠”级算法优于一个“诸葛亮”级算法

    最近在打算法竞赛的时候用到了集成算法,效果还不错,索性就总结了一篇集成算法的文章,希望能帮到正在转行的数据分析师们.集成算法核心思想集成算法的核心思想是通过构建并结合多个学习器来完成学习任务,也就是通 ...

  5. 集成学习——BAGGING和随机森林

    集成学习--BAGGING和随机森林 集成学习--BAGGING和随机森林 1.什么是集成学习 2.怎样进行集成学习 3.Bagging方法 4.Bagging方法训练.预测过程 5.Bagging方 ...

  6. 机器学习笔记十三:Ensemble思想(上)

    从上面几篇的决策树开始,就可以开始进入到集成学习(ensemble learning)了,与其说集成学习是一种算法,倒不如说集成学习是一种思想. 集成学习的思想也是很自然很符合人类直观理解的. 用通俗 ...

  7. 集成学习(Ensemble Learning),Bagging、Boosting、Stacking

    1 集成学习概述 1.1 概述 在一些数据挖掘竞赛中,后期我们需要对多个模型进行融合以提高效果时,常常会用Bagging,Boosting,Stacking等这几个框架算法,他们不是一种算法,而是一种 ...

  8. xgboost原理,怎么防止过拟合。随机森林,GBDT,Xgoost的区别,bagging和boosting

    一.bagging和boosting的区别 参考:https://www.cnblogs.com/liuwu265/p/4690486.html Bagging和Boosting都是将已有的分类或回归 ...

  9. bagging和随机森林

    文章目录 前言 决策树 集成学习分类 1. bagging 2. 随机森林 2.1 随机森林原理 2.2 随机理解 2.3 RF 与 bagging的比较 2.4 随机森林的特征重要性原理 2.5 R ...

最新文章

  1. slack 国内 android,使用Slack Api登录,Android
  2. JQuery-UI组件化开发
  3. discuz uc密码修改
  4. Python基础教程:字典和Json
  5. NGUI减少Drawcall
  6. 解决Apache 服务器不支持FLV视频播放的办法
  7. windows7无人值守应答文件.rar_数智化赋能人力共享运营,人力管理走向“无人值守”...
  8. UNIX(多线程):25---当前进程的线程哪些数据共享哪些是私有的
  9. Mysql把查询的列作为判断条件(case函数)
  10. wxpython 优秀的界面_好用的 wxPython 界面設計工具 — wxFormBuilder
  11. 什么是IPFS - BlockChain Storage 区块链存储 (1)
  12. Python Turtle绘图【难度2星】:横切的橙子(基础效果/画海绵层优化)
  13. w7无法訪问计算机上硬盘分区,Win7/win10双系统无法打开磁盘分区提示拒绝访问怎么解决...
  14. redis和zk实现分布式锁的优缺点
  15. Unity | 基础逻辑
  16. [Pytorch]将自己的数据集载入dataloader
  17. Vue中watch、computed、updated三者的区别以及使用方法
  18. 一个SAP开发人员的2019年终总结
  19. Go语言开发工具和插件
  20. 课程学习——数字频率计的设计

热门文章

  1. SFI立昌ESD/TVS/EMI选型资料
  2. 栈和队列的插入、删除等基本操作
  3. FarPoint 基础篇(一) 基本概念
  4. c语言程序快乐无极,PLSQL安装过程和SCOTT用户被锁的解决方法
  5. 关于人人开源前后端的部署,我所遇到的所有问题及解决方案(真·从零开始,细化到Node版本推荐)
  6. 月薪4万的人,为什么还是那么穷?
  7. 软件众包 业余主义的复兴
  8. 保时捷卡宴加装电动踏板,原来好处这么多!
  9. 华为、小米、OPPO、VIVO联手打造“GDSA”对抗谷歌
  10. 企业微信后台模板导入覆盖机制