深度学习中的Dropout

news2024/12/23 8:58:59

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 np
 
def dropout(x, keep_prob):
    d3 = (np.random.rand(*x.shape) < keep_prob)  #dropout
    print(d3)
    x = np.multiply(x,d3)
    print(x)
    x = x/keep_prob  #inverted dropout
    return x
 
a3 = np.asarray([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], dtype=np.float32)
a3 = dropout(a3,0.8)
print(a3)

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

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

相关文章

光耦继电器

光耦继电器(光电继电器) AQW282SX 282SZ 280SX 280SZ 284SX 284SZ 212S 212SX 21 2SZ 文章目录 光耦继电器(光电继电器)前言一、光耦继电器是什么二、光耦继电器的类型三、光电耦合器的应用总结前言 光耦继电器在工业控制、通讯、医疗设备、家电及汽车电子等领域得到广泛应…

基于鸢尾花数据集的逻辑回归分类实践

基于鸢尾花数据集的逻辑回归分类实践 重要知识点 逻辑回归 原理简介&#xff1a; Logistic回归虽然名字里带“回归”&#xff0c;但是它实际上是一种分类方法&#xff0c;主要用于两分类问题&#xff08;即输出只有两种&#xff0c;分别代表两个类别&#xff09;&#xff0c…

Flutter windows 环境配置

Flutter windows 环境配置 从零开始&#xff0c;演示flutter环境配置到启动项目&#xff0c;同时支持 vscode 和 android studio 目录 Flutter windows 环境配置一、环境配置1. Flutter SDK2. Android Studio3. JDK4. 拓展安装5. Visual Studio 2022二、项目创建和启动1. vsco…

Spark集群部署与架构

在大数据时代&#xff0c;处理海量数据需要分布式计算框架。Apache Spark作为一种强大的大数据处理工具&#xff0c;可以在集群中高效运行&#xff0c;处理数十TB甚至PB级别的数据。本文将介绍如何构建和管理Spark集群&#xff0c;以满足大规模数据处理的需求。 Spark集群架构…

小狐狸ChatGPT付费创作系统小程序端开发工具提示打开显示无法打开页面解决办法

最新版2.6.7版下载&#xff1a;https://download.csdn.net/download/mo3408/88656497 很多会员在上传小程序前端时经常出现首页无法打开的情况&#xff0c;错误提示无法打开该页面&#xff0c;不支持打开&#xff0c;这种问题其实就是权限问题&#xff0c;页面是通过调用web-v…

vue3(七)-基础入门之事件总线与动态组件

一、事件总线 事件总线使用场景&#xff1a; 两个兄弟组件之间的传参&#xff0c;或者两个没有关联的组件之间的传参 html &#xff1a;引入 publicmsg 与 acceptmsg 自定义组件 (自定义组件名称必须小写) <body><div id"app"><publicmsg></…

Linux---命令行参数+环境变量

一、命令行参数 int main(int argc,char*argv[]) {//...return 0; } 不知道有没有人见过这样的主函数&#xff0c;它带了两个参数&#xff0c;argv接收的参数就叫做命令行参数&#xff0c;因为它的参数是从命令行来的&#xff0c;给大家演示一下&#xff0c;大家就懂了 命令行…

YOLOv8改进 | 2023注意力篇 | MSDA多尺度空洞注意力(附多位置添加教程)

一、本文介绍 本文给大家带来的改进机制是MSDA&#xff08;多尺度空洞注意力&#xff09;发表于今年的中科院一区(算是国内计算机领域的最高期刊了)&#xff0c;其全称是"DilateFormer: Multi-Scale Dilated Transformer for Visual Recognition"。MSDA的主要思想是…

北海 - Rust与面向对象(三)

策略模式 上节说到&#xff0c;模板方法变化一下就能成策略模式&#xff0c;怎么变化的&#xff1f;且看策略模式典型案例&#xff1a; pub trait Fly {fn fly(&self); }pub trait Quack {fn quack($self); }/// 先以静多态的方式实现 /// 似 trait Fly Quack就是Duck&…

java调用GDAL实现栅格数据的重采样的一种方法

目录 1.关于重采样 1.1概念 1.2用途 1.3常见算法 2.关于GDAL 2.1GDAL中的重采样算法 3.实现重采样 3.1思路 3.2完整代码 3.3使用QGIS验证效果 1.关于重采样 1.1概念 重采样是以原始图像的像元值或者导出的值填充到新的图像的每个像元的的过程。 1.2用途 在地理信…

【MySQL学习笔记007】约束

1、概述 概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。 目的&#xff1a;保证数据库中数据的正确、有效性和完整性。 分类 注意&#xff1a;约束是作用于表中字段上的&#xff0c;可以在创建表/修改表的时候添加约束。 2、约束…

文章标题(备注)

现在也裁员了吗&#xff1f;怎么感觉越来越垃圾 这个又是什么&#xff1f;真搞笑&#xff0c;我也没开隐私呀

生物神经网络衍生出的算法

一个生物神经网络的基本结构&#xff1a; 生物神经网络由大量神经元组成&#xff0c;这些神经元之间通过突触相互连接。神经元可以接收来自其他神经元的信号&#xff0c;并根据信号的强度和类型来调整自己的输出信号。这种神经元之间的相互连接和信号传递形成了生物神经网络的基…

记pbcms网站被攻击,很多标题被篡改(1)

记得定期打开网站看看哦! 被攻击后的网站异常表现:网页内容缺失或变更,页面布局破坏,按钮点击无效,...... 接着查看HTML、CSS、JS文件,发现嵌入了未知代码! 攻击1:index.html 或其他html模板页面的标题、关键词、描述被篡改(俗称,被挂马...),如下: 攻击2:在ht…

[原创][R语言]股票分析实战[4]:周级别涨幅趋势的相关性

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、D…

<JavaEE> 协议格式 -- 传输层协议 UDP

目录 一、UDP协议格式长啥样&#xff1f; 二、端口号和IP地址 1&#xff09;UDP协议中包含哪两个端口号&#xff1f; 2&#xff09;有没有包含IP地址&#xff1f; 三、UDP报文长度 1&#xff09;UDP报文长度最长多长&#xff1f; 2&#xff09;UDP报文的组成&#xff1f…

相机内参标定理论篇------张正友标定法

一、为什么做相机标定&#xff1f; 标定是为了得到相机坐标系下的点和图像像素点的映射关系&#xff0c;为摄影几何、计算机视觉等应用做准备。 二、为什么需要张正友标定法&#xff1f; 张正友标定法使手工标定相机成为可能&#xff0c;使相机标定不再需要精密的设备帮助。…

嵌入式开发——DMA外设到内存

学习目标 加强理解DMA数据传输过程加强掌握DMA的初始化流程掌握DMA数据表查询理解源和目标的配置理解数据传输特点能够动态配置源数据学习内容 需求 uint8_t data; 串口接收(&data);data有数据了 实现串口的数据接收,要求采用dma的方式。 数据交互流程 CPU配置好DMA外…

java数据结构与算法刷题-----LeetCode167:两数之和 II - 输入有序数组

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 思路 题目要求我们找到两个数相加的和&#xff0c;等于target指定的值。而…

设计模式--职责链模式

实验15&#xff1a;职责链模式 本次实验属于模仿型实验&#xff0c;通过本次实验学生将掌握以下内容&#xff1a; 1、理解职责链模式的动机&#xff0c;掌握该模式的结构&#xff1b; 2、能够利用职责链模式解决实际问题。 [实验任务]&#xff1a;财务审批 某物资管理系统…