C2-1.6 Dropout正则化——提高泛化能力

news2024/9/22 22:29:11

C2-1.6 Dropout正则化——提高泛化能力

1、参考书籍

在这里插入图片描述

在这里插入图片描述

2、什么是Dropout正则化

在这里插入图片描述

以图一为例:

  • 假设在训练图一所示的神经网络,它存在过拟合(模型过于复杂情况),dropout 会遍历网络的每一层(每一层设置的阈值不同),并随机消除神经网络中一些节点。假设每个节点得以保留和消除的概率都是0.5。设置完节点概率会消除一些节点,然后删除掉从该节点进出的连线,

  • 目的:随机消除一些神经元,让网络规模更小,模型变得相对简单一些。

在这里插入图片描述

在这里插入图片描述

3、大致经历了如下三个过程:反向随机失活法

以第三层隐藏层为例:

步骤一:创建一个与a[3](从后向前的)相同形状的 分布,数值在[0,1]中间的 随机矩阵d[3]

代码如下:

d3 = np.random.rand(a3.shape[0], a3.shape[1])
  • np.random.rand(x, y) 生成一个形状为 (x, y) 的矩阵,其中的元素是从 [0, 1) 区间内均匀分布的随机数。
  • a3.shape[0] 表示a3的行数
  • a3.shape[1] 表示a3的列数

步骤二:通过 d3 < 0.8(阈值自己设定,这里自己设定是0.8) 创建一个布尔矩阵

  • 单元的概率此处等于0.8,它意味着消除任意一个隐藏单元的概率是0.2,保留下来的概率是0.8

  • 其中小于 0.8 的元素为 True(表示这些神经元将被失活),其余为 False

  • d3 = np.random.rand(a3.shape[0], a3.shape[1]) < keep.prob

  • 所有小于keep.prob的都置为0,其余置1.

代码如下:

d3 = d3 < 0.8

步骤三:获取随机失活后的a[3]的激活函数

  • 代码如下:
a3 = np. multipy (a3,d3)

这里a3 d3对应位置相乘,a3是原来神经网络中第三层隐藏层的激活函数,d3是 0-1与a3分布相同的矩阵,里面的数据是True / False。

相乘后的结果:

在这里插入图片描述

在这里插入图片描述

  • np.multiply()方法得到的结果是两个数组进行对应位置的乘积
第一个数组:
[[0. 1. 2.]
 [3. 4. 5.]
 [6. 7. 8.]]


第二个数组:
[10 10 10]

print ('两个数组相乘:')
print (np.multiply(a,b))


两个数组相乘:
[[ 0. 10. 20.]
 [30. 40. 50.]
 [60. 70. 80.]]

※步骤四(改进后的):

​ 假设第三隐藏层上有 50个单元或50个神经元在一维上是通过因分解拆分成50 x m 维的保留和删除它们的概率分别为 80%和20%。这意味着最后被删除或归零的单元平均有10(50x20% =10)个z[4] = w[4] * a[3] + b4,预期是减少20%,也是说a[3]中有20%的元素被归零,为了不影响Z[4]的期望值,需要用w4/0.8它将修正或弥补所需的那20%,这样a[3]的期望值不会变,

在这里插入图片描述

4、对步骤四的理解:

问题疑惑:

在解释为什么在使用反向随机失活(Inverted Dropout)时不对激活值的减少进行调整会导致训练和测试时网络行为不一致之前

好的,我将尝试用一个更简单的比喻来解释这个概念。

想象一下,你在训练一个运动队。在训练时,为了增强队员们的适应能力,你决定让他们轮流休息,每次只有部分队员参与训练。这相当于在神经网络训练中应用 Dropout:每次训练只有部分神经元是激活的。

现在,如果在训练时,你的队伍因为队员轮休而总是以较低的强度训练,那么他们可能会习惯于这种低强度的训练。但是,在真正的比赛(相当于神经网络的测试阶段)中,所有队员都需要上场,此时比赛的强度会比训练时高得多。如果队伍没有在训练时准备好应对全员参与的高强度比赛,他们可能在真正的比赛中表现不佳。

在神经网络的情况中,"强度"可以类比为激活值的总和。在使用 Dropout 的训练过程中,由于一些神经元被随机关闭,激活值的总和会减少。如果我们不对这种减少进行调整,网络可能会适应这种低激活值的状态。但是,在测试阶段,当所有神经元都激活时(即没有应用 Dropout),激活值的总和会增加,这可能导致网络在处理真实数据时的表现与训练时有很大差异。

因此,在反向随机失活中,我们在训练阶段对激活值进行放大,以模拟测试阶段所有神经元都激活的情况。这样做的目的是为了使网络在训练和测试时面对相似的条件,从而改善其在处理新数据时的泛化能力和性能。

在这里插入图片描述

5、 对Dropout的自我理解纠正过程

※※※When you shut some neurons down, you actually modify your model. The idea behind drop-out is that at each iteration, you train a different model that uses only a subset of your neurons. With dropout, your neurons thus become less sensitive to the activation of one other specific neuron, because that other neuron might be shut down at any time.

就是说,在训练过程中,随机失活是暂时的,真正应用的时候所有的激活函数都是激活状态。而不是我以前的理解:把复杂的神经网络变成简化的神经网络,然后就一直这样了

1、训练阶段的随机失活

  • 在训练过程中,随机关闭一部分神经元是一种防止网络过拟合的策略。这个过程是动态的,意味着在每次训练迭代中,被关闭的神经元都是随机选取的。
  • 这种方法可以防止网络过度依赖训练数据中的特定模式,从而增强模型对新数据的泛化能力。

2、测试阶段的全激活状态

  • 在测试或实际应用阶段,所有的神经元都是激活的。也就是说,不再应用 Dropout,网络以其完整的形式运作。
  • 这是因为在测试时,我们希望网络能够利用其所有学到的特征和模式来做出最佳判断。

3、Dropout 的目的和误解

  • Dropout 的目的不是将复杂的网络变成一个简化的版本,然后一直保持这种简化状态。
  • 相反,它的目的是在训练过程中增加一种随机性,迫使网络学习更加鲁棒(即:less sensitive)的特征表示。这样,网络不会对训练数据中的任何特定小组件过度敏感。

实现过程的视频:

C:\Users\Administrator\Documents\WeChat Files\wxid_99i8u6vcmh1m22\FileStorage\Video\2023-12\683aaebc9ef05d6352e1a352f0c71212.mp4

6、对Dropout进行过拟合归为三大分类的一类:

解决过拟合大概分为3个类别:1、数据集不足。2、输入特征过多,影响了正常的X与Y之间的映射。3、模型过于复杂。 那Dropout属于哪一类呢??

答:Dropout 正则化主要针对的是第三类问题:模型过于复杂。

在深度学习中,过拟合通常发生在**模型太复杂时,**这意味着模型有太多的参数,可以学习训练数据中的每一个小细节,包括噪声和不重要的特征。这导致模型在新数据上的表现不佳,因为它过度适应了训练数据。

**Dropout 通过在训练过程中随机“关闭”一些神经元,来减少模型的复杂性。**这样做的效果相当于是在每次迭代中使用一个更简单的网络版本。**这种随机性迫使网络不能依赖于任何单一的特征或神经元组合,**因此它必须学习更加广泛和鲁棒的特征表示。结果就是,Dropout 可以减少模型的过拟合,提高其在新、未见数据上的表现。

总结来说,Dropout 是解决模型过于复杂导致的过拟合问题的一种方法。它通过在训练期间引入随机性来降低模型的有效复杂度,从而提高其泛化能力。

6、Dropout的理解 / 原理

6.1 【书籍参考】

在这里插入图片描述

在这里插入图片描述

6.2 Dropout的本质:

在这里插入图片描述

以下图为例:

  • “不能依赖于任何一个特征,不得不将权重进行分散”

  • ​ 这里有四个输入单元 /某一个隐藏层的四个神经单元,因为通过Dropout的随机失活,每一个特征 (神经元)都有可能被随机清除。

  • ※※所以,类似于“不要把鸡蛋放在一个篮子里”,由于Dropout的使用,不要把所有的赌注都放在一个点上(不要让某一个特征所占权重特别大),也不要给任何一个输入加上太多权重。

  • ※Dropout与L2正则化类似:

    • **L2正则化:**对不同函数的衰减是不同的,这个取决于 激活函数权重的大小。
    • **Dropout正则化:**根据权重W来判断每一层神经网络神经元的个数,根据得出的个数,来手动设定每一层保留单元的概率。所以不同层的保留单元的概率是不同的。(某一层神经元个数多,设置的阈值就小一点,保留的少一点。。。某一层神经元个数少,设置的阈值就大一点,甚至可以是1,保留的多一点 )

在这里插入图片描述

6.3 Dropout过程举例

  • **解释一下为什么这里要通过W权重矩阵,再进行设置keep-prob:**因为我们不能像视频展示的可视化神经网络以及每一层隐藏层的神经元个数,所以通过W矩阵来进行判断每一层隐藏层的神经元个数大小
  • 实施dropout 要选择的参数代表每一层上保留单元的概率。所以不同层的保留概率也可以变化。**第一层,矩阵 w1是(7,3)第二个权重矩阵w2(7,7)第三个权重矩阵w3(3,7)**以此类推。w2是最大的权重阵,因为w2拥有最大参数集,即7x7,为了预防矩阵的过拟合,对于这一层,它选的值应该相对较低假设是0.5对于其他层,过拟合的程度可能没那么严重,它们的值可能高一些。

在这里插入图片描述

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

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

相关文章

StarRocks加速查询——低基数全局字典

前言 StarRocks-2.0引入了低基数全局字典&#xff0c;可以通过全局字典将字符串的相关操作转换成整型相关操作&#xff0c;极大提升了查询性能。StarRocks 2.0后的版本默认会开启低基数字典优化。 一、低基数字典 对于利用整型替代字符串进行处理&#xff0c;通常使用字典编码…

Docker之查看并获取最新Ubuntu镜像(十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

在vue3中使用canvas实现雨滴效果

在vue3中使用canvas实现雨滴效果 这是封装的一个组件DotAndRain&#xff08; &#xff09; <script setup> import { ref, onMounted } from "vue"; import { onUnmounted } from "vue";let animationFrameId null;const el ref(null); let canv…

Java零基础 - 赋值运算符

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

redis入门指南

文章目录 Redis概述Redis基本数据类型Redis与MySQL的区别以及使用场景如何保持双写一致性&#xff08;缓存一致性&#xff09;1. 延迟双删2. 分布式锁&#xff08;强一致性时使用&#xff09;3. 中间件 Redis持久化机制RDB&#xff08;redis database&#xff09;AOF&#xff0…

Python算法100例-1.10 数制转换

完整源代码项目地址&#xff0c;关注博主私信源代码后可获取 1.问题描述2.问题分析3.算法设计4.确定程序框架5.字符与数字进行转换6.其他数制转换成十进制7.十进制转换成其他数制8.完整的程序 1&#xff0e;问题描述 给定一个M进制的数x&#xff0c;实现对x向任意一个非M进制…

SwiftUI 集合视图(Grid)拖放交换 Cell 的极简实现

概览 自从 SwiftUI 横空出世那天起&#xff0c;小伙伴们都感受到了它惊人的简单与便捷。而在本课中&#xff0c;我们将会用一个小“栗子”更直观的让大家体验到它无与伦比简洁的描述性特质&#xff1a; 如上图所示&#xff0c;我们在 SwiftUI 中实现了 Grid 中拖放交换 Cell 的…

开开开开开,干

大家新年快乐&#xff0c;开工啦啦啦啦 其实每天很多人都会问&#xff1a; 有协同过滤的算法吗&#xff0c;有的&#xff0c;可以给你解释原理… 有的小伙伴只开了一部分逻辑&#xff0c;我要实现用户可以下单功能 但是细细考虑下单&#xff0c;需要现有用户&#xff0c;维护…

[Git] 配置Access Token 解决Github 认证弹窗

[Git] 配置Access Token 解决Github 认证弹窗 1. 前言2. 解决2.1 申请Personal Access Token2.2. 配置Token2.3. 授权激活Token 博主热门文章推荐&#xff1a; 1. 前言 最近从bitbucket切换到了Github Enterprise, 刚使用几次发现 每次操作 都有弹窗认证&#xff0c; 虽然手动点…

波奇学Linux:进程通信管道

进程通信 管道&#xff1a;基于文件级别的单向通信 创建父子进程&#xff0c;使得进程的struct file*fd_array[]的文件描述符指向同一个struct file文件&#xff0c;这个文件是内存级文件。 父进程关写端&#xff0c;子进程再关闭读端。实现单向通信 子进程写入&#xff0c;父进…

个人博客搭建

使用彩虹云主机百度云域名WordPress 下载WordPress https://cn.wordpress.org/ 购买主机 购买彩虹云主机&#xff0c;购买香港高防主机https://www.cccyun.net/ 购买之后点击 管理 进入后点 击前往控制面板 -> 一键登录控制面板 可进入控制面板。 选择文件管理 在线…

cuda加速:memory coalescing,Bank Conflicts

cuda加速&#xff1a;memory coalescing 1.memory coalescing2.Shared Memory Bank Conflicts参考文献 1.memory coalescing 参考【1】中给出的定义&#xff1a;一个warp中&#xff0c;thread 0到thread 31访问连续的内存空间&#xff0c;则这些线程的访问被合并为一次访问。 …

2.21学习总结

1.【模板】ST 表 2.Balanced Lineup G 3.景区导游 4.最近公共祖先&#xff08;LCA&#xff09; 倍增思想&#xff1a;主要用于LCA问题&#xff0c;RMQ问题。在进行 递推 时&#xff0c;如果 状态空间很大&#xff0c;通常的 线性递推 无法满足 时间 与 空间复杂度 的要求&…

BabylonJS 6.0文档 Deep Dive 动画(一):动画介绍

1. 动画介绍 无论动画如何实现&#xff0c;它都必须考虑所需的动作、时间、产生所需流动性所需的帧数以及序列中的关键点。这个介绍应该有助于理解Babylon.js是如何进行动画的&#xff0c;以及它们是如何实现的。 动画由一系列图像、帧生成&#xff0c;这些图像、帧一个接一个地…

做跨境电商,为什么要建独立站,2024年的机会在哪里?一次性讲清楚...

做跨境电商&#xff0c; 是选择依托第三方平台&#xff1f; 还是自建独立网站&#xff1f; 01 什么是自建独立站 最简单的说法&#xff1a;独立站对于我们跨境电商这个行业来说&#xff0c;就是那些不是主流平台的网站&#xff0c;是某个企业或者个人自己做和运营的搭建电商…

记录一次调用奇门api报错信息Invalid signature (签名无效)

奇门有msg对应错误的记录 我可能是 3.1 以下是还原场景 第一个方法 private static String getSellerItem() throws IOException {Map<String, String> params new HashMap<String, String>();// 公共参数params.put("page_index", "100"…

如何用USB服务器解决网银U盾连接管理问题?好用吗?

反复插拔效率低、分散管理隐患大 随着信息化建设的深入推进&#xff0c;网银U盾已经成为企业办公中不可或缺的工具。然而&#xff0c;在使用U盾的过程中&#xff0c;常常会遇到一些问题&#xff0c;其中最突出的问题之一就是U盾的连接和管理问题。反复插拔效率低、分散管理隐患…

Leetcode - 周赛385

目录 一&#xff0c;3042. 统计前后缀下标对 I 二&#xff0c;3043. 最长公共前缀的长度 三&#xff0c;3044. 出现频率最高的质数 四&#xff0c;3045. 统计前后缀下标对 II 一&#xff0c;3042. 统计前后缀下标对 I 该题数据范围小&#xff0c;可直接暴力求解&#xff0c;…

18.贪心算法

排序贪心 区间贪心 删数贪心 统计二进制下有多少1 int Getbit_1(int n){int cnt0;while(n){nn&(n-1);cnt;}return cnt; }暴力加一维前缀和优化 #include <iostream> #include <climits> using namespace std; #define int long long const int N2e510; in…

利用AI做Q版影视剧人物头像,轻松涨粉过万

粉丝在问,能不能出一个SD制作热播影视剧Q版人物的教程。刚好我最近也刷到了几个号,对这方面也感兴趣,于是去研究了出图的逻辑。热播电视剧的Q版人物,一方面不缺流量,IP也能带来一波回忆杀。 下面这组图是一只小鹿鸭的作品,在某音和某书都有很好的数据。 公众号刷到了一组…