6.4 Dropout正则化

2024-03-25 13:12
文章标签 正则 dropout 6.4

本文主要是介绍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在测试时并不改变网络的结构

这篇关于6.4 Dropout正则化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/845123

相关文章

6.4双边滤波

目录 实验原理 示例代码1 运行结果1 实验代码2 运行结果2 实验原理 双边滤波(Bilateral Filtering)是一种非线性滤波技术,用于图像处理中去除噪声,同时保留边缘和细节。这种滤波器结合了空间邻近性和像素值相似性的双重加权,从而能够在去噪(平滑图像)的同时保留图像的边缘细节。双边滤波器能够在的同时,保持边缘清晰,因此非常适合用于去除噪声和保持图像特征。在Op

python进阶篇-day07-高级语法与正则

day07-python其他高级语法 一. with(上下文管理) 介绍 概述 一个类只要实现了__ enter __ () 和 __ exit __ ()方法, 这个类就是一个上下文管理器类, 该类的对象 = 上下文管理器对象 目的 节约资源, 提高效率, 避免手动释放资源, 且出bug的时候, 也会自动尝试释放资源 特点 上下文管理器对象, 可以结合with语句使用

JavaScript中使用正则判断一个值是否是数字,包含正负,小数点

使用正则表达式来判断: if(/^[+-]?\d*\.?\d*$/.test(str)){//为数字} 实际情况中可以将+去掉,

优化算法与正则化

目录 一:优化问题 1.梯度消失和爆炸 2.局部最优  3.指数加权平均 4.动量梯度下降法  5.RMSProp算法 6.Adam算法 二:学习率衰减 三:标准化  都看到这里了,点个赞呗!!!!! 一:优化问题 1.梯度消失和爆炸 在梯度函数上出现指数级递增或者递减的情况下分别称为梯度爆炸或者梯度消失 假设g(z)=z,对于目标输出:y=w^n*w^n-

6. 深度学习中的正则化技术:防止过拟合

引言 过拟合是深度学习模型在训练过程中常遇到的挑战。过拟合会导致模型在训练数据上表现良好,但在新数据上表现不佳。为了防止过拟合,研究者们提出了多种正则化技术,如L1/L2正则化、Dropout、数据增强等。这些技术通过约束模型的复杂度或增加数据的多样性,有效提高了模型的泛化能力。本篇博文将深入探讨这些正则化技术的原理、应用及其在实际深度学习任务中的效果。 1. 过拟合的原因与影响 过拟合通常

013.Python爬虫系列_re正则解析

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈 优

【机器学习 sklearn】模型正则化L1-Lasso,L2-Ridge

#coding:utf-8from __future__ import divisionimport sysreload(sys)sys.setdefaultencoding('utf-8')import timestart_time = time.time()import pandas as pd# 输入训练样本的特征以及目标值,分别存储在变量X_train与y_train之中。

nginx 正则路径匹配

更多请参考:https://liuhuiyao.blog.csdn.net/article/details/119459183 Nginx路径匹配符号 = 表示精确匹配^~ 表示uri以某个常规字符串开头,大多情况下用来匹配url路径,nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。~ 正则匹配(区分大

总结之:CentOS 6.4系统裁减详解及装载网卡步骤

原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 、作者信息和本声明。否则将追究法律责任。 http://tanxw.blog.51cto.com/4309543/1368801 前言    随着接触Linux的慢慢深入、对Linux也有了一个基本认识了吧,慢慢的接触系统内核、系统配置文件、在了解Linux的系统启动流程后,现在来总结一下一个简单的Linux系统的裁减方法和

JS常见正则方法整理

JS常见正则方法整理 目录 文章目录 前言1. 使用测试方法 - `test`2. 同时用多种模式匹配文字字符串 - `x|y`3. 匹配时忽略大小写 - `/x/i`4. 提取匹配项 - `match`5. 全局匹配 - `/x/g`6. 用通配符`.`匹配任何内容 - `/hu./`7. 将单个字符与多种可能性匹配 - `[aiu]`8. 匹配字母表中的字母 - `[a-z]`9. 匹配