深度学习中的Dropout

1 Dropout概述

1.1 什么是Dropout

在2012年,Hinton在其论文《Improving neural networks by preventing co-adaptation of feature detectors》中提出Dropout。当一个复杂的前馈神经网络被训练在小的数据集时,容易造成过拟合。为了防止过拟合,可以通过阻止特征检测器的共同作用来提高神经网络的性能。

在2012年,Alex、Hinton在其论文《ImageNet Classification with Deep Convolutional Neural Networks》中用到了Dropout算法,用于防止过拟合。并且,这篇论文提到的AlexNet网络模型引爆了神经网络应用热潮,并赢得了2012年图像识别大赛冠军,使得CNN(Convolutional Neural Networks, CNN)成为图像分类上的核心算法模型。

随后,又有一些关于Dropout的文章《Dropout:A Simple Way to Prevent Neural Networks from Overfitting》、《Improving Neural Networks with Dropout》、《Dropout as data augmentation》。

从上面的论文中,我们能感受到Dropout在深度学习中的重要性。那么,到底什么是Dropout呢?

Dropout可以作为训练深度神经网络的一种trick供选择。在每个训练批次中,通过忽略一半的特征检测器(让一半的隐层节点值为0)(不止可以选择一半,也可以选择其他比例),可以明显地减少过拟合现象。这种方式可以减少特征检测器(隐层节点)间的相互作用,检测器相互作用是指某些检测器依赖其他检测器才能发挥作用。

Dropout说的简单一点就是:我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征,如图所示。

1.2 Dropout的作用

在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象。在训练神经网络的时候经常会遇到过拟合的问题,过拟合具体表现在:模型在训练数据上损失函数较小,预测准确率较高;但是在测试数据上损失函数比较大,预测准确率较低。

过拟合是很多机器学习的通病。如果模型过拟合,那么得到的模型几乎不能用。为了解决过拟合问题,一般会采用模型集成的方法,即训练多个模型进行组合。此时,训练模型费时就成为一个很大的问题,不仅训练多个模型费时,测试多个模型也是很费时。

综上所述,训练深度神经网络的时候,总是会遇到两大缺点:

  • 容易过拟合
  • 费时

Dropout可以比较有效的缓解过拟合的发生,在一定程度上达到正则化的效果。

1.3 Dropout的数学原理

一个线性的神经网络,如下图所示,它的输出是输入的加权和,表示为式(1)。这里我们只考虑最简单的线性激活函数,这个原理也适用于非线性的激活函数,只是推导起来更加复杂。

对于上图的无Dropout的网络,它的误差可以表示为式(2),其中 t 是目标值。

(2)式之所以使用 w‘是为了找到之后要介绍的加入Dropout的网络的关系,其中 w‘=pw 。那么(2)可以表示为式(3)。

关于 w_{i}的导数表示为(4)

当我们向图2中添加Dropout之后,它的误差表示为式(5)。 在这里插入图片描述
是丢失率,它服从伯努利分布,

即它有 p 的概率值为 1,1−p 的概率值为0 。

它关于 w_{i}​的导数表示为(6)

对比式(6)和式(7)我们可以看出,在w^{'}=pw的前提下,带有Dropout的网络的梯度的期望等价于带有正则的普通网络。换句话说,Dropout起到了正则的作用,正则项为w_{i}p_{i}(1-p_{i})I_{i}^{2}

1.4 Dropout是一个正则网络

通过上面的分析我们知道最小化含有Dropout网络的损失等价于最小化带有正则项的普通网络,如式(8)。

也就是说当我们对式(8)的 w_{i}进行求偏导,会得到(4)式的带有Dropout网络对 w_{i}的求偏导相同的结果。因此可以得到使用Dropout的几个技巧:

  • 当丢失率为0.5 时,Dropout会有最强的正则化效果。因为 p(1-p)在 p=0.5时取得最大值。

  • 丢失率的选择策略:在比较深的网络中,使用 0.5的丢失率是比较好的选择,因为这时Dropout能取到最大的正则效果;在比较浅层的网络中,丢失率应该低于 0.2,因为过多的丢失率会导致丢失过多的输入数据对模型的影响比较大;不建议使用大于 0.5的丢失率,因为它在丢失过多节点的情况下并不会取得更好的正则效果。

  • 在测试时需要将使用丢失率对w进行缩放:基于前面 w‘=pw的假设,我们得知无Dropout的网络的权值相当于对Dropout的网络权值缩放了 1-p倍。在含有Dropout的网络中,测试时不会丢弃节点,这相当于它是一个普通网络,因此也需要进行 1-p倍的缩放。

2 Dropout的使用

2.1 CNN的Dropout

不同于MLP的特征层是一个特征向量,CNN的Feature Map是一个由宽,高,通道数组成的三维矩阵。按照传统的Dropout的理论,它丢弃的应该是Feature Map上的若干个像素点,但是思想方法在CNN中并不是十分奏效的,一个重要的原因便是临近像素点之间的相似性。因为他们不仅在输入的值上非常接近,而且他们拥有相近的邻居,相似的感受野以及相同的卷积核。因此Dropout在CNN上也有很多优化。

在CNN中,我们可以以通道为单位来随机丢弃,这样可以增加其它通道的建模能力并减轻通道之间的共适应问题,这个策略叫做Spatial Dropout [6]。我们也可以随机丢弃Feature Map中的一大块区域,来避免临近像素的互相补充,这个方法叫做DropBlock[7]。还有一个常见的策略叫做Max-pooling Dropout [8],它的计算方式是在执行Max-Pooling之前,将窗口内的像素进行随机mask,这样也使的窗口内较小的值也有机会影响后面网络的效果。

2.2 RNN的Dropout

和CNN一样,传统的Dropout并不能直接用在RNN之上,因为每个时间片的Dropout会限制RNN保留长期记忆得能力,因此一些专门针对RNN的Dropout被提了出来,针对RNN上的Dropout的研究主要集中在LSTM上。RNNDrop[9]提出我们可以在RNN的循环开始之前生成一组Mask,这个mask作用到LSTM的cell states上,然后在时间片的循环中保持这一组Mask的值不变,如式(10)。

Recurrent Dropout [10]则提出也可以将掩码作用到更新cell state的地方,同样它的掩码值也保持不变,如式(11)。

Yarin Gal等人提出Dropout也可以作用到LSTM的各个们上[11],如式(12)。

其中z_{x}z_{h}是作用到输入数据和隐层节点状态的两个掩码,它们在整个时间步骤内保持不变。

2.3 高斯Dropout

在传统的Dropout中,每个节点以 1-p的概率被mask掉。反应到式(5)中,它表示为使用权值乘以\delta\delta \sim Bernoulli(p)服从伯努利分布。式(5)相当于给每个权值一个伯努利的Gate,如图4所示。
Dropout可以看做给每个权值添加一个伯努利的gate

如果将图4中的伯努利gate换成高斯gate,那么此时得到的Dropout便是高斯Dropout,如图5所示。在很多场景中,高斯Dropout能够起到等价于甚至高于普通Dropout的效果。
高斯Dropout

在使用高斯Dropout时,因为激活值保持不变,因此高斯Dropout在测试时不需要对权重进行缩放。因为在高斯Dropout中,所有节点都参与训练,这样对提升训练速度也有帮助。在高斯Dropout中,每个节点可以看做乘以了p(1-p) ,这相当于增熵,而Dropout丢弃节点的策略相当于减熵。在Srivastava等人的论文中,他们指出增熵是比减熵更好的策略,因此高斯Dropout会有更好的效果。

2.4 DropConnect

DropConnect[3]的思想也很简单,它不是随机将隐层节点的输出置 ,而是将节点中的每个与其相连的输入权值以一定概率置 ,它们一个是输出,一个是输入,表示为式(13)。

其中M是二值掩码矩阵,它里面的每一个元素服从伯努利分布。Dropout可以看做是对计算完成结果进行掩码,而DropConnect可以看做对输入权值的进行掩码,如图5所示。

2.5 StandOut

在Dropout中,每个节点以相同概率 的伯努利分布被丢弃,StantOut[4]提出丢弃的概率 应该是自适应的,它的值取决于权重的值,一般权重越大,被丢弃的概率越高。在训练时,StandOut的节点被丢弃的概率表示为式(14)。

其中W_{s}是网络权值,g是激活函数,也可以是一个网络,例如深度置信网络。实验结果表明深度置信网络可以近似为权重的仿射函数,例如我们可以采用sigmoid激活函数。在测试的时候,我们也需要对权值进行缩放。

在StandOut中,一个节点被mask掉的概率取决于它的权值,权值越高它被mask掉的概率越高,这样就避免了网络过分依赖某些少数的节点。

2.6 蒙特卡洛Dropout

蒙特卡洛方法本质上是通过有限次的采样,来拟合一个测试结果。这里要介绍的蒙特卡洛Dropout(MCDropout)[12]可以使用到任何使用Dropout训练的网络中,在训练时MCDropout和原始的Dropout保持相同,但是在测试时它继续保留Dropout的丢弃操作,通过随机采样大量不同的测试结果来产生真实的结果,得到预测结果的均值和方差。因为MCDropout的多次预测是可以并行执行的,因此并不会耗费太长的时间。

论文中MCDropout的理论证明非常复杂,这里我们大致阐述一下它的思想。MCDropout的提出思想主要是作者认为softmax的值并不能反映样本分类的可靠程度。跟我我们对softmax输出向量的观察,值最大的那一类往往是一个非常高的一个值,甚至当它预测错误的时候这个值也有可能大于

,这个值作为模型的置信度是非常不可靠的。MCDropout通过在不同的模型上的采样来对同一个数据进行预测,那么根据多次采样的结果便可以得到一个比softmax更可靠的置信度。恰好Dropout是一个天然的不同模型的生成器,所以在测试的时候要保留Dropout。

3 Dropout的代码实现

import numpy as npdef dropout(x, keep_prob):d3 = (np.random.rand(*x.shape) < keep_prob)  #dropoutprint(d3)x = np.multiply(x,d3)print(x)x = x/keep_prob  #inverted dropoutreturn xa3 = np.asarray([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], dtype=np.float32)
a3 = dropout(a3,0.8)
print(a3)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

06组团队项目-Beta冲刺-3/3

github仓库&#xff1a;https://github.com/orgs/oucdehaze/repositories b站视频链接&#xff1a;06组团队项目-Beta冲刺-3/3_哔哩哔哩_bilibili 冲刺概况汇报 前端 上周冲刺中完成的任务及遇到的问题 对网站页面组件和整体进一步美化&#xff0c;提高各组件之间的协调度&…

最新ChatGPT商业运营网站程序源码,支持Midjourney绘画,GPT语音对话+DALL-E3文生图+文档对话总结

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

mac传输文件到windows

前言 由于mac系统与windows系统文件格式不同&#xff0c;通过U盘进行文件拷贝时&#xff0c;导致无法拷贝。 几种文件格式说明&#xff1a; NTFS 文件格式&#xff1a;只适用于 windows 系统&#xff0c;不适用于 mac 系统&#xff1b; APFS 文件格式&#xff1a;mac 系统格式…

前端开发中利用css的scoped和deep的方法实现样式穿透

scoped作用域 在vue中&#xff0c;我们为了避免父组件的样式影响到子组件的样式&#xff0c;会在style中加 父组件&#xff1a; <template><div><h1 class"title">{{ name }}</h1><input type"text" v-model.lazy"name…

Ant Design Vue表单组件a-form-item-rest使用

开发时碰到的一个小问题&#xff0c;在a-form-item中不止需要一个元素的时候&#xff0c;需要用到a-form-item-rest 报错信息&#xff1a; Warning: [ant-design-vue: Form.Item] FormItem can only collect one field item, you haved set ACheckbox, ACheckboxGroup 2 field …

SDH网络时钟同步(NTP时间同步)概念及性能指标

SDH网络时钟同步&#xff08;NTP时间同步&#xff09;概念及性能指标 SDH网络时钟同步&#xff08;NTP时间同步&#xff09;概念及性能指标 网同步是数字网所特有的问题。 通过实现网同步可以使得网中各节点的时钟频率和相位都限制在预先确定的容差范围内&#xff0c;以免由于数…

性能测试之Mysql数据库调优

一、前言 性能调优前提&#xff1a;无监控不调优&#xff0c;对于mysql性能的监控前几天有文章提到过&#xff0c;有兴趣的朋友可以去看一下 二、Mysql性能指标及问题分析和定位 1、我们在监控图表中关注的性能指标大概有这么几个&#xff1a;CPU、内存、连接数、io读写时间…

Certum的EV增强型证书

EV增强型https证书是一种特别的数字证书&#xff0c;只有这一款域名数字证书可以直接在地址栏显示企业名称(支持中文名称)。因此&#xff0c;很多企业为了提升企业的品牌形象&#xff0c;向客户展示企业的专业性和可靠性&#xff0c;往往会选择这种类型的数字证书。今天就随SSL…

SQL面试题挑战06:互相关注的人

目录 问题&#xff1a;SQL解答&#xff1a; 问题&#xff1a; 现在有一张relation表&#xff0c;里面只有两个字段&#xff1a;from_user和to_user&#xff0c;代表关注关系从from指向to&#xff0c;即from_user关注了to_user。现在要找出互相关注的所有人。 from_user to_…

python 安装 Selenium

方式1&#xff1a; 下载指定的Selenium版本&#xff1b;解压文件&#xff1b;使用cmd进入解压目录下执行命令&#xff1a;pip setup.py install。 方式2&#xff1a; 打开cmd命令输入pip install selenium指定版本号&#xff0c;pip install selenium2.48.0。 3. 方式3 此外&am…

【React Native】第一个Android应用

第一个Android应用 环境TIP开发工具环境及版本要求建议官方建议 安装 Android Studio首次安装模板选择安装 Android SDK配置 ANDROID_HOME 环境变量把一些工具目录添加到环境变量 Path[可选参数] 指定版本或项目模板 运行使用 Android 模拟器编译并运行 React Native 应用修改项…

阶段七-GitEE

Git&#xff1a;版本控制软件 Git的优点 1.1 协同修改 多人并行不悖的修改服务器端的同一个文件。 1.2 数据备份 不仅保存目录和文件的当前状态&#xff0c;还能够保存每一个提交过的历史状态。 1.3 版本管理 在保存每一个版本的文件信息的时候要做到不保存重复数据&…

猫头虎分享2023年12月17日博客之星候选--领域赛道博主文章数据

猫头虎分享2023年12月17日博客之星候选–领域赛道博主文章数据 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开…

单位圆内接三角形的角是外接三角

证明 ∠ A P C 2 ∠ A B C ∠APC2∠ABC ∠APC2∠ABC ∴ ∴ ∴ 三角形内角和为180 $∵ \begin{cases} ∠ABP∠BAP∠APB180 \∠ABC∠BAC∠ACB180 \∠PAC∠PCA∠APC180 \end{cases} $ ∴ A P B P P C r ∴APBPPCr ∴APBPPCr ∵ ∵ ∵△PAB和△PAC为等腰三角形 ∴ ∴ ∴等腰三…

Pandas 高级教程——多级索引

Python Pandas 高级教程&#xff1a;多级索引 Pandas 中的多级索引是一种强大的工具&#xff0c;用于处理具有多个维度或层次的数据。多级索引可以在行和列上创建层次结构&#xff0c;提供更灵活的数据表示和分析方式。在本篇博客中&#xff0c;我们将深入介绍 Pandas 中的多级…

IntelliJ IDEA 2023.3 安装教程

引言 IntelliJ IDEA&#xff0c;通常简称为 IDEA&#xff0c;是由 JetBrains 开发的一款强大的集成开发环境&#xff0c;专为提升开发者的生产力而设计。它支持多种编程语言&#xff0c;包括 Java、Kotlin、Scala 和其他 JVM 语言&#xff0c;同时也为前端开发和移动应用开发提…

【2023-12-25有感】你是一块顽石

从1998年11月出生&#xff0c;到2023年末&#xff0c;人生已完整过去25年&#xff0c;这是人生的三分之一。 我经常思考&#xff0c;人活着是为了什么。 有时候我很困&#xff0c;睡着了&#xff0c;早上被上班的闹铃闹醒&#xff0c;我极度的想要再睡一会&#xff0c;想必会…

这款APP,在离线环境下也能查看倾斜模型、点云等数据

《四维轻云-离线版》APP是基于移动端开发的轻量化地理空间数据应用平台&#xff0c;实现了用户对空间数据场景的制作和应用。 目前&#xff0c;已涵盖的数据类型包括倾斜模型(.osgb)、激光点云(.las)、正射影像(dom)、数字高程模型(dem)、矢量数据(shp)、人工模型&#xff08;…

【开源】基于Vue+SpringBoot的贫困地区人口信息管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 人口信息管理模块2.2 精准扶贫管理模块2.3 特殊群体管理模块2.4 案件信息管理模块2.5 物资补助模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 人口表3.2.2 扶贫表3.2.3 特殊群体表3.2.4 案件表3.2.5 物资补助表 四…

利用 OpenAI API 进行文本聚类和标记

每日推荐一篇专注于解决实际问题的外文&#xff0c;精准翻译并深入解读其要点&#xff0c;助力读者培养实际问题解决和代码动手的能力。 欢迎关注公众号 原文标题&#xff1a;Text Clustering and Labeling Utilizing OpenAI API 原文地址&#xff1a;https://medium.com/kbd…