趋近智
前缀微调(Prefix Tuning)提供了一种独特的参数高效微调(PEFT)方法。与LoRA或适配器模块等修改或增加模型结构内部权重的方法不同,前缀微调完全冻结原始大语言模型(LLM)的参数。它不是仅仅学习添加到输入序列的嵌入,而是引入可学习参数,这些参数直接影响Transformer层内部的隐藏状态。
其主要思想是生成一小段连续向量序列,称为前缀,这些向量预置到Transformer块的多头自注意力机制中的键()和值()矩阵前。这个前缀为模型在每个层提供可学习的、针对特定任务的上下文,引导其激活值趋向微调任务的预期输出。
回顾标准自注意力计算,其中查询()、键()和值()矩阵是使用学习到的权重矩阵()从层的输入隐藏状态()导出的:
注意力分数和输出随后基于这些矩阵计算得出。
在前缀微调中,我们引入一个可学习的前缀张量,它包含前缀向量的参数。设前缀长度为。此张量为键生成层特定前缀向量,为值生成,两者形状均为(),其中是模型的隐藏维度大小。这些前缀向量随后在注意力计算之前,沿着序列长度维度与原始的和矩阵拼接起来:
注意力机制随后使用这些修改过的键和值矩阵进行操作:
其中是键的维度。
这种修改发生在每个Transformer层内部(或部分层),允许学习到的前缀影响模型在其整个深度上的内部表示。重要地,LLM的原始权重(、前馈层等)在训练期间保持不变。只有定义前缀的参数被更新。
前缀微调在Transformer层注意力机制内的流程。从训练参数导出的可学习前缀向量()在注意力计算前,与原始的键()和值()矩阵拼接。基础模型权重(等)保持冻结。
直接优化每个层的前缀向量和仍然可能涉及大量参数()。为了进一步提高参数效率,前缀微调常采用重参数化技术。
不是直接学习形状为()的完整前缀张量,而是学习一个形状为()的更小矩阵,其中是一个小的中间维度()。然后,这个更小的矩阵通过一个简单的全连接网络(通常只是一个线性层,有时是一个带有非线性的两层MLP)投影到完整维度,其权重也是可学习的:
or simply
只有和小型投影网络(例如)的参数被训练。这与直接学习相比,显著减少了可训练参数的数量,使得该方法效率很高,类似于LoRA中使用的低秩分解原理。如果投影网络被共享,可训练参数的总数将与层数无关,否则会线性增长但常数因子很小。
前缀微调通过预置可学习向量来调整冻结的LLM,这一目标与提示微调一致,但在重要方面与提示微调不同:
训练过程包括:
Hugging Face的PEFT等库提供了便捷的实现。配置前缀微调通常需要指定peft_type="PREFIX_TUNING"、num_virtual_tokens(对应于前缀长度),以及可能与重参数化网络相关的参数。
# 示例:使用 Hugging Face PEFT
from peft import get_peft_model, PrefixTuningConfig, TaskType
from transformers import AutoModelForCausalLM
# 加载基础预训练模型
model_name = "meta-llama/Llama-2-7b-hf"
base_model = AutoModelForCausalLM.from_pretrained(model_name)
# 配置前缀微调
peft_config = PrefixTuningConfig(
task_type=TaskType.CAUSAL_LM, # 指定任务类型
num_virtual_tokens=20, # 定义前缀长度 (Lp)
# 可能还有其他重参数化选项
# e.g., prefix_projection=True
inference_mode=False # 后续推理时设置为 True
)
# 用PEFT配置包装基础模型
prefix_tuned_model = get_peft_model(base_model, peft_config)
# 打印可训练参数——注意数量之少!
prefix_tuned_model.print_trainable_parameters()
# trainable params: 9,830,400 || all params: 6,748,211,200 || trainable%: 0.145679...
# 继续使用'prefix_tuned_model'进行标准训练循环
# ... (定义优化器、数据加载器、训练步骤) ...
# 只有前缀参数会接收梯度更新。
优点:
注意事项:
num_virtual_tokens)是一个需要调整以获得最佳性能的重要超参数。重参数化网络的结构也会影响结果。前缀微调是PEFT中的一种选项,通过允许学习到的上下文引导冻结LLM在每个层级的内部工作,从而在参数效率和表达能力之间取得了平衡。它特别适合在计算资源受限的情况下将大型模型应用于特定的生成任务。
简洁的语法。内置调试功能。从第一天起就可投入生产。
为 ApX 背后的 AI 系统而构建
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造