简介
在当前的人工智能领域,大型语言模型 (LLM) 如 GPT-4、Claude 和 Gemini 已经变得无处不在。它们拥有令人难以置信的推理能力,但仍然容易出现幻觉、偏见和推理错误。对于研究人员和工程师来说,解决这些错误的标准方案通常是微调或引导模型。
然而,存在一个巨大的障碍: 大多数最先进的模型都是黑盒 。 我们通过 API 与它们交互,发送提示并接收文本。我们无法访问模型的权重、梯度,甚至通常无法获取输出标记概率 (logits) 。这种不透明性使得依赖访问内部模型状态的传统适配方法变得不可能。
我们要如何“修复”一个无法触碰的模型?
最近的研究提出了一种名为 CoBB (Correct for Black-Box LLMs,黑盒 LLM 修正) 的新颖框架。该方法将黑盒模型视为产生不完美推理的生成器,并训练一个独立的、较小的“适配模型”来纠正这些错误。CoBB 的独特之处在于其效率: 它不需要在推理过程中进行昂贵的迭代验证过程,也不需要访问黑盒模型的概率。
在这篇文章中,我们将解构 CoBB 论文,探讨它如何利用遗传算法来筛选训练数据,并利用对比学习教导一个小模型如何修复大模型的错误。
黑盒适配的问题
为了理解为什么需要 CoBB,我们必须看看现有适配方法的局限性。当你想要在不访问权重的情况下提高 LLM 在特定任务 (如数学推理或避免偏见) 上的性能时,通常有三种选择:
- 基于概率的适配: 训练一个小模型来调整大模型的输出概率。如果 API 不返回概率,这种方法就会失败。
- 验证器/重排序方法: 从 LLM 中采样许多答案,使用训练好的“验证器”对它们进行评分,并选择最好的一个。虽然有效,但这在计算上非常昂贵,因为它需要生成多个输出并对每个查询运行验证步骤。
- CoBB 方法: 训练一个独立的、高效的模型,该模型接收黑盒 LLM 的初始推理,并在单次传递中将其转换为正确的输出。
下图展示了这些差异。注意 CoBB (c) 与依赖概率的 (a) 或成本高昂的 (b) 方法相比,提供了多么简化的推理过程。

CoBB 框架
CoBB 的核心思想是seq2seq (序列到序列) 适配 。 我们将黑盒模型原始的、可能存在缺陷的推理 (\(y_o\)) 视为输入,将修正后的推理 (\(y_a\)) 视为目标输出。
目标是训练一个适配模型,记为 \(\pi_\theta\) (由 \(\theta\) 参数化) ,来执行这种映射:

这里,\(\mathbf{x}\) 是问题,\(\mathbf{y}_o\) 是来自黑盒的原始输出。适配模型使用较小的开源 LLM (如 Mistral-7B) 进行初始化。
该工作流程包含三个明显的阶段:
- 收集: 从黑盒模型收集推理链。
- 数据集构建: 使用遗传算法选择最具信息量的正样本对和负样本对。
- 训练: 使用对比学习目标教导模型偏好正确的推理而不是错误的推理。

第一阶段: 收集和标记推理
首先,系统需要原材料。对于数据集 (如用于数学的 GSM8K 或用于推理的 StrategyQA) 中的一组问题 \(\mathbf{q}\),研究人员使用思维链 (CoT) 提示多次查询黑盒模型 \(\mathcal{M}\)。

对于每个问题,他们生成 \(K\) 条不同的推理路径。使用数据集提供的真实标签,这些路径被分为两类:
- 正样本集 (\(\mathcal{Y}_{pos}\)) : 导致正确答案的推理链。
- 负样本集 (\(\mathcal{Y}_{neg}\)) : 导致错误答案的推理链。
如果模型太优秀没有产生错误,他们会通过对其他问题采样来强制产生错误。如果模型太差没有产生正确答案,他们会使用“答案增强提示” (给出答案并要求模型论证它) 来生成合成正样本。
第二阶段: 通过遗传算法优化数据集
这无疑是论文中最具技术趣味的部分。一旦我们为一个问题收集了一堆正确和错误的推理,我们该如何训练模型?
一种朴素的方法是将每条正确推理与每条错误推理配对,并告诉模型“选 A 不选 B”。然而,组合的数量呈二次方增长。如果你有 10 个正确输出和 10 个错误输出,每个问题就有 100 个配对。对于大型数据集,这在计算上变得难以处理,并且包含大量冗余信息。
我们需要对这些配对进行子采样 。 我们需要一个小的配对子集,该子集在统计上能代表所有可能配对的整个集合。
优化目标
研究人员将其公式化为最小化全集 (\(\mathcal{P}\)) 的似然分布与选定子集 (\(\mathcal{P}_{sub}\)) 的似然分布之间的 2-Wasserstein 距离 。
首先,让我们定义一个配对的“价值”。对于任何一对正向 (\(\mathbf{y}_p\)) 和负向 (\(\mathbf{y}_n\)) 推理,适配模型 \(\pi_\theta\) 会分配一个似然差:

目标是找到一个子集 \(\mathcal{P}_{sub}\),使得这些似然差的统计属性 (均值和方差) 尽可能接近全集。使用的距离度量是:

最小化这个距离可以确保我们在小子集上训练所产生的“学习信号”与在巨大的全集上训练是一样的。
遗传算法
选择最优子集是一个 NP-hard 问题。为了高效解决这个问题,作者采用了遗传算法 。
遗传算法模仿自然选择。它们维护一组候选解 (子集) ,对它们进行扰动 (变异) ,并选择那些最小化目标函数 (Wasserstein 距离) 的解。

该算法迭代 \(T\) 步,逐步优化子集,直到找到能最好地代表完整分布的推理对组合。这个优化后的子集随后被添加到最终的训练数据集 \(\mathcal{D}\) 中。

第三阶段: 通过对比似然学习纠正
数据集构建完成后,我们开始训练适配模型 \(\pi_\theta\)。
标准的微调使用监督微调 (SFT) , 它简单地最大化给定输入下正确输出的似然:

然而,SFT 只教模型做什么。它并没有明确教模型避免什么。由于 CoBB 拥有明确的正确和错误推理配对 (得益于第二阶段) ,作者利用了一种称为赔率比偏好优化 (ORPO) 的对比目标。
赔率比损失
训练目标结合了标准 SFT 和赔率比 (OR) 损失。OR 损失强制模型增加生成正向推理 (\(\mathbf{y}_p\)) 相对于负向推理 (\(\mathbf{y}_n\)) 的几率。
生成序列 \(\mathbf{y}\) 的赔率定义为 \(\frac{\pi_\theta(\mathbf{y}|\mathbf{x})}{1-\pi_\theta(\mathbf{y}|\mathbf{x})}\)。损失函数为:

总训练损失结合了这两者:

通过使用 \(\lambda\) 对 OR 损失进行加权,模型学会了严格区分有效和无效的推理路径。
可视化对比学习的影响
这个复杂的损失函数真的有用吗?结果表明它是至关重要的。
下图比较了训练动态。在 (a) 中,如果没有对比训练,负面推理的似然 (红线) 实际上随着正面推理一起增加——模型只是在学习生成文本,而不一定是正确的文本。在 (b) 中,使用 CoBB 目标,模型成功地提升了正面似然,同时抑制了负面似然。

实验结果
研究人员在四个不同的 QA 基准上评估了 CoBB: StrategyQA (推理) 、GSM8K (数学) 、TruthfulQA (安全性/幻觉) 和 ScienceQA 。 他们使用 GPT-3.5-Turbo 作为目标黑盒模型,使用 Mistral-7B-v2 作为适配模型。
准确率提升
CoBB 显著提升了整体性能。在下表中,观察“Target Black-box LLM” (原始 GPT-3.5) 和“CoBB (Ours)”之间的差异。
- GSM8K: 准确率从 76.25% 跃升至 78.59% (平均) 和 85.14% (多数投票) 。
- ScienceQA: 准确率从 81.24% 提升至 88.00% 。
至关重要的是,CoBB 优于 BBox-Adapter , 这是之前最先进的方法,依赖于昂贵的波束搜索和验证。

成本效率
CoBB 最有力的论据之一是经济性。BBox-Adapter 需要在推理过程中多次查询黑盒模型和验证器 (波束搜索) 。而 CoBB 一旦训练完成,就是单次传递的模型。
如表 3 所示,CoBB 显著降低了评估成本——在 StrategyQA 等数据集上的推理成本大约仅为 BBox-Adapter 的 1/10 。

迁移能力: 泛化到其他 LLM
这就引出了一个迷人的问题: 如果我们使用 GPT-3.5 的数据训练 CoBB 适配器,我们能用它来修复其他模型 (如 Claude-3 或 Llama-2) 的错误吗?
答案似乎是肯定的。研究人员将 (使用 GPT-3.5 数据训练的) 适配器应用于 Claude-3-Haiku、Mistral-7B、Phi-3 和 Gemma 的输出。

例如, Claude-3-Haiku 在 StrategyQA 上的性能仅通过 CoBB 适配器就从 72.05% 提升到了 76.42% (多数投票) 。这表明适配模型学习了任务中“正确推理”的通用原则,而不仅仅是记住了 GPT-3.5 的特定怪癖。
定性分析
一次“修正”实际上是什么样子的?在下面来自 ScienceQA 的例子中,原始模型 (GPT-3.5) 正确识别了牛顿第三定律,但错误地识别了力的方向,导致了错误的答案。CoBB 接收了这个推理,识别出关于磁引力方向的逻辑缺陷,并重写了它以得出正确的结论。

意义所在
CoBB 论文在大型语言模型的“控制”阶段迈出了令人信服的一步。随着模型越来越多地集成到关键工作流中,将黑盒系统包裹在“修正层”中的能力变得无价。
给学生和从业者的关键要点:
- 不要依赖 Logits: 即使我们只能访问模型的文本输出,我们也可以有效地引导模型。
- 数据选择是关键: 我们不需要所有数据。我们需要一个有代表性的子集。使用像 Wasserstein 距离这样的统计度量结合优化算法 (遗传算法) 是筛选训练数据的强大方式。
- 对比学习: 教模型“什么是错的”与教它“什么是对的”同样重要,尤其是在推理任务中。
- 效率致胜: 相比于复杂的迭代验证方法,一种在提高准确率的同时能将推理成本降低 90% 的方法更有可能在现实世界中被采用。
CoBB 证明,通过巧妙的数据集构建和目标函数,较小的开源模型可以有效地充当其较大的闭源同行的监督者。
](https://deep-paper.org/en/paper/2406.18695/images/cover.png)