深度学习:抑制过拟合

过拟合问题
1.过拟合:当模型在训练数据上表现很好,但在未见过的测试数据上表现较差时,我们称之为过拟合。过拟合通常发生在模型过于复杂,参数过多,或者训练数据量不足的情况下。
2.权重过大:在过拟合的情况下,模型可能会过度依赖某些特征,导致某些权重变得非常大。这些大的权重会使模型对训练数据的微小变化非常敏感,从而在测试数据上表现不佳。
抑制过拟合的方法
一、权值衰减
通过在学习的过程中对大的权重进行惩罚,来抑制过拟合。例如为损失函数加上权重的平方范数(即L2正则化或权重衰减)是一种常见的正则化技术,用于抑制权重的变大。

  1. L2正则化:L2正则化通过在损失函数中添加权重的平方范数来抑制权重的变大。具体来说,损失函数变为:
    Loss=原始损失函数+(1/2)λ∑wi**2​
    其中,λ是正则化强度参数,wi是模型的权重。
  2. 抑制权重变大的机制
    1.梯度下降更新:在梯度下降法中,权重的更新公式为:
    wi←wi−η(∂原始损失函数/∂wi+λwi)
    其中,η 是学习率。
    从公式中可以看出,L2正则化项 λwi会使权重 wi在每次更新时都减小。这种减小效应随着权重的增大而增大,从而有效地抑制了权重的变大。
    2.权重衰减:L2正则化可以看作是在每次权重更新时,对权重进行一个小的衰减(即乘以一个小于1的因子)。这种衰减效应有助于防止权重变得过大。
    二、Dropout
    Dropout 是一种在深度学习中常用的正则化技术,旨在防止模型过拟合。它通过在训练过程中随机丢弃(即设置为零)神经元的输出来实现这一目标。
    代码如下:
class Dropout:def __init__(self, dropout_ratio=0.5):self.dropout_ratio = dropout_ratioself.mask = Nonedef forward(self, x, train_flg=True):if train_flg:self.mask = np.random.rand(*x.shape) > self.dropout_rationreturn x * self.maskelse:return x * (1.0 - self.dropout_ratio)def backward(self, dout):return dout * self.mask

每次正向传播时,self.mask中都会以False的形式保存要删除的神经元。self.mask会随机生成和x形状相同的数组,并将值比dropout_ratio大的元素设为True。反向传播时的行为和ReLU相同。也就是说,正向传播时传递了信号的神经元,反向传播时按原样传递信号;正向传播时没有传递信号的神经元,反向传播时信号将停在那里。
以下是对部分代码的解释:

  1. np.random.rand(*x.shape)
    np.random.rand(*x.shape): 这行代码生成一个与输入 x 形状相同的随机数数组。具体来说,np.random.rand 生成一个在 [0, 1) 区间内均匀分布的随机数数组。
    *x.shape 是一个解包操作,它将 x.shape 元组中的元素解包为单独的参数传递给 np.random.rand。例如,如果 x 的形状是 (3, 4),那么 np.random.rand(*x.shape) 等价于 np.random.rand(3, 4)。
    生成的随机数数组中的每个元素都在 [0, 1) 之间。
  2. train_flg
    train_flg: 这是一个布尔标志,用于指示当前是在训练阶段还是在测试阶段。
    训练阶段 (train_flg=True): 在训练阶段,Dropout 会随机丢弃一部分神经元的输出。具体来说,self.mask = np.random.rand(*x.shape) > self.dropout_ratio 会生成一个与 x 形状相同的掩码(mask),其中每个元素是一个布尔值。如果随机数大于 self.dropout_ratio,则对应的掩码值为 True,否则为 False。然后,x * self.mask 会将 x 中对应掩码为 False 的元素设置为零,从而实现 Dropout。
    测试阶段 (train_flg=False): 在测试阶段,Dropout 不会丢弃任何神经元的输出。相反,它会按比例缩放输入,以保持期望值与训练时一致。具体来说,x * (1.0 - self.dropout_ratio) 会将输入 x 按比例缩放,以补偿训练时丢弃的神经元。
  3. backward(self, dout)
    backward(self, dout): 这是反向传播的实现。在反向传播过程中,梯度会通过 Dropout 层传递。由于在训练时只有部分神经元被保留(即掩码为 True 的神经元),因此在反向传播时,梯度也只会通过这些保留的神经元传递。dout * self.mask 会将梯度 dout 中对应掩码为 False 的元素设置为零,从而实现与前向传播一致的 Dropout 效果。

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

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

相关文章

Python venv创建失败问题

在Ubuntu中,笔者需要创建虚拟环境时失败: python3.11 -m venv env 报错信息如下:Error: Command [****/env/bin/python3.11, -m, ensurepip, --upgrade, --default-pip] returned non-zero exit status 1. 尝试执行一下看看是什么错误: python3.11 -m ensurepip …

CDN加速实战:使用七牛云CDN加速阿里云OSS资源访问

今天是双11搞活动,在阿里云1元注册了个域名,想着在学CDN,想使用CDN做个加速项目,但是阿里的要收费,上网查了下七牛云的不收费,想着将七牛云的CDN结合阿里的DNS做个访问加速,刚好看到了阿里的一个文章,照着改了改,实践成功了。 阿里文章:使用CDN加速OSS资源访问_对象…

Git本地分支更新推送到远程主分支上

本地分支(debug)开发之前: git pull origin dev(主分支)git merge 这步merge可能会现异常:error:Merging is not possible because you have ynmerged files,出现冲突文件&#xff…

嵌入式学习——IIC协议

IIC(Inter-Integrated Circuit)是一种串行通信协议,由飞利浦公司于1980年代提出。它允许多个从设备通过两条线(SDA和SCL)与一个或多个主设备进行通信。IIC协议是多主、多从的,适合在短距离内的设备间通信。…

Mongodb使用视图连接两个集合

您可以使用 $lookup 为两个集合创建一个视图,然后对该视图运行查询。应用程序可以查询视图,而无需构建或维护复杂的管道。 例子 创建两个样本集合 inventory 和 orders: db.inventory.insertMany( [{ prodId: 100, price: 20, quantity: 1…

spring的自定义注解

在 Spring 中,自定义注解可以帮助我们实现自定义的功能,比如切面逻辑、权限控制、数据校验等。自定义注解通常结合 Spring 的 AOP 或其他功能使用,以增强业务逻辑。下面是创建自定义注解的一般步骤,以及使用示例。 一、创建自定义…

qt QStatusBar详解

1、概述 QStatusBar是Qt框架提供的一个小部件,用于在应用程序窗口底部显示状态信息。它可以显示一些固定的文本和图标,并且可以通过API动态更新显示内容。QStatusBar通常是一个水平的窗口部件,能够显示多行文本内容,非常适合用于…

大型语言模型的运行成本分析

大型语言模型 (LLM) 一直处于生成式 AI 革命的前沿,尤其是自 ChatGPT 出现以来。然而,它们的全部潜力尚未得到释放,而一个重大障碍是成本。将 LLM 纳入应用程序的费用范围从按需用例的几美分到在云环境中托管单个 LLM 实例的每月 20,000 美元…

Spring Boot接收参数的19种方式

Spring Boot是一个强大的框架,允许开发人员通过多种方式接收和处理参数。无论是HTTP请求参数、路径变量,还是请求体中的数据,Spring Boot都能提供灵活的处理方式。本文将介绍19种不同的方式来接收参数。 1. 查询参数(Query Param…

Matlab高光谱遥感

原文链接:Matlab高光谱遥感https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247623643&idx5&sne4557ed43728f851140b100f42286988&chksmfa8da23ccdfa2b2a4d795bf4087f672faaa7082d1f52e046616ab7bf196a6eef89ea553d06b1&token1392391660&…

OPENAI官方prompt文档解析

官方文档地址:https://platform.openai.com/docs/guides/gpt-best-practices 文档中文版来源:OpenAI 官方提示工程指南 [译] | 宝玉的分享 (baoyu.io) 1.写清楚说明 如果prompt给的范围十分模糊或是过于宽泛,那么GPT就会开始猜测您想要的内容,从而导致生成的结果偏离预期. …

C++游戏开发

C游戏开发概述 C 是游戏开发中的主要编程语言之一,因其性能、控制和广泛的生态系统而受到开发者的青睐。随着游戏行业的迅速发展,C 被用来构建许多成功的游戏和游戏引擎。本文将深入探讨 C 在游戏开发中的应用,包括基础概念、技术栈、示例代…

共模噪声和差模噪声

电源芯片加上负载和不加负载输出的纹波不一样,不加负载的情况下纹波比较小。 可以测量出DCDC电源的输出电压纹波为100Khz,刚好对应电源芯片的开关频率。可以看到纹波上面有一部分的小噪声,放大后用示波器观察频率为几Mhz。 对付上面的频率比…

DevOps赋能:优化业务价值流的实战策略与路径(上)

上篇:价值流引领与可视化体系构建 一、前言 在快速迭代的软件项目和产品开发生态中,我们始终围绕两个核心目标:一是确保每一项工作都能为客户创造实际价值,这是产品团队的核心使命;二是确保这些有价值的工作能够高效…

机器学习之fetch_olivetti_faces人脸识别--基于Python实现

fetch_olivetti_faces 数据集下载 fetch_olivetti_faceshttps://github.com/jikechao/olivettifaces sklearn.datasets.fetch_olivetti_faces(*, data_homeNone, shuffleFalse, random_state0, download_if_missingTrue, return_X_yFalse, n_retries3, delay1.0)[source] L…

HTML 语法规范——代码注释、缩进与格式、标签与属性、字符编码等

文章目录 一、代码注释1.1 使用注释的主要目的1.2 使用建议二、标签的使用2.1 开始标签和结束标签2.2 自闭合标签2.3 标签的嵌套2.4 标签的有效性三、属性四、缩进与格式4.1 一致的缩进4.2 元素单独占用一行4.3 嵌套元素的缩进4.4 避免冗长的行五、字符编码六、小结在开发 HTML…

Charles简单压力测试

1.接口请求次数,并发量,请求延迟时间均可配置 1.1选中需要进行测试的接口,鼠标右键选中【repeat advance】 2.设置并发参数 下面的图中,选择了1个接口,每次迭代中1个接口同时请求,迭代1000次(…

HrmonyOS 赋能套件介绍

文章为官方教程以及自己的部分理解,用于上下班的查看学习。官方视频教程地址:HarmonyOS应用开发者基础认证-华为开发者学堂 (huawei.com) HarmonOS 赋能套件全景 感知 通过白皮书了解认识 HarmonOS 应用开发的核心理念、关键能力和创新体验 学习与评估…

Windows 下基于 CLion 配置 Linux 项目开发环境

【Windows 下基于 CLion 配置 Linux 项目开发环境 【C/C/Linux】】 https://www.bilibili.com/video/BV1tH4y1U73v/?share_sourcecopy_web&vd_source57dbd16b8c7c2ad258cccce5966c5be8

es拼音分词器(仅供自己参考)

github地址:https://github.com/infinilabs/analysis-pinyin(各种版本,对接es版本) 拼音分词器存在的问题: 1、是直接将每个字的拼音返回和一段话的拼音首字母返回,不能很好的分词。 2、不会保留中文&am…