像 CLIP 这样的视觉-语言模型 (VLMs) 的兴起,从根本上改变了我们处理计算机视觉的方式。我们不再需要从头开始训练庞大的网络,而是拥有了“提示”预训练模型来识别其已学概念的便利。通过给模型输入一张图像和一段如“一张狗的照片”这样的文本描述,我们就能以令人印象深刻的准确率实现零样本分类。

然而,手工编写这些文本提示既繁琐又非最优。这导致了提示学习 (Prompt Learning) (或称提示微调 Prompt Tuning) 的兴起,我们将文本提示视为一组可学习的向量,并使用反向传播对其进行优化。这是一种轻量级、高效的方法,可以使庞大的模型适应特定的下游任务。

但也存在一个问题。像所有的深度学习方法一样,提示学习依赖于标记数据。在现实世界中,数据集是混乱的。标注者会犯错,网络爬取的数据往往被贴错标签。这种被称为标签噪声 (Label Noise) 的现象可能是灾难性的。当我们强迫模型从错误的答案中学习时,它会过拟合错误,从而降低其在干净数据上的性能。

在这篇文章中,我们将深入探讨 NLPrompt , 这是一种在顶级计算机视觉会议上提出的新颖方法,旨在解决这一问题。我们将探索一种出奇简单的损失函数——平均绝对误差 (MAE) ——如何能够稳定训练,以及如何利用最优传输 (Optimal Transport) 自动“净化”脏数据集。

损失函数的悖论

要理解 NLPrompt,我们首先需要看看我们通常是如何训练这些模型的。分类任务的标准目标函数是交叉熵 (CE) 损失

CE 损失对于干净数据非常有效,因为它会严厉惩罚错误的预测,迫使模型快速收敛。然而,当存在噪声时,这种激进性就成了它的缺陷。如果一张“猫”的图片被贴上了“狗”的标签,CE 损失会尖叫着要求模型更新权重,直到它把猫分类为狗。模型本质上是在记忆噪声。

相比之下, 平均绝对误差 (MAE) 是一种常用于回归但很少用于分类的损失函数。在传统的深度学习 (如从头开始训练 ResNet) 中,MAE 因收敛缓慢和容易陷入局部最优而臭名昭著。

然而,NLPrompt 背后的研究人员发现了一些反直觉的现象: 在提示学习的特定背景下,MAE 是个超级英雄。

由于提示学习只优化极少量的参数 (提示向量) ,同时保持巨大的 VLM 骨干网络冻结,因此优化环境是不同的。正如下图所示,研究人员发现,虽然随着噪声的增加,CE 损失的性能会崩溃,但 MAE 却保持了极好的稳定性。

在 Caltech101 数据集上使用 MAE 损失和 CE 损失进行提示学习的性能对比。

在图 1 中,请看右下角的图表 (75% 噪声) 。红线 (CE 损失) 直线下降至几乎无用。蓝线 (MAE 损失) 几乎没有波动。这一观察结果构成了 NLPrompt 的基础。

理论: 为什么 MAE 具有鲁棒性?

为什么 MAE 能幸存而 CE 却失败了?为了回答这个问题,作者利用了特征学习理论

简而言之,我们可以将模型学到的特征分为两类:

  1. 任务相关特征: 实际上有助于分类图像的信号 (例如,猫的胡须) 。
  2. 任务无关特征: 无关紧要的噪声或背景细节。

当使用噪声标签进行训练时,CE 损失产生的梯度更新是无界的。如果标签是错误的,梯度可能会非常大,迫使模型拾取任务无关特征来“强行解释”错误的标签。

从数学上讲,MAE 是有界的。绝对误差 \(|y - s|\) 的梯度实际上是一个常数 (1 或 -1) 。这意味着一个巨大的错误 (噪声标签) 对梯度更新的贡献与一个中等错误的贡献大致相同。这防止了噪声样本主导学习过程。

研究人员从理论上证明,在存在噪声的情况下,使用 MAE 时任务相关特征学习与任务无关特征学习的比率更优。

\[ \frac { \Delta \beta _ { \mathrm { M A E } } ^ { ( t ) } } { \Delta \beta _ { \mathrm { C E } } ^ { ( t ) } } = \frac { 1 } { 2 { \mathbb { E } } \left[ s _ { y } \right] } \cdot \frac { 1 - p \frac { 1 } { 1 - { \mathbb { E } } \left[ s _ { y } \right] } } { 1 - 2 p } > \frac { 1 } { 2 { \mathbb { E } } \left[ s _ { y } \right] } , \]

展示 MAE 与 CE 更新系数比率的不等式。

虽然上面的数学公式看起来很密集,但不等式本质上表明,在噪声条件下,MAE 对有用特征 (\(\beta\)) 的更新步长 (\(\Delta\)) 相对于 CE 始终更强。

解决方案: NLPrompt

虽然 MAE 具有鲁棒性,但它并不完美。在完全干净的数据上,CE 损失仍然能产生更高的准确率,因为它收敛得更快、更精确。

理想的解决方案是混合式的: 对干净数据使用交叉熵,对噪声数据使用 MAE。

但是,在没有人工检查的情况下,我们如何知道哪些数据是干净的,哪些是噪声呢?这就是 NLPrompt (Noise-Label Prompt) 框架发挥作用的地方。它使用一种称为基于提示的最优传输 (PromptOT) 的巧妙技术来净化数据集。

架构

让我们看看 NLPrompt 的整体框架:

NLPrompt 的框架,使用最优传输来分离数据。

该过程分为三个步骤:

  1. 特征提取: 图像通过图像编码器,类名通过文本编码器 (使用当前提示) 。
  2. PromptOT 净化: 最优传输求解器将样本分类为“干净” (绿色) 或“噪声” (黄色) 。
  3. 协调训练: 干净样本使用 CE 损失更新提示;噪声样本使用 MAE 损失更新提示。

第一步: 基于提示的最优传输 (PromptOT)

分离干净/噪声数据的标准方法通常使用聚类 (如 K-Means) 。然而,K-Means 需要随机初始化,这可能是不稳定的。

VLMs 给我们带来了一个巨大的优势: 潜在空间对齐 (Latent Alignment) 。 文本编码器和图像编码器将概念映射到同一空间。“一张狗的照片”的文本嵌入实际上是狗图像的完美“质心”或原型。

NLPrompt 使用这些文本特征作为锚点。它计算一个批次中所有图像特征与这些文本原型之间的成本矩阵。成本定义为负对数相似度:

\[ \begin{array} { r l } { \underset { \mathbf { Q } \in \mathbb { R } _ { + } ^ { C \times N } } { \operatorname* { m i n } } } & { \langle - \log ( \mathbf { T } \cdot \mathbf { I } ^ { \top } ) , \mathbf { Q } \rangle } \\ { \mathrm { s . t . } } & { \mathbf { Q } \mathbb { 1 } _ { N } = \displaystyle \frac { 1 } { C } \mathbb { 1 } _ { C } , \mathbf { Q } ^ { \top } \mathbb { 1 } _ { C } = \frac { 1 } { N } \mathbb { 1 } _ { N } . } \end{array} \]

最优传输优化问题。

这里,\(\mathbf{T}\) 是文本特征矩阵,\(\mathbf{I}\) 是图像特征矩阵。目标是找到一个映射矩阵 \(\mathbf{Q}\) 来最小化传输成本。这实际上是在问: “假设类别大致平衡,将这些图像分配给这些类别原型的最有效方式是什么?”

通过解决这个问题 (使用快速的 Sinkhorn-Knopp 算法) ,我们得到了一个矩阵 \(\mathbf{Q}\),它充当图像到标签的“软”分配。

第二步: 生成伪标签

一旦我们有了最优传输矩阵 \(\mathbf{Q}\),我们就可以根据模型当前的理解来确定图像的“真实”类别。伪标签 \(\tilde{y}_i\) 只是传输矩阵中概率最高的类别:

\[ \tilde { y } _ { i } = \arg \operatorname* { m a x } _ { j } \mathbf { Q } _ { i j } . \]

伪标签分配公式。

第三步: 数据划分

现在我们将生成的伪标签 \(\tilde{y}_i\) 与实际的数据集标签 \(\hat{y}_i\) 进行比较。

  • 如果它们匹配,则数据可能是干净的。
  • 如果它们不一致,则数据可能是噪声 。 \[ { \mathcal D } _ { \mathrm { c l e a n } } = \{ i \mid \hat { y } _ { i } = \tilde { y } _ { i } \} , \quad { \mathcal D } _ { \mathrm { n o i s y } } = \{ j \mid \hat { y } _ { j } \neq \tilde { y } _ { j } \} . \] 数据划分公式。

第四步: 协调损失

最后,使用组合损失函数更新提示。干净子集使用交叉熵进行训练,以精细化决策边界;噪声子集使用平均绝对误差进行训练,以学习鲁棒特征,而不过拟合特定的错误标签。

\[ \ell _ { \mathrm { N L P r o m p t } } = \sum _ { i \in \mathcal { D } _ { \mathrm { c l e a n } } } - \mathbf { y } _ { i } ^ { \top } \log \mathbf { s } _ { i } + \sum _ { j \in \mathcal { D } _ { \mathrm { n o i s y } } } | | \mathbf { y } _ { j } - \mathbf { s } _ { j } | | _ { 1 } . \]

结合了 CE 和 MAE 的最终 NLPrompt 损失函数。

实验结果

研究人员在多个数据集 (Caltech101, Flowers102, UCF101 等) 和不同噪声水平下评估了 NLPrompt。他们测试了对称噪声 (随机翻转) 和非对称噪声 (翻转到视觉相似的类别,这更难) 。

合成噪声性能

下表 1 总结了结果。对比对象包括标准 CoOp、“GCE” (广义交叉熵,一种常见的鲁棒损失) 和 JoAPR (之前最先进的方法) 。

不同数据集和噪声水平下的性能指标。

主要结论:

  1. 高噪声下的主导地位: 请看 50% 和 75% 噪声列。NLPrompt (每个块的最后一行) 经常以巨大的优势击败 CoOp (有时准确率高出 30-40%) 。
  2. 一致性: 即使在低噪声水平 (12.5%) ,NLPrompt 仍然保持竞争力或更优,表明“净化”步骤没有意外丢弃好数据。

现实世界噪声: Food101N

合成噪声是一个很好的压力测试,但现实世界的噪声是不可预测的。作者在 Food101N 上进行了测试,这是一个从网络上抓取的美食图像数据集,包含自然发生的标签错误 (约 20% 噪声) 。

Food101N 上的测试准确率。

如表 2 所示,NLPrompt 达到了 76.46% 的准确率,优于基线 CoOp (69.50%) 和之前的最佳方法 JoAPR (72.57%)。这证实了 PromptOT 机制在真实世界数据分布上有效,而不仅仅是在合成设置中。

消融实验: OT 真的重要吗?

你可能会问: “最优传输部分真的有必要吗?我们不能只对所有数据使用 MAE 吗?”

下面的消融实验清楚地回答了这个问题。

Flowers102 上的消融实验。

  • 行 (b): 对所有数据使用 MAE (PromptMAE) 获得了 85.90% 的平均准确率。这还不错!
  • NLPrompt: 使用完整的净化策略获得了 92.00%
  • 行 (d) vs (e): 有趣的是,仅在干净数据上训练 (d) 比完整方法更差。这意味着即使是噪声数据也包含 MAE 可以安全提取的有用视觉信号。

结论

在基础模型时代,NLPrompt 为噪声标签问题提供了一个令人信服的解决方案。它没有用复杂的修正网络重新造轮子,而是利用了视觉-语言模型的固有优势:

  1. 通过 MAE 实现鲁棒性: 利用提示学习的优化环境,使用忽略离群值的损失函数。
  2. 通过 OT 实现对齐: 利用预先对齐的文本-图像空间,在无需外部监督的情况下识别和分离噪声标签。

对于学生和从业者来说,这篇论文强调了一个重要的教训: 当数据或训练范式 (如提示微调) 发生变化时,标准做法 (如总是使用交叉熵) 应该受到质疑。 有时,最简单的工具——如平均绝对误差——只需要合适的语境就能大放异彩。