在大型语言模型 (LLM) 飞速发展的世界里,“最佳实践”往往不是通过严格的消融实验建立的,而是通过社区共识和库的默认设置形成的。监督指令微调 (SIFT) 中的一个标准就是 Prompt Masking (提示词掩码)

当我们微调一个模型以遵循指令时,标准做法是仅在 补全 (模型的回答) 上计算损失 (误差) 。我们通常会对 提示词 (指令和输入) 进行掩码处理,告诉模型: “不用担心预测这些 token;只要专注于生成答案即可。”

但这真的是最优解吗?

直到最近,OpenAI 的微调 API 还提供了一个名为 prompt_loss_weight (PLW) 的参数。这允许用户强制模型学习提示词 token 以及补全 token。OpenAI 声称这有助于在输出较短时稳定训练。然而,在 2024 年初,他们悄悄地移除了这个参数。

这对 NLP 的学生和从业者提出了一个关键问题: Prompt Loss (提示词损失) 真的重要吗?

Huerta-Enochian 和 Ko 最近的一篇论文 “Instruction Fine-Tuning: Does Prompt Loss Matter?” 深入探讨了这个问题。他们的发现挑战了现状,表明对于特定类型的数据,忽略提示词损失是一个损害模型性能的错误。

在这篇深度文章中,我们将剖析他们的方法论、“提示词倒置 (Prompt Inversion) ”的概念,以及为什么输入和输出长度之间的比率可能是你未曾追踪的最重要指标。

背景: SIFT 的标准方法

为了理解这篇论文的贡献,我们需要先巩固一下我们对 SIFT 通常如何工作的理解。

在标准的因果语言建模 (如 GPT) 中,模型被训练为在给定前序 token \(x_1, ..., x_t\) 的情况下预测下一个 token \(x_{t+1}\)。目标是最大化数据的可能性。

当我们转向 指令微调 (Instruction Fine-Tuning) 时,我们的数据被结构化为成对形式: 提示词 (Prompt) (指令 + 输入) 和 补全 (Completion) (目标输出) 。

默认的掩码处理

在 HuggingFace 的 Transformers 等库中,SIFT 的默认行为是对提示词 token 应用掩码。这意味着:

  1. 模型看到提示词。
  2. 它生成补全。
  3. 损失函数 (通常是交叉熵) 在补全 token 上计算。
  4. 提示词 token 对梯度更新的贡献为

用这篇论文的术语来说,这就是 Prompt Loss Weight (PLW) 为 0

如果我们像处理原始文本 (预训练风格) 一样处理指令数据,我们会计算每个 token 的损失,包括指令。这就是 PLW 为 1

研究人员调查了这两个极端之间的灰色地带。如果我们把 PLW 设为 0.1 会怎样?或者 0.01?

核心假设: 稳定性 vs. 性能

我们为什么要训练模型预测提示词?提示词是由用户提供的;模型在推理过程中不需要生成它。

OpenAI 关于该现已弃用参数的原始文档建议,一个较小的非零 PLW (如 0.01) 有助于 稳定学习 , 特别是当补全非常短的时候。其逻辑是,如果输出只有几个 token 长,梯度信号就会过于稀疏或嘈杂。强制模型同时也预测提示词提供了一种“锚定”信号。

这篇论文的作者提出了一个更微妙的假设,涉及 生成比率 (Generation Ratio, \(R_g\))

生成比率 (\(R_g\))

他们将生成比率定义为:

\[R_g = \frac{\text{Length of Completion}}{\text{Length of Prompt}}\]
  • 长补全数据 (\(R_g \geq 1\)): 输出比输入长 (例如: 创意写作、文章生成) 。
  • 短补全数据 (\(R_g < 1\)): 输出比输入短 (例如: 多项选择题、分类、情感分析) 。

作者假设存在一种 权衡 :

  1. 正面效应: 学习提示词有助于稳定模型或对其进行正则化 (使其保持接近预训练知识) ,这在补全信号较弱 (短数据) 时很有帮助。
  2. 负面效应: 过分优先考虑提示词会分散模型的注意力,使其偏离主要工作——遵循指令。

这导致了对 二次关系 (倒 U 形曲线) 的预测。当你将 PLW 从 0 开始增加时,性能应该会上升,达到一个峰值 (临界值 \(\lambda\)) ,然后随着提示词损失压倒补全损失而下降。

方法论: 创建“短”数据集

为了测试这一假设,研究人员需要能够清晰区分长补全和短补全的数据集。他们使用了著名的 Alpaca 数据集,但遇到了一个问题: 标准的指令数据集通常是长度混合的,或者以长文本为主。

为了严格测试“短补全”场景,他们设计了一种巧妙的技术,称为 提示词倒置 (Prompt Inversion)

提示词倒置

如何将一个创意写作提示词 (长输出) 变成一个分类任务 (短输出) ,而又不丢失语义复杂性?把它翻转过来。

图 4 所示,提示词倒置重构了数据,使模型必须根据输出预测原始指令。

图4: 使用提示词倒置修改提示词-补全比率的示例,最好以彩色查看。为了倒置实例,我们将提示词-补全任务重构为原始提示词预测任务。即,我们教模型在给定示例补全和可选输入的情况下预测原始指令。在上面的第一个例子中,提示词倒置将实例的基于单词的补全-提示词比率 R_g 从 34/(7 + 0) = 4.857 变为 7/(9 + 34) = 0.163

看上图中的例子:

  • 原始 (左) : 指令询问韩国总统是谁。输出是一个长而详细的句子。(\(R_g > 1\))
  • 倒置 (右) : 指令变成了“预测生成以下 AI 输出的提示词。”输入是那个详细的句子。目标输出是简单的问题“Who is the President of South Korea?” (\(R_g < 1\))

这种技术允许研究人员创建 AlpacaDataShort , 这是一个生成比率极小 (\(R_g = 0.08\)) 的数据集,同时还有标准的 AlpacaDataAlpacaDataCleaned (这些是长补全数据集) 。

然后,他们使用从 0.0 (标准掩码) 到 1.0 (全语言建模) 的 10 个不同 PLW 值微调了 LLaMA 1 和 LLaMA 2 (7B 模型) 。

结果: PLW 重要吗?

实验结果显示,基于数据集的长度比率,结果存在明显的差异。

1. “不重要”的情况: 长补全

对于像 AlpacaDataCleaned 这样的数据集 (输出比输入长得多) ,PLW 的值与下游性能几乎没有统计学关系。无论你是对提示词进行掩码 (PLW=0) 还是对其进行完全训练 (PLW=1) ,模型的表现大致相同。

这可能解释了为什么社区主要满足于提示词掩码——大多数生成任务 (编码、写作) 都属于这一类。

2. “重要”的情况: 短补全

对于 AlpacaDataShort , 情况完全不同。研究人员发现了一个统计上显著的 负二次关系

让我们看看 图 1 中的综合性能趋势:

图1: 按变换后的 PLW 显示的性能。(a) 简单的性能综合得分 (基准得分的未加权平均值) 。(b),(c),(d) 相对综合性能得分,其中每个任务和组的任务得分都经过最小-最大缩放,以显示共同趋势,无论比例如何。注意,只有 AlpacaDataShort 模型的综合得分显示出与变换后 PLW 的关系。最好以彩色查看。

关注上图中的 图板 (d) (红线) 。这张图表代表了在短数据集上训练的模型的相对性能。

  • 曲线: 你可以清楚地看到“隆起”。在 PLW=0 (最左边) 时性能较低,随着 PLW 增加而上升,然后随着 PLW 接近 1.0 而下降。
  • 含义: 如果你正在训练一个用于短形式任务的模型 (如预测原始提示词,或者推而广之,分类任务) , 对提示词进行掩码 (PLW=0) 并不是最优的。 设置一个分数权重 (例如 0.1) 会得到更好的结果。

特定任务的性能细分

对于每个基准测试,“最佳” PLW 并不相同。研究人员将评估基准分为几组。

第一组: 多项选择与短生成 像 ARC Challenge、PIQA 和 WinoGrande 这样的基准测试显示了典型的倒 U 形。

图5: 第一组基准测试性能。注意与变换后的 PLW 呈负二次关系。

图 5 中,看红线 (AlpacaDataShort) 。性能很早就达到峰值,大约在 PLW 0.01 到 0.1 之间。这证实了对于需要简短回答的推理任务,少量的提示词损失可以作为性能助推器。

第二组: 长生成 像 AlpacaEval 和 PandaLM 这样的基准测试 (模型生成长篇开放式文本) 显示了不同的趋势: 随着 PLW 的增加,性能持续变好,甚至直到 1.0。

图6: 第二组基准测试显示性能随 PLW 增加而提高。

图 6 显示了这种上升趋势。这很有趣: 即使模型是在 数据上微调的,在此提示词上进行大量训练 (PLW \(\approx\) 1.0) 也有助于它在 生成评估中表现更好。为什么?作者认为,如果没有 PLW,在短数据上训练的模型会变得“过于简练”。在提示词上训练有助于它们保持生成流畅、较长序列的能力。

因果机制: 揭穿“稳定性”假说

那么,为什么 会发生这种情况?OpenAI 最初声称这与 训练稳定性 有关。其想法是,短补全提供“稀疏”的梯度,导致训练不稳定。

研究人员通过测量训练损失的 相对标准偏差 (RSD) 来测试这一点。如果是稳定性起关键作用,我们会预期表现最好的模型拥有最稳定 (方差最低) 的损失。

图 2 揭示了与稳定性假设相矛盾的结果。

图2: 因果机制分析。箱线图使用 0.25、0.5 和 0.75 分位数,须线位于 0.09 和 0.91 分位数。最好以彩色查看。(a) 训练损失稳定性: 五步训练损失窗口的相对标准偏差 (RSD) 显示小 (非零) PLW 的不稳定性增加。(b) 权重距离: 学习到的权重与 PTLM 权重之间的距离对于小 (非零) PLW 来说更小。(c) 训练数据记忆化: 训练数据提示词上的补全 Sacre BLEU 分数作为过拟合的指标。(d) AE 生成长度: 不同 PLW 值在 Alpaca Eval 测试集上的生成长度。

看图 2 中的 图板 (a)

  • x 轴是 PLW。y 轴是损失不稳定性。
  • 注意,一旦你从 PLW 0 移动到 PLW 0.0005,不稳定性就会 激增
  • 然而,我们从之前的结果知道,在这个范围内性能是 提高 的。
  • 因此, 稳定性的增加并不是性能提高的原因。 事实上,尽管训练过程不太稳定,模型的表现却更好。

真正的驱动力: 正则化 vs. 过拟合

如果不是稳定性,那是什么?作者提出了两个相互竞争的机制:

  1. 权重正则化 (图板 b) : 当 PLW 很小但非零时,微调后的模型权重与原始预训练模型权重之间的距离更小。这表明提示词损失起到了 正则化器 的作用,使模型“锚定”在其预训练知识库上。当指令数据集很小或很专业时,这一点至关重要。

  2. 防止记忆化 (图板 c) : 图板 (c) 显示了“训练数据记忆化” (通过训练集上的 BLEU 分数衡量) 。高分意味着模型只是在背诵训练数据。注意随着 PLW 增加 (向右移动) ,记忆化得分下降。这意味着提示词损失阻止了模型过度拟合训练集中特定的提示词-响应对。

结论: PLW 之所以有效,是因为它达成了一种平衡。它防止模型偏离其基础太远 (正则化) ,并防止它简单地死记硬背简短的答案 (过拟合) 。

其他正则化器能取代 PLW 吗?

怀疑论者可能会问: “如果只是正则化,我们不能使用像权重衰减 (Weight Decay) 、Dropout 或标签平滑 (Label Smoothing) 这样的标准技术吗?”

作者进行了补充实验来测试这一点。他们在 AlpacaDataShort 数据集上比较了最佳 PLW 与这些标准正则化技术。

图 8 展示了比较结果。

图8: PLW 与其他正则化技术的比较 (针对 PLW = 0 和 PLW = 1 计算) 。(a) 简单综合得分。(b) 组合相对综合得分显示,在 AlpacaDataShort 上使用分数 PLW 微调的模型优于使用替代正则化微调的模型。(c) 分数 PLW 性能在多项选择和短生成基准测试 (第一组) 中最为极端。(d) 分数 PLW 模型在第二组基准测试中的表现不太明显,PLW 优化模型的表现略差于其他几种替代指标。

关注 图板 (b) 。 代表 PLW 的红线比代表权重衰减、Dropout 或标签平滑的平坦线达到了更高的相对性能峰值。

虽然标准正则化器有所帮助,但它们无法匹配调整提示词损失权重所提供的性能提升。这表明 PLW 提供了一种针对指令微调结构的独特正则化类型,通用的方法无法轻易复制。

实际意义: 如何选择 PLW

这篇论文的发现对 API 提供商和从业者来说是一个警钟。如果你正在为输出较短的任务 (如分类、抽取或多项选择) 微调模型, 你不应该忽略提示词损失。

但你应该选什么值呢?

作者基于他们的实验生成了一个预测模型,根据 补全-提示词比率 (\(R_g\)) 建议最佳 PLW 值。

图 10 可视化了这个“甜点区”。

图10: 数字版查看效果最佳以获得更高分辨率。

虽然热力图可能很密集,但作者将其分解为一个简化的表格 (参考论文数据) :

  • 如果 \(R_g > 1.5\) (长输出) : PLW 不太重要。你可以使用 0 (默认) 或很小的值。
  • 如果 \(R_g \approx 1.0\) (平衡) : 大约 0.15 - 0.2 的 PLW 是最佳的。
  • 如果 \(R_g < 0.5\) (短输出) : 大约 0.1 - 0.2 的 PLW 对于一般性能通常是最好的。但是,如果你的具体目标纯粹是多项选择的准确性,你可能需要一个与你的目标是文本生成时略有不同的值。

结论

主要 API 提供商移除 prompt_loss_weight 参数可能为时过早。这项研究强调了大型语言模型训练中一个微妙的现实: 一刀切是行不通的。

虽然提示词掩码对于创意生成和长篇聊天来说是一个安全的默认设置,但对于短形式任务来说,它显然不是最优的。作者表明:

  1. 上下文很重要: 目标输出相对于输入的长度 (\(R_g\)) 决定了你的训练策略。
  2. 别怪稳定性: 提示词损失的好处不在于稳定梯度,而在于锚定模型 (正则化) 和防止死记硬背。
  3. 没有简单的替代品: 你不能简单地换用 Dropout 或权重衰减并期望得到相同的结果。

对于学生和研究人员来说,这篇论文是一个极好的例子,说明了为什么我们必须质疑“默认”设置。在寻找更好的指令遵循模型时,有时答案不在于更大的模型,而在于仅仅关注提示词。