提示调整是参数 (parameter)高效微调 (fine-tuning)(PEFT)的一种独特策略。这种方法与其他PEFT方法(例如LoRA或适配器)不同,后者修改或增加模型架构内部的组件。提示调整侧重于操纵馈入完全冻结的预训练 (pre-training)大型语言模型(LLM)的输入表示。其主要思路是学习一小组连续向量 (vector)嵌入 (embedding),通常称为“软提示”或“提示嵌入”,这些嵌入被前置到实际的输入序列嵌入之前。
核心理念:学习连续提示
传统的提示方式,通常被称为提示工程 (prompt engineering)或离散提示,涉及精心设计文本指令(例如,“将英语翻译成法语:{sentence}”)以引导LLM的行为。尽管有效,但找到最佳的离散提示可能具有挑战性,并且通常需要大量手动工作。
提示调整通过用可学习的连续向量 (vector)替换离散文本提示来自动化此过程。我们不是尝试不同的词语或短语,而是初始化一个提示嵌入 (embedding)序列,并使用梯度下降 (gradient descent)来优化它们的值以完成特定的下游任务。
设输入令牌序列为 X=[x1,x2,...,xn]。每个令牌 xi 都被映射到一个输入嵌入 ei。提示调整引入了一组 k 个可学习的提示嵌入 P=[p1,p2,...,pk],其中每个 pj 与令牌嵌入具有相同的维度(例如,dmodel)。这些学习到的嵌入被前置到输入嵌入序列之前,形成冻结LLM第一层的有效输入:
LLM的输入=[p1,p2,...,pk,e1,e2,...,en]
在微调 (fine-tuning)期间,损失函数 (loss function)(例如,用于分类或生成的交叉熵)根据模型的输出来计算。然而,反向传播 (backpropagation)只更新提示嵌入 P 的参数 (parameter)。基础LLM的所有参数保持不变。
提示调整的流程。可学习的连续提示嵌入(蓝色)前置于标准输入嵌入(灰色)。训练期间只更新这些提示嵌入,而主要LLM(黄色)保持冻结。
提示调整的优势
- 极高的参数 (parameter)效率:可训练参数的数量与完整模型大小相比通常非常微小。如果提示长度为 k,模型的隐藏维度为 dmodel,则只添加和训练 k×dmodel 个参数。对于一个拥有数十亿参数的模型来说,这仅占很小一部分(通常小于0.1%)。
- 无需修改基础模型:原始LLM的权重 (weight)保持不变。这大大简化了部署。对于多项任务,您只需为每项任务存储和切换一小组提示嵌入 (embedding),而无需维护大型修改模型的单独副本。
- 训练内存需求降低:由于梯度仅针对提示嵌入计算,因此优化器状态所需的内存与完全微调 (fine-tuning)相比大大降低。
- 提示与模型解耦:学习到的提示特定于任务及其训练所用的模型,但它是单独存储的。
考量因素与挑战
- 可解释性:与离散提示不同,学习到的连续向量 (vector) pi 没有直接的人类可读含义。分析特定向量组为何有效是困难的。
- 初始化:性能有时可能对提示嵌入 (embedding)的初始化方式敏感。常见策略包括随机初始化或使用相关词汇词嵌入进行初始化。
- 提示长度:超参数 (parameter) (hyperparameter) k(提示嵌入的数量)需要调整。过短的提示可能缺乏表达能力,而过长的提示会增加可训练参数,并且可能不会带来更多好处。典型值从几个到几百个不等。
- 性能差异:尽管通常具有竞争力,但提示调整可能无法在所有任务上与LoRA或完全微调 (fine-tuning)等方法的性能相媲美,特别是那些需要对模型内部知识或推理 (inference)能力进行广泛修改的任务。它通常在序列分类和生成任务中表现良好,只要对模型的输出进行条件化就足够了。
- 与前缀调整的区别:提示调整仅将可调嵌入前置到输入层。一种相关技术——前缀调整,则为Transformer每个层的隐藏状态学习单独的前缀向量。与标准提示调整相比,前缀调整可能对模型内部激活有更多的控制,但随之而来的是更高的复杂性和更多的可调参数。
实际应用
像Hugging Face的PEFT(参数 (parameter)高效微调 (fine-tuning))这样的库提供了方便的抽象,用于实现提示调整。通常,您会:
- 加载预训练 (pre-training)的基础LLM,确保其权重 (weight)被冻结。
- 定义一个
PromptTuningConfig,指定诸如虚拟令牌数量(num_virtual_tokens,等同于 k)和初始化方法等参数。
- 使用库工具将基础模型与提示调整逻辑进行封装。
- 继续进行标准的训练循环,其中优化器被配置为仅更新新添加的提示嵌入 (embedding)参数。
提示调整是一种有效且资源高效的LLM适配方法,当计算资源有限或需要在不修改基础模型权重的情况下处理多项任务时,此方法特别有用。它是PEFT工具集中一种有用的技术,与调整模型内部参数的方法相比,它提供了一种不同的方式。