损失值解释-高效估计训练数据的重要性

损失值解释:高效估计训练数据的重要性

原文:towardsdatascience.com/lossval-explained-efficiently-estimate-the-importance-of-your-training-data-cef557434bf8/

损失值解释:高效数据估值方法应用于神经网络

如何利用损失函数来高效估计训练数据的重要性

数据估值可视化。理解每个训练样本对机器学习模型性能的重要性。(图片由作者提供。)

数据估值可视化。理解每个训练样本对机器学习模型性能的重要性。(图片由作者提供。)

本文总结了并解释了我们的论文“LossVal: Efficient Data Valuation for Neural Networks”。


并非所有数据都是平等的:一些训练数据点对机器学习模型的训练影响远大于其他数据点。理解每个数据点的影响通常效率低下,并且往往依赖于模型的重复训练。LossVal提出了一种新的方法,该方法将数据估值过程有效地集成到人工神经网络的损失函数中。

什么是数据估值?

机器学习模型通常使用大量数据集进行训练。在大多数情况下,数据集中的所有训练样本对模型的帮助或信息量并不相等。例如,如果一个数据点是噪声的或标签错误,它对您的机器学习模型的信息量就较小。在我们的论文中的一个任务中,我们基于一些车辆参数,在一个车辆碰撞测试数据集上训练了一个机器学习模型,以预测碰撞对乘客的危害程度。其中一些数据点来自 80 年代和 90 年代的汽车!你可以想象,非常旧的汽车可能对模型预测现代汽车的重要性较小。

理解每个训练样本对机器学习模型影响的过程被称为数据估值,其中为每个训练样本分配一个重要性分数。数据估值是一个与数据市场、可解释人工智能、主动学习等领域相关的增长领域。已经提出了许多方法,如数据 Shapley、影响函数或 LAVA。要了解更多信息,您可以查看我最近发表的博客文章,该文章介绍了不同的数据估值方法和应用。

LossVal

LossVal 背后的基本思想是在训练模型的同时“学习”每个样本的重要性得分,类似于模型权重是如何学习的。这使我们免于多次重新运行模型的训练,并免于在训练过程中跟踪所有模型权重的更新。

为了实现这一点,我们可以修改标准损失函数,如均方误差(MSE)和交叉熵损失。我们将实例权重纳入损失,并将其乘以一个加权距离函数。一般来说,LossVal 损失函数具有以下形式:

其中 ℒ 表示加权目标损失(加权 MSE 或交叉熵),OT 表示加权分布距离(OT 代表最优传输)。这导致新的损失函数,可以像任何其他损失函数一样用于训练神经网络。然而,在每次训练步骤中,损失中的权重 w 使用梯度下降进行更新。

我们使用 MSE 演示回归任务,使用交叉熵损失演示分类任务。之后,我们将更详细地研究分布距离 OT。

回归任务的 LossVal

让我们从均方误差(MSE)开始。标准的 MSE 是模型预测值 ŷ 与正确预测值 y 之间的平方差(其中 n 是训练样本的索引):

对于 LossVal,我们分两步修改 MSE:首先,为每个训练实例 n 包含一个权重 wₙ。其次,整个 MSE 乘以一个加权分布距离函数。

分类任务的 LossVal

交叉熵损失通常表示如下:

我们可以像修改 MSE 一样修改交叉熵损失:

最优传输距离

最优传输距离是将一个分布转换为另一个分布所需的最小努力。它也被称为地球迁移距离,来源于用一堆泥土填充坑的最快方式的类比。OT 可以定义为:

其中 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)  # Select the weights corresponding to the sample_ids

    # Step 1: Compute the weighted mse loss
    loss = torch.sum((train_y_true - train_y_pred) ** 2, dim=1)
    weighted_loss = torch.sum(weights @ loss)  # Loss is a vector, weights is a matrix

    # Step 2: Compute the Sinkhorn distance between the training and validation distributions
    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)

    # Step 3: Combine mse and Sinkhorn distance
    return weighted_loss * dist_loss**2

这个损失函数在 pytorch 中像任何其他损失函数一样工作,有一些特殊性:参数包括验证集、样本权重和批次中样本的索引。这是为了选择正确的权重来计算加权损失。请记住,这个实现依赖于 pytorch 的自动梯度计算。这意味着样本权重向量需要成为模型参数的一部分。这样,权重的优化就能从优化器实现中受益,比如 Adam。或者,也可以手动更新权重,使用损失相对于每个权重i的梯度。交叉熵的实现也是等效的,但需要替换第 8 行。

但它真的有效吗?

不同数据估值方法在噪声样本检测中的基准比较。数值越高越好。(图片由作者提供。)

不同数据估值方法在噪声样本检测中的基准比较。数值越高越好。(图片由作者提供。)

上面的图形显示了不同数据估值方法在噪声样本检测任务中的比较。这个任务由OpenDataVal 基准定义。首先,将噪声添加到训练数据的 p%中,然后使用数据估值来查找噪声样本。更好的方法将找到更多的噪声样本,从而实现更高的 F1 分数。上面的图形显示了 6 个用于分类的数据集和 6 个用于回归的数据集的平均值。我们测试了 3 种不同的噪声类型;噪声标签、噪声特征和混合噪声。在混合噪声条件下,一半的噪声样本具有特征噪声,另一半具有标签噪声。在噪声样本检测中,LossVal 在标签噪声和混合噪声条件下优于所有其他方法。然而,对于特征噪声,LAVA 表现更好。

点去除实验的实验设置(下方的图形)类似。然而,这里的目的是从训练集中去除最高价值的数据点,并观察在这个训练集上训练的模型的表现。这意味着,更好的数据估值方法会导致模型性能更快地下降,因为它更早地移除了重要的数据点。我们发现 LossVal 与最先进的方法相匹配。

不同数据估值方法在去除高值点中的基准比较。数值越低越好。(图片由作者提供。)

不同数据估值方法在去除高值点中的基准比较。数值越低越好。(图片由作者提供。)

想要了解更多详细结果,请查看我们的论文

结论

LossVal 背后的理念很简单:使用梯度下降为每个数据点找到一个最优权重。权重表示数据点的重要性。

我们的实验表明,LossVal 在 OpenDataVal 基准测试中实现了最先进的性能。LossVal 的时间复杂度低于我们测试的所有基于模型的方案,并且在面对不同类型的噪声和任务时表现出更稳健的性能。

总体而言,LossVal 为神经网络提供了一种高效的其他最先进数据估值方法的替代方案。


请随时通过LinkedIn与我联系

posted @ 2026-03-28 10:03  布客飞龙III  阅读(16)  评论(0)    收藏  举报