【机器学习300问】75、如何理解深度学习中Dropout正则化技术?

一、Dropout正则化的原理是什么?

        Dropout(随机失活)正则化是一种用于减少神经网络中过拟合现象的技术。Dropout正则化的做法是:

        在训练过程中的每次迭代中,随机将网络中的一部分权重临时"丢弃"(即将它们的值设为0),确保它们不参与前向传播和后向传播。换句话说,每个神经元有一定的概率被暂时从网络中移除。通过这种方式,网络的每次训练迭代都是在一种略微不同的架构下完成的。这相当于在训练一个由多个不同网络组成的大型网络组合。

        通常,丢弃的概率(dropout rate)是一个预先设定的值,如0.5,意味着在每一轮训练中,大约有一半的隐藏层神经元会被暂时忽略。有时候也反过来设置一个保留概率(keep-prob)操作和上面类似。

二、如何具体实现Dropout?

用下面这幅图为例来详细说明一下Dropout的步骤

 (1)确定Dropout率

        dropout_rate是一个超参数,表示在每次训练迭代中神经元被丢弃的概率。设定为 p,通常在0.2到0.5之间。

keep_prob = 1 - dropout_rate

(2)生成随机的Dropout掩码

        Dropout最常用的方法,即inverted dropout(反向随机失活),首先要定义Dropout掩码向量dropout_mask。然后看它是否小于某数,我们称之为keep_probkeep_prob是一个具体数字,而本例将它设为0.8,它表示保留某个隐藏单元的概率,此处keep-prob等于0.8,它意味着消除任意一个隐藏单元的概率是0.2,它的作用就是生成随机矩阵。

dropout_mask = np.random.rand(activations.shape[0], activations.shape[1]) < keep_prob

        接下来要做的就是从某一层中获取激活函数,这里我叫它activationsactivations其中含有要计算的激活函数。

(3)应用掩码

        将activationsdropout_mask相乘,它的作用就是让dropout_mask中所有等于0的元素(输出),而各个元素等于0的概率只有20%,乘法运算最终把dropout_mask中相应元素输出,即让dropout_mask中0元素与activations中相对元素归零。

activations *= dropout_mask  # 将神经元的输出乘以0或1

(4)Dropout缩放

        在测试或使用神经网络进行预测时,通常不会应用Dropout。但是,为了平衡那些在训练时被“保留下来”的权重,我们对网络中每个权重乘以保留(未丢弃)概率,或者是在测试时使用所有权重的平均值。这种方法称为“Dropout缩放”,它确保了训练时和测试时网络的表现是一致的。

activations /= keep_prob     # 缩放未丢弃的神经元的输出

(5)总结

         将上面的步骤总结起来,可以写成这样: 

def apply_dropout(activations, dropout_rate):# Step 1: 确定保留的神经元的概率keep_prob = 1 - dropout_rate# Step 2: 生成随机的Dropout掩码dropout_mask = np.random.rand(activations.shape[0], activations.shape[1]) < keep_prob# Step 3: 应用掩码并缩放activations *= dropout_mask  # 将神经元的输出乘以0或1activations /= keep_prob     # 缩放未丢弃的神经元的输出return activations

        需要特别说一下的是,不同层的keep_prob是可以不同的,因为不同层的W权重矩阵的大小不同,一般我们担心这些层更容易发生过拟合,对很大的权重矩阵设置比较低的keep_prob假设是0.5。对于其它层,过拟合的程度可能没那么严重,它们的keep-prob值可能高一些,可能是0.7。如果在某一层,我们不必担心其过拟合的问题,那么keep-prob可以为1意味着保留所有单元,并且不在这一层使用dropout。

三、为什么Dropout会起作用?它是怎么解决过拟合的?

        这种随机性的丢弃操作带来了几个重要的好处。

(1)抑制神经元对单一特征的过度依赖

        如果某些神经元对应的权重值过大,它们对输入信号的响应将显著超过其他神经元,使得模型在做决策时过度依赖这些神经元所代表的特征,形成了对单一特征的过度敏感。        

        Dropout通过随机失活隐藏层神经元,打破了神经元对单一特征的固定依赖关系,迫使模型在不同训练迭代中学习不同的特征组合,降低了对特定特征的敏感度。

(2)抑制神经元之间过度依赖

        在没有Dropout的情况下,某些神经元可能会形成过于紧密的协作关系,对训练数据中的特定模式过拟合,导致模型在遇到未见过的数据时表现不佳。

        Dropout通过随机移除部分神经元,迫使剩余神经元独立地学习更通用、更稳健的特征表示,降低模型对个别特征或特征组合的敏感度,强制网络在训练时不能过度依赖任何一组特定的神经元,因为特定的神经元随时有可能被失活。从而减轻过拟合现象。

(3)模拟集成学习

        Dropout过程可以被视为对神经网络进行集成学习的一种近似。由于每次前向传播时神经元的失活是随机的,网络在训练过程中实际上经历了大量不同的子网络配置。这些子网络可以看作是原始网络的多个变体,每个变体以不同的方式对输入数据进行处理。

        尽管在测试阶段所有神经元都会恢复工作,但经过Dropout训练的网络权重实际上是众多子网络权重的加权平均,类似于集成学习中的模型平均,有助于减少模型的方差,提高泛化性能。

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

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

相关文章

前端三大件速成 01 HTML

文章目录 一、前端基础知识二、标签1、什么是标签2、标签的属性3、常用标签&#xff08;1&#xff09;声明&#xff08;2&#xff09;注释&#xff08;3&#xff09;html 根标签&#xff08;3&#xff09;head标签&#xff08;4&#xff09;body标签 三、特殊字符四、其他标签1…

web安全学习笔记(11)

记一下第十五节课的内容。 一、创建MySQL执行函数 我们在function.php中&#xff0c;自定义一个函数&#xff1a; #SQL查询函数 function Qurey($sql) {#连接数据库$db new mysqli(172.20.10.3, liuyan, 123456, liuyan, 3306);#判断是否连接成功if (mysqli_connect_errno(…

redis的数据结构报错

文章目录 redis的数据结构报错Redis使用LocalDateTime报错问题 redis的数据结构报错 Redis使用LocalDateTime报错问题 SpringBoot整合Redis时&#xff0c;使用LocalDate以下报错 org.springframework.data.redis.serializer.SerializationException: Could not read JSON: C…

(八)Pandas窗口数据与数据读写 学习简要笔记 #Python #CDA学习打卡

一. 窗口数据(Window Functions) Pandas提供了窗口函数(Window Functions)用于在数据上执行滑动窗口操作&#xff0c;可以对数据进行滚动计算、滑动统计等操作。需要注意的是&#xff0c;在使用窗口函数时&#xff0c;需要根据实际需求选择合适的窗口大小和窗口函数&#xff0…

大数据------额外插件及技术------Git(完整知识点汇总)

Git 定义 它是分布式版本控制工具&#xff0c;主要用于管理开发过程中的源代码文件&#xff08;如&#xff1a;Java类、xml文件、html页面等&#xff09;&#xff0c;在软件开发过程中被广泛应用 作用 代码回溯&#xff1a;快速回到某一代码历史版本版本切换&#xff1a;同一个…

【嵌入式开发】SecureCRTPortable工具进行串口信息监听打印

SecureCRTPortable工具进行串口信息监听打印 一、什么是SecureCRT二、如何使用SecureCRT进行串口监听1、硬件连接2、驱动安装3、软件连接4、串口连接5、日志设置 近期发现许多小伙伴欠缺SSH工具使用基础&#xff0c;工欲善其事&#xff0c;必先利其器&#xff0c;这里奉上使用教…

股票战法课程之主力的痕迹

文章目录 1. 主力的操作痕迹2. 主力的建仓2.1 建仓的三种方式2.2 建仓的五个特点2.3 建仓的迹象2.4 建仓的成交量特征 1. 主力的操作痕迹 序号痕迹原因1不跟随大盘节奏筹码都在主力手中2突发利空消息&#xff0c;股价不跌反涨主力被套&#xff0c;不希望散户抛盘3很小的成交量…

【Spring】Spring MVC入门

Spring MVC入门 一、什么是Spring Web MVC&#xff1f; 1.1 MVC定义 MVC是Model View Controller的缩写&#xff0c;是一种软件架构的设计模式&#xff0c;将软件系统分为模型、视图、控制器三个部分。 示意图如下: 可以看到&#xff0c;Controller作为一个“粘合剂”处于M…

Go 单元测试之mock接口测试

文章目录 一、gomock 工具介绍二、安装三、使用3.1 指定三个参数3.2 使用命令为接口生成 mock 实现3.3 使用make 命令封装处理mock 四、接口单元测试步骤三、小黄书Service层单元测试四、flags五、打桩&#xff08;stub&#xff09;参数 六、总结6.1 测试用例定义6.2 设计测试用…

详细分析Mysql常用函数(附Demo)

目录 前言1. 聚合函数2. 字符串函数3. 日期函数4. 条件函数5. 数值函数6. 类型转换函数 前言 由于实战中经常运用&#xff0c;索性来一个总结文 创建一个名为 employees 的表&#xff0c;包含以下字段&#xff1a; employee_id&#xff1a;员工ID&#xff0c;整数类型 first…

Linux的图形资源及指令

一、火车 1.切换到超级用户 su 2.下载资源 yum install -y sl 3.输入指令 sl&#xff0c;得到火车图形 如果没有得到该图形&#xff0c;就将2处改为yum install -y epel-release。 二、Linux的logo 1.在超级用户模式下下载资源 yum install -y linux_logo 2.输…

物联网(iot)深度解析——FMEA软件

物联网即IoT&#xff0c;是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等各种装置与技术&#xff0c;实时采集任何需要监控、连接、互动的物体或过程&#xff0c;采集其声、光、热、电、力学、化学、生物、位置等各种需要的信息&#xff0c;通过…

C语言——字符函数与字符串函数

正文开始&#xff1a;在编程过程中&#xff0c;我们经常要处理字符和字符串&#xff0c;为了方便操作字符和字符串&#xff0c;C语⾔标准库中提供了 一系列库函数&#xff0c;接下来我们就学习⼀下这些函数。 1. 字符分类函数 C语⾔中有⼀系列的函数是专门做字符分类的&#…

android远程更新下载apk

最近业务有涉及到&#xff0c;奈何是个app代码小白&#xff0c;遂记录一下 一&#xff1a;AndroidManifest.xml文件配置 application标签里面加上 android:networkSecurityConfig"xml/network_config" <!-- app下载更新配置--> <uses-permission andr…

【Qt 学习笔记】Qt常用控件 | 显示类控件Progress Bar的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 显示类控件Progress Bar的使用及说明 文章编号&#xff…

网络防火墙技术知多少?了解如何保护您的网络安全

在当前以网络为核心的世界中&#xff0c;网络安全成为了至关重要的议题。网络防火墙是一种常见的保护网络安全的技术&#xff0c;用于监控和控制网络流量&#xff0c;阻止未经授权的访问和恶意活动。今天德迅云安全就带您了解下防火墙的一些相关功能和类型。 防火墙的五个功能…

(助力国赛)数学建模可视化!!!含代码1(折线图、地图(点)、地图(线)、地图(多边形)、地图(密度)、环形图、环形柱状图、局部放大图)

众所周知&#xff0c;数学建模的过程中&#xff0c;将复杂的数据和模型结果通过可视化图形呈现出来&#xff0c;不仅能够帮助我们更深入地理解问题&#xff0c;还能够有效地向评委展示我们的研究成果。   今天&#xff0c;作者将与大家分享8种强大的数学建模可视化图形及其在…

.Net RabbitMQ(消息队列)

文章目录 一.RabbitMQ 介绍以及工作模式1.RabbitMQ的介绍&#xff1a;2.RabbitMQ的工作模式&#xff1a; 二.RabbitMQ安装1.安装Erlang语言环境2.安装RabbitMQ 三.在.Net中使用RabbitMQ1.HelloWorld模式2.工作队列模式3.发布订阅模式4.Routing路由模式和Topics通配符模式 一.Ra…

使用Python工具库SnowNLP对评论数据标注(二)

这一次用pandas处理csv文件 comments.csv import pandas as pd from snownlp import SnowNLPdf pd.read_csv("C:\\Users\\zhour\\Documents\\comments.csv")#{a: [1, 2, 3], b: [4, 5, 6], c: [7, 8, 9]}是个字典 emotions[] for txt in df[sentence]:s SnowNLP(…

Kali Linux扩容(使用图形化界面)

因为今天在拉取vulhub中的镜像的时候报错空间不够&#xff0c;因为最开始只给了20GB的空间&#xff0c;所以现在需要扩容了&#xff0c;结合了一下网上的找到了简便的解决方法 1.首先虚拟机设置->磁盘->扩展 小插曲&#xff1a;在对虚拟机磁盘进行扩容以后&#xff0c;…