Pytorch L1,L2正则化
L1正则化和L2正则化是常用的正则化技术,用于在机器学习模型中控制过拟合。它们的主要区别在于正则化项的形式和对模型参数的影响。
L1正则化(Lasso正则化):
- 正则化项形式:L1正则化使用模型参数的绝对值之和作为正则化项,即L1范数。
- 影响模型参数:L1正则化倾向于将一些模型参数压缩为0,从而实现特征选择和稀疏性。因此,它可以用于特征选择和模型简化。
- 其他特点:由于L1正则化的非光滑性,优化问题在参数接近零时更容易找到解,因此它对于具有大量无关特征的问题更有效。
L2正则化(Ridge正则化):
- 正则化项形式:L2正则化使用模型参数的平方和作为正则化项,即L2范数。
- 影响模型参数:L2正则化倾向于使模型参数趋向于较小的值,但不会将其完全压缩为零。它通过减小模型参数的绝对值来控制参数的大小。
- 其他特点:L2正则化是光滑的,优化问题在参数接近零时相对平滑,因此对于许多问题都能得到较好的结果。
总结:
- L1正则化倾向于稀疏性和特征选择,适用于具有大量无关特征的问题。
- L2正则化倾向于模型参数较小,适用于控制模型复杂度和减少过拟合。
- 在某些情况下,可以同时使用L1和L2正则化形成弹性网络(Elastic Net),综合了两者的优点。
选择使用L1正则化还是L2正则化取决于具体问题和数据集的特点。通常建议先尝试L2正则化,如果模型仍然过拟合或需要进行特征选择,则可以考虑使用L1正则化。
对L1产生稀疏权值和L2产生平滑权值的理解
L1的定义是L1 = |w1| + |w2| + |w3| + ... + |wn|
L2的定义是L2 = w1^2 + w2^2 + w3^2 + ... + wn^2
L1和L2分别对w求导可得
dL1/dw = sign(wi)
dL2/dw = wi
假设wi为某个大于零的浮点数,学习率lr为0.5,根据梯度下降算法,
L1的权值更新方式为wi = wi - lr*(dL1/dw) = wi - lr*1 = wi - 0.5
L2的权值更新方式为wi = wi - lr*(dL2/dw) = wi - lr*wi = wi - 0.5wi
可以看出,L1每次更新都是减去一个固定的值,那就可能在多次迭代之后,权值为0的情况
而L2虽然权值也在减小,但是总不为0
需要注意的是,通常情况下,我们更倾向于对权值进行正则化,而不是对偏置进行正则化的原因有以下几点:
-
偏置的作用:偏置(bias)是模型中的一个常数项,它的作用是调整模型预测值与实际值之间的偏差。偏置通常用来解决模型在数据特征上的平移问题,而不会引入过多的复杂性。由于偏置只是一个常数,它的取值并不像权值那样会随着训练过程而变化,因此对偏置进行正则化对于控制模型的复杂度影响较小。
-
影响模型容量:正则化的目的是通过限制参数的取值范围来控制模型的复杂度,避免过拟合。权值在模型中起到了控制特征的重要作用,对权值进行正则化可以有效地减少模型的复杂度,提高泛化能力。而偏置的作用相对较小,对偏置进行正则化往往对模型的泛化能力影响较小。
-
数据中的偏移:在实际的数据中,通常会存在一些偏移(bias),即使我们对权值不进行正则化,模型也可以通过调整偏置来适应这种偏移。因此,对偏置进行正则化可能会导致对数据中的偏移进行过度拟合,而忽略了模型对其他特征的学习能力。
测试代码如下
import torch
import matplotlib.pyplot as plttorch.manual_seed(25)x_train = torch.tensor([1,2,3,4,5,6,7,8,9,10],dtype=torch.float32).unsqueeze(-1)
y_train = torch.tensor([0.52,8.54,6.94,20.76,32.17,30.65,40.46,80.12,75.12,98.83],dtype=torch.float32).unsqueeze(-1)
plt.scatter(x_train.detach().numpy(),y_train.detach().numpy(),marker='o',s=50,c='r')class Linear(torch.nn.Module):def __init__(self):super().__init__()self.layers = torch.nn.Sequential(torch.nn.Linear(in_features=1, out_features=3),torch.nn.Sigmoid(),torch.nn.Linear(in_features=3,out_features=5),torch.nn.Sigmoid(),torch.nn.Linear(in_features=5, out_features=10),torch.nn.Sigmoid(),torch.nn.Linear(in_features=10,out_features=5),torch.nn.Sigmoid(),torch.nn.Linear(in_features=5, out_features=1),torch.nn.ReLU(),)def forward(self,x):return self.layers(x)linear = Linear()opt = torch.optim.Adam(linear.parameters(),lr= 0.005)
loss_fn = torch.nn.MSELoss()for epoch in range(1000):for iter in range(10):L1 = 0L2 = 0for name,param in linear.named_parameters():if 'bias' not in name:L1 += torch.norm(param, p=1) * 1e-3L2 += torch.norm(param, p=2) * 1e-3opt.zero_grad()output = linear(x_train[iter])loss = loss_fn(output, y_train[iter]) + L1 + L2loss.backward()opt.step()if __name__ == '__main__':predict_loss = 0for i in range(1000):x = torch.tensor([i/100], dtype=torch.float32)y_predict = linear(x)plt.scatter(x.detach().numpy(),y_predict.detach().numpy(),s=2,c='b')plt.scatter(i/100,i*i/10000,s=2,c='y')predict_loss = (i*i/10000 - y_predict)**2/(y_predict)**2 + predict_loss
plt.show()
不使用L1,L2正则化的情况如下
只使用L1正则化的情况如下
只使用L2正则化的情况如下
同时使用L1和L2正则化的情况如下
相关文章:

Pytorch L1,L2正则化
L1正则化和L2正则化是常用的正则化技术,用于在机器学习模型中控制过拟合。它们的主要区别在于正则化项的形式和对模型参数的影响。 L1正则化(Lasso正则化): 正则化项形式:L1正则化使用模型参数的绝对值之和作为正则化…...

【Elasticsearch 未授权访问漏洞复现】
文章目录 一、漏洞描述二、漏洞复现三、修复建议 一、漏洞描述 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布&am…...
pytorch笔记:PackedSequence对象送入RNN
pytorch 笔记:PAD_PACKED_SEQUENCE 和PACK_PADDED_SEQUENCE-CSDN博客 当使用pack_padded_sequence得到一个PackedSequence对象并将其送入RNN(如LSTM或GRU)时,RNN内部会进行特定的操作来处理这种特殊的输入形式。 使用PackedSequ…...
C#WPF工具提示(ToolTip)实例
本文演示C#WPF工具提示(ToolTip)实例 ToolTip ToolTip是当鼠标移到某个控件上后可以弹出提示的控件 属性说明 1、HasDropShadow 决定工具提示是否具有扩散的黑色阴影,使其和背后的窗口区别开来 2、Placement 使用PlacementMode枚举值决定如何放置工具提示。默认值是M…...

智慧矿山系统中的猴车安全监测与识别
智慧矿山是近年来兴起的一种采用人工智能(AI)技术的矿山管理方式,它通过利用智能传感设备和先进算法来实现对矿山环境和设备进行监测和管理,从而提高矿山的安全性和效率。在智慧矿山的AI算法系列中,猴车不安全行为识别…...

网络协议--TCP连接的建立与终止
18.1 引言 TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。本章将详细讨论一个TCP连接是如何建立的以及通信结束后是如何终止的。 这种两端间连接的建立与无连接协议如UDP不同。我们在第11章看到一端使用UDP向另一端发…...

react条件渲染
目录 前言 1. 使用if语句 2. 使用三元表达式 3. 使用逻辑与操作符 列表渲染 最佳实践和注意事项 1. 使用合适的条件判断 2. 提取重复的逻辑 3. 使用适当的key属性 总结 前言 在React中,条件渲染指的是根据某个条件来决定是否渲染特定的组件或元素。这在构…...
Docker中Failed to initialize NVML: Unknown Error
参考资料 Docker 中无法使用 GPU 时该怎么办(无法初始化 NVML:未知错误) SOLVED Docker with GPU: “Failed to initialize NVML: Unknown Error” 解决方案需要的条件: 需要在服务器上docker的admin list之中. 不需要服务器整体的admin权限.…...

学习笔记|单样本秩和检验|假设检验摘要|Wilcoxon符号检验|规范表达|《小白爱上SPSS》课程:SPSS第十一讲 | 单样本秩和检验如何做?很轻松!
目录 学习目的软件版本原始文档单样本秩和检验一、实战案例二、统计策略三、SPSS操作1、正态性检验2.单样本秩和检验 四、结果解读第一,假设检验摘要第二,Wilcoxon符号检验结果摘要。第三,Wilcoxon符号秩检验图第四,数…...
ttkefu在线客服在客户联络领域的价值
随着互联网的快速发展,越来越多的企业开始注重在线客服的应用。ttkefu作为一款智能在线客服系统,在客户联络领域中展现出了巨大的价值。本文将详细介绍ttkefu在线客服在客户联络领域的应用优势、专家分析以及未来发展趋势。 一、ttkefu在线客服简介 tt…...

创新方案|2023如何用5种新形式重塑疫后实体门店体验
在电商盛行的当下,线上购物已成为新零售的重要组成部分,实体零售业正处于两难境地。一方面,实体零售是绝对有必要的:美国约 85% 的销售额来自实体商店。 另一方面,尽管增长放缓,但电商收入占销售总额的比例…...

Aqua Data Studio 2023.1
为什么选择 Aqua Data Studio? 随着数据在业务中的作用不断发展,组织需要一种有效的方法来简化复杂的技术任务并缩小 IT 和业务团队之间的差距。 使用多个数据库平台不再复杂。使用 Aqua Data Studio 简化您的所有数据管理流程和任务:这是一…...

【C++智能指针】
智能指针 为什么使用智能指针?概念分类auto_ptrunique_ptrshared_ptr循环引用weak_ptr 为什么使用智能指针? 考虑以下场景: void div() {int a, b;cin >> a >> b;if (b 0)throw invalid_argument("除0错误");return…...

gcc/g++使用格式+各种选项,预处理/编译(分析树,编译优化,生成目标代码)/汇编/链接过程(函数库,动态链接)
目录 gcc/g--编译器 介绍 使用格式 通用选项 编译选项 链接选项 程序编译过程 预处理(宏替换) 编译 (生成汇编) 分析树(parse tree) 编译优化 删除死代码 寄存器分配和调度 强度削弱 内联函数 生成目标代码 汇编 (生成二进制代码) 链接(生成可执行文件) 函…...

OSPF复习(2)
目录 一、LSA的头部 二、6种类型的LSA(课堂演示) 1、type1-LSA:----重要且复杂 2、type2-LSA: 3、type3-LSA: 4、type4-LSA: 5、type5-LSA: 6、type7-LSA: 三、OSPF的网络类…...

FPGA时序分析与约束(9)——主时钟约束
一、时序约束 时序引擎能够正确分析4种时序路径的前提是,用户已经进行了正确的时序约束。时序约束本质上就是告知时序引擎一些进行时序分析所必要的信息,这些信息只能由用户主动告知,时序引擎对有些信息可以自动推断,但是推断得到…...

sqlite3 关系型数据库语言 SQL 语言
SQL(Structured Query Language)语言是一种结构化查询语言,是一个通用的,功能强大的关系型数据库操作语言. 包含 6 个部分: 1.数据查询语言(DQL:Data Query Language) 从数据库的二维表格中查询数据,保留字 SELECT 是 DQL 中用的最多的语句 2.数据操作语言(DML) 最主要的关…...
spring boot中的多环境配置
1.切换环境 spring:profiles:include: devactive: dev的作用是为了启动某个环境,两个作用基本一致, 环境定义如下: spring:profiles: dev或者是查找application-dev.yml这个文件的所有配置 2.加载文件 spring:config:import:- optional:f…...

python3 阿里云api进行巡检发送邮件
python3 脚本爬取阿里云进行巡检 不确定pip能不能安装上,使用时候可以百度一下,脚本是可以使用的,没有问题的 太长时间了,pip安装依赖忘记那些了,使用科大星火询问了下,给了下面的,看看能不能使…...

【Linux】安装使用Nginx负载均衡,并且部署前端项目
目录 一、Nginx概述 1. 什么 2. 背景 3. 作用 二、Nginx负载均衡 1. 讲述 2. 使用 1. 下载 2. 安装 3. 负载均衡 三、前端部署 1. 准备 2. 部署 一、Nginx概述 1. 什么 Nginx是一个高性能的开源Web服务器和反向代理服务器。它具有轻量级、高并发、低内存消耗的…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...