6.4 Dropout正则化

1、Dropout

Dropout是一种正则化技术,通过防止特征的协同适应,可用于减少神经网络中的过拟合

Dropout的效果非常好,实现简单且不会降低网络速度,被广泛使用。

特征的协同适应指的是在训练模型时,共同训练的神经元为了相互弥补错误,而相互关联的现象,在神经网络中这种现象会变得尤其复杂。

协同适应会转而导致模型的过度拟合,因为协同适应的现象并不会泛化未曾见过的数据

Dropout从解决特征间的协同适应入手,有效地控制了神经网络的过拟合。

Dropout在每次训练中,按照一定概率 p ,随机地抑制一些神经元的更新,相应地,按照概率 1-p 保留一些神经元的更新。

当神经元被抑制时,它的前向传播结果被置为0,而不管相应的权重和输入数据的数值大小

被抑制的神经元在反向传播中,也不会更新相应权重,也就是说被抑制的神经元在前向传播和反向传播中都不起任何作用。

通过随机的抑制一部分神经元,可以有效防止特征的相互适应。

2、Dropout的实现方法

Dropout的实现方法非常简单,参考下面代码:

生成一个随机数矩阵activations,表示神经网络中隐藏层的激活值。

构建了一个参数 p=0.5 的伯努利分布,并从中采样一个由伯努利变量组成的掩码矩阵mask。

【伯努利变量是只有0和1两种取值可能性的离散变量

将mask和activations逐元素相乘mask中数值为0的变量会将相应的激活值置为0,无论这一激活值本来的数值多大都不会参与到当前网络中更深层的计算,而mask中数值为1的变量则会保留相应的激活值。

输出为:

3、Dropout在训练模式和测试模式下的区别

因为Dropout对神经元的抑制是按照 p 的概率随机发生的,所以使用了Dropout的神经网络在每次训练中,学习的几乎都是一个新的网络。

另外的一种解释是Dropout在训练一个共享部分参数的集成模型

为了模拟集成模型的方法,使用了Dropout的网络需要使用到所有的神经元

所以在测试时,Dropout将激活值乘上一个尺度缩放系数 1-p 恢复在训练时按概率p随机地丢弃神经元所造成的尺度变换,其中的 p 就是在训练时抑制神经元的概率

在实践中(同时也是PyTorch的实现方式),通常采用Inverted Dropout 的方式。

在训练时对激活值乘上尺度缩放系数 1 / 1-p ,而在测试时则什么都不需要做。

Dropout会在训练和测试时做出不同的行为,PyTorch的torch.nn.Module 提供了 train 方法和 eval 方法,通过调用这两个方法可以将网络设置为训练模式或测试模式。

这两个方法只对Dropout这种训练和测试不一致的网络层起作用,而不影响其他的网络层,(后面介绍的 BatchNormalization也是训练和测试步骤不同的网络层。)

下面通过两个实验说明Dropout在训练模式和测试模式下的区别。

执行了统计dropout影响到的神经元数量,注意因为PyTorch的Dropout采用了Inverted Dropout。所以在count += torch.sum(output == activations * (1/(1-p)))对activations乘上了 1 /(1-p),以应对Dropout的尺度变化。

结果发现它大约影响了50%的神经元,这一数值和我们设置的 p = 0.5基本一致。换句话说,p的数值越高,训练中的模型就越精简。

统计了Dropout在测试时影响到的神经元数量,结果发现它并没有影响任何神经元,也就是说Dropout在测试时并不改变网络的结构

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

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

相关文章

【算法篇】逐步理解动态规划1(斐波那契数列模型)

目录 斐波那契数列模型 1. 第N个泰波那契数 2.使用最小花费爬楼梯 3.解码方法 学过算法的应该知道,动态规划一直都是一个非常难的模块,无论是状态转移方程的定义还是dp表的填表,都非常难找到思路。在这个算法的支线专题中我会结合很多力…

stm32启动文件里面的__main和主函数main()

一、__main和main()之间的关系 先来对stm32启动过程简单学习 启动文件里面的Reset_Handler: 调用过程: stm32在启动后先进入重启中断函数Reset_Handler,其中会先后调用SystemInit和__main函数, __main函数属于c库函数&…

在mysql中索引字段类型是设置为bigint?还是varchar好?

在数据库设计中,选择索引字段的数据类型时,bigint和varchar各有优缺点,具体选择哪种类型取决于字段的用途、数据特性和查询需求。以下是对两者特点的对比: bigint: •优点: •大整数类型,适合存储整数或长整…

基于SpringBoot+Vue健身房管理系统(源码+部署说明+演示视频+源码介绍)

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通…

Selenium 驱动配置 和 元素定位

目录 驱动配置 元素定位 By类普通参数方法 CSS选择器参数方法 By类xpath参数方法 驱动配置 //新建chrome浏览器驱动配置 ChromeOptions options new ChromeOptions();//添加参数,允许远程访问 options.addArguments("--remote-allow-origins*");//新…

Transformer的前世今生 day03(Word2Vec、如何使用在下游任务中)

前情回顾 由上一节,我们可以得到: 任何一个独热编码的词都可以通过Q矩阵得到一个词向量,而词向量有两个优点: 可以改变输入的维度(原来是很大的独热编码,但是我们经过一个Q矩阵后,维度就可以控…

day29|leetcode|C++|491. 非递减子序列|46. 全排列|47. 全排列 II

Leetcode 491. 非递减子序列 链接:491. 非递减子序列 thought: 设 stack 中最后一个值的位置为 last。如果 stack 为空,则 last -1。 设当前正在处理的位置为 pos。如果在 nums 的子区间 [last1, pos) 中,存在和 nums[pos] 相同的值&…

Kafka broker

1. zk中存储的kafka信息 /kafka/brokers/ids存储了在线的broker id。 /kafka/brokers/topics/xxx/partitions/n/state存储了Leader是谁以及isr队列 /kafka/controller辅助Leader选举,每个broker都有一个controller,谁先在zk中注册上,谁就辅助…

Autosar MCAL配置——Fls

文章目录 一、FLS基础知识二、达芬奇配置2.1 创建Fls模块2.2 FlsGeneralFlsDataFlash2.3 FlsConfigSet0FlsSector2.4 FlsPublishInfomation一、FLS基础知识 主要提供对Flash的读,写,擦相关操作服务;如果底层硬件支持的话,也提供一些配置接口来设置擦/写保护功能。 flash操…

低成本养号降低封号风险,这种方式你试过了吗?

众所周知,对于那些主要依赖海外社交媒体平台(如Facebook脸书、推特X、Instagram等)进行引流和投广、谷歌上架应用等拓展海外业务、主要赚海外money的朋友们而言,账号一旦被封,就会严重影响业务进程,甚至可能…

腾讯云服务器多少钱一年?价格表新鲜出炉(2024)

腾讯云服务器多少钱一年?61元一年起。2024年最新腾讯云服务器优惠价格表,腾讯云轻量2核2G3M服务器61元一年、2核2G4M服务器99元一年可买三年、2核4G5M服务器165元一年、3年756元、轻量4核8M12M服务器646元15个月、4核16G10M配置32元1个月、312元一年、8核…

【研究僧总结】回顾第1095个创作日

目录 前言一. 机缘二. 日常三. 展望 前言 感觉刚过1024不久,现在又来个1095创作日 一. 机缘 研究僧一直在找平台做笔记,方便之后的回顾总结,也让各位网友见证你我的成长,相互学习 止不住的写文止不住的成长,大家共同…

Docker 之 数据卷

目录 1. 数据卷是什么 1.1 运行一个带有容器卷存储功能的容器实例 2.能干什么 3. 容器卷案例 3.1 宿主机vs容器之间映射添加容器卷 3.1.1 命令添加: 3.1.2 查看数据卷是否挂载成功 3.1.3 容器和宿主机之间数据共享 3.2 读写规则映射添加说明 3.2.1 读写&…

java系统部署到Linux

1、安装java 1.8JDK 卸载Open JDK 首先,我们先检查系统是否自带了 JDK。输入命令 java -verison批量删除 rpm -qa | grep java | xargs rpm -e --nodeps下载并安装JDK 我们在 user 目录下建立一个新的 java文件夹,用来存放 JDK文件。 jdk下载地址 …

快速上手 Elasticsearch:Docker Compose 部署详解

最近面试竞争日益激烈,Elasticsearch作为一款广泛应用的中间件,几乎成为面试中必考的知识点。最近,AIGC也备受关注,而好多的AI项目中也采用了Elasticsearch作为向量数据库,因此我们迫切希望学习Elasticsearch。对于学习…

全球首位AI程序员Devin的诞生及其对程序员职业未来的影响

写在开头 在人工智能(AI)的浪潮下,全球首位AI程序员Devin的出现,无疑为软件开发领域带来了前所未有的变革。Devin不仅是一个编程工具,更是一个标志性的里程碑,预示着AI技术在编程领域的应用将更加广泛和深…

Docker简介及用途,为什么要使用Docker?Docker容器和虚拟机的区别?

Docker简介 前言 前端有必要学习Docker吗?有!!不仅要学Docker,还要学习Kubernetes (K8s),Jenkins 那问题来了,Docker,k8s,jenkins到底要先学习那个呢?当然是Docker 总结来说,先学习…

typescript关键知识点总结(一)

一 聊聊typescript的核心原理 TypeScript 是一种基于 JavaScript 的强类型编程语言,它使得在前端项目开发过程中更加严谨且流畅,一定程度上保证了大型前端项目程序的健壮性。 但是 TypeScript 并不可以直接运行,而是需要转换成 JavaScript 代码才可以在 Node.js 或浏览器环…

C++初阶:STL容器list的使用与初版自实现

目录 1. list的接口与使用1.1 默认成员函数1.2 迭代器与容量相关成员函数1.3 存储数据操作相关成员函数1.4 其他list操作成员函数 2. list的自实现2.1 list的自实现功能2.2 list的结点结构2.3 list的迭代器2.3 list的结构2.4 list迭代器的运算符重载2.5 list的成员函数 3. cons…

双指针(滑动窗口)-算法刷题

一.移动零(. - 力扣(LeetCode)) 算法思想 : 设置两个指针left,right,将数组分为三块[0,left]为不为0的元素,[left1,right-1]为0元素,[right,num.size()-1]为未扫描的区域&#xff0c…