百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

LossVal:一种集成于损失函数的高效数据价值评估方法

itomcoil 2025-02-07 17:47 21 浏览

在机器学习领域,训练数据的价值并非均等:部分训练数据点对模型训练的影响显著高于其他数据点。评估单个数据点的影响程度通常需要反复重训练模型,计算效率低下。LossVal提出了一种创新方法,通过将数据价值评估过程直接集成到神经网络的损失函数中,实现了高效的数据价值评估。

现代机器学习模型通常依赖大规模数据集进行训练。在实际应用中,数据集中的训练样本对模型的信息贡献度存在显著差异。例如含噪声数据点或标注错误的样本往往对机器学习模型的学习过程贡献有限。在这篇研究的一个实验中,利用车辆碰撞测试数据集训练模型,目标是基于车辆参数预测碰撞对乘员的伤害程度。数据集中包含80年代和90年代的车辆数据,这些历史数据对现代车辆的碰撞预测可能具有较低的参考价值。

LossVal技术原理

LossVal的核心思想是在模型训练过程中同步学习样本重要性得分,这一过程与模型权重的学习机制类似。这种方法避免了传统方法中需要多次重训练模型的计算开销,同时也无需记录训练过程中的模型权重更新序列。

实现上述目标的关键在于对标准损失函数(如均方误差MSE和交叉熵损失)进行改进。通过在损失函数中引入实例级权重,并将其与加权分布距离函数相乘。LossVal损失函数的一般形式可表示为:

其中?表示加权目标损失(可以是加权MSE或交叉熵),OT代表最优传输的加权分布距离。这种改进后的损失函数可直接用于神经网络训练,其中权重w通过梯度下降方法在每个训练步骤中更新。

以下分别介绍回归任务和分类任务中LossVal的具体实现方法,随后详细探讨分布距离OT的计算原理。

回归任务中的LossVal实现

从最基础的MSE开始分析。标准MSE定义为模型预测值?与真实值y之间的平方差(n为训练样本索引):

LossVal对MSE进行了两步改进:首先引入样本权重w?,为每个训练实例分配权重;其次将加权MSE与分布距离函数相乘。

分类任务中的LossVal实现

标准交叉熵损失的表达式为:

对交叉熵损失的改进方式与MSE类似:

最优传输距离度量

最优传输距离反映了将一个分布转换为另一个分布所需的最小代价,也称为推土机距离(这一形象化的名称源自于描述将一堆土填入坑洞的最优路径问题)。其数学定义为:

其中c表示将点x?移动到x?的代价,γ代表可能的传输方案集合,定义了点的移动路径。最优传输方案γ*是指具有最小分布距离的传输方案。值得注意的是,论文通过联合分布Π(w, 1)将权重w整合到代价函数中。因此OT??实际上度量了训练集与验证集之间的加权距离。

从实际应用角度来看,通过优化权重以最小化OT??,算法会自动为与验证数据相似的训练数据点分配较高权重,而噪声样本则会获得较低权重。这种机制确保了模型能够更多地从高质量数据中学习。

算法实现

完整的实现代码和相关数据集已在GitHub平台开源。以下代码展示了LossVal在均方误差场景下的核心实现:

def LossVal_mse(train_X: torch.Tensor, 
train_y_true: torch.Tensor, train_y_pred: torch.Tensor, 
val_X: torch.Tensor, sample_ids: torch.Tensor 
weights: torch.Tensor, device: torch.device) -> torch.Tensor: 
weights = weights.index_select(0, sample_ids) # 根据sample_ids选择对应的权重

# 步骤1:计算加权均方误差损失
loss = torch.sum((train_y_true - train_y_pred) ** 2, dim=1) 
weighted_loss = torch.sum(weights @ loss) # loss为向量,weights为矩阵

# 步骤2:计算训练集与验证集之间的Sinkhorn距离
sinkhorn_distance = SamplesLoss(loss="sinkhorn") 
dist_loss = sinkhorn_distance(weights, train_X, torch.ones(val_X.shape[0], requires_grad=True).to(device), val_X) 

# 步骤3:组合MSE损失与Sinkhorn距离
return weighted_loss * dist_loss**2

该损失函数在PyTorch框架中的使用方式与标准损失函数类似,但需要注意以下特殊之处:函数参数中包含验证集、样本权重以及批次样本索引,这些参数对于计算批处理样本的加权损失至关重要。实现依赖PyTorch的自动微分机制,因此样本权重向量需要作为模型参数的一部分。这样设计使得权重优化可以直接利用Adam等优化器的优势。另外也可以通过手动计算损失对各权重i的梯度来更新权重。对于交叉熵损失的实现,架构相似,主要区别在于需要修改第8行的损失计算方式。

实验验证

噪声样本检测任务中各数据价值评估方法的性能对比。指标越高表示性能越好。

上图展示了各种数据价值评估方法在噪声样本检测任务中的性能对比。该任务基于OpenDataVal基准测试框架:首先在训练数据的p%样本中注入噪声,然后利用数据价值评估方法识别这些噪声样本。评估方法的性能通过其识别噪声样本的准确度(F1分数)来衡量。图中结果是在6个分类数据集和6个回归数据集上的平均表现。实验中考虑了三种噪声类型:标签噪声、特征噪声和混合噪声(其中混合噪声条件下,一半样本包含特征噪声,另一半包含标签噪声)。结果表明,在标签噪声和混合噪声场景下,LossVal的性能优于其他方法。但在特征噪声场景中,LAVA展现出更好的性能。

数据点移除实验(如下图所示)采用了类似的实验设计。该实验的目标是评估移除高价值数据点对模型性能的影响。理论上,更准确的数据价值评估方法会优先识别出更重要的数据点,因此移除这些点会导致模型性能更快下降。实验结果显示,LossVal在此任务上与当前最先进的方法达到相当的性能水平。

高价值数据点移除实验中各方法的性能对比。指标越低表示性能越好。

总结

LossVal方法的技术创新在于:通过梯度下降方法优化每个数据点的权重,从而量化数据点的重要性。

实验结果表明,LossVal在OpenDataVal基准测试中达到了领先性能水平。相比其他基于模型的方法,LossVal具有更低的时间复杂度,并在不同类型的噪声和任务场景下展现出更稳定的性能。

综上所述,LossVal为神经网络的数据价值评估提供了一种高效且有效的新方法。

相关推荐

selenium(WEB自动化工具)

定义解释Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7,8,9,10,11),MozillaF...

开发利器丨如何使用ELK设计微服务中的日志收集方案?

【摘要】微服务各个组件的相关实践会涉及到工具,本文将会介绍微服务日常开发的一些利器,这些工具帮助我们构建更加健壮的微服务系统,并帮助排查解决微服务系统中的问题与性能瓶颈等。我们将重点介绍微服务架构中...

高并发系统设计:应对每秒数万QPS的架构策略

当面试官问及"如何应对每秒几万QPS(QueriesPerSecond)"时,大概率是想知道你对高并发系统设计的理解有多少。本文将深入探讨从基础设施到应用层面的解决方案。01、理解...

2025 年每个 JavaScript 开发者都应该了解的功能

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.Iteratorhelpers开发者...

JavaScript Array 对象

Array对象Array对象用于在变量中存储多个值:varcars=["Saab","Volvo","BMW"];第一个数组元素的索引值为0,第二个索引值为1,以此类推。更多有...

Gemini 2.5编程全球霸榜,谷歌重回AI王座,神秘模型曝光,奥特曼迎战

刚刚,Gemini2.5Pro编程登顶,6美元性价比碾压Claude3.7Sonnet。不仅如此,谷歌还暗藏着更强的编程模型Dragontail,这次是要彻底翻盘了。谷歌,彻底打了一场漂亮的翻...

动力节点最新JavaScript教程(高级篇),深入学习JavaScript

JavaScript是一种运行在浏览器中的解释型编程语言,它的解释器被称为JavaScript引擎,是浏览器的一部分,JavaScript广泛用于浏览器客户端编程,通常JavaScript脚本是通过嵌...

一文看懂Kiro,其 Spec工作流秒杀Cursor,可移植至Claude Code

当Cursor的“即兴编程”开始拖累项目质量,AWS新晋IDEKiro以Spec工作流打出“先规范后编码”的系统工程思维:需求-设计-任务三件套一次生成,文档与代码同步落地,复杂项目不...

「晚安·好梦」努力只能及格,拼命才能优秀

欢迎光临,浏览之前点击上面的音乐放松一下心情吧!喜欢的话给小编一个关注呀!Effortscanonlypass,anddesperatelycanbeexcellent.努力只能及格...

JavaScript 中 some 与 every 方法的区别是什么?

大家好,很高兴又见面了,我是姜茶的编程笔记,我们一起学习前端相关领域技术,共同进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力在JavaScript中,Array.protot...

10个高效的Python爬虫框架,你用过几个?

小型爬虫需求,requests库+bs4库就能解决;大型爬虫数据,尤其涉及异步抓取、内容管理及后续扩展等功能时,就需要用到爬虫框架了。下面介绍了10个爬虫框架,大家可以学习使用!1.Scrapysc...

12个高效的Python爬虫框架,你用过几个?

实现爬虫技术的编程环境有很多种,Java、Python、C++等都可以用来爬虫。但很多人选择Python来写爬虫,为什么呢?因为Python确实很适合做爬虫,丰富的第三方库十分强大,简单几行代码便可实...

pip3 install pyspider报错问题解决

运行如下命令报错:>>>pip3installpyspider观察上面的报错问题,需要安装pycurl。是到这个网址:http://www.lfd.uci.edu/~gohlke...

PySpider框架的使用

PysiderPysider是一个国人用Python编写的、带有强大的WebUI的网络爬虫系统,它支持多种数据库、任务监控、项目管理、结果查看、URL去重等强大的功能。安装pip3inst...

「机器学习」神经网络的激活函数、并通过python实现激活函数

神经网络的激活函数、并通过python实现whatis激活函数感知机的网络结构如下:左图中,偏置b没有被画出来,如果要表示出b,可以像右图那样做。用数学式来表示感知机:上面这个数学式子可以被改写:...