趋近智
不同于在模型现有层中嵌入可训练模块的方法,前缀微调提供了一种不同的参数高效调整方式。它不修改内部权重或添加适配器模块,而是通过在输入或隐藏状态前附加一系列连续的、特定于任务的向量(即前缀),来调节冻结的预训练模型的行为。
核心思路是学习一小组参数,这些参数能够有效地引导大型固定模型的激活,使其朝向所需的下游任务行为。可以设想,在模型处理实际输入之前,我们给它一个特殊的、学习到的“指令序列”。这个指令序列并非由离散的词元组成,而是由通过梯度下降直接优化的连续向量构成。
前缀微调在Transformer架构中通常涉及将可学习的前缀向量添加到自注意力机制中每一层使用的键 (K) 和值 (V)。原始模型参数保持不变。
让我们来看一下标准的自注意力计算:
Attention(Q,K,V)=softmax(dkQKT)V这里,Q、K 和 V 通常是输入隐藏状态 h 的线性投影:Q=hWQ,K=hWK,V=hWV。
前缀微调通过将前缀向量 PK 和 PV 连接到投影的键和值上来修改此过程:
K′=[PK;K]=[PK;hWK] V′=[PV;V]=[PV;hWV]查询 Q 保持不变(Q=hWQ)。注意力计算变为:
Attention(Q,K′,V′)=softmax(dkQ(K′)T)V′前缀向量 PK 和 PV 各自包含 Lp 个向量,而 Lp 则是选择的前缀长度(一个超参数)。每个向量的维度与原始键/值向量相同(通常是 dk 或 dmodel)。这些前缀参数共同形成一个矩阵 P,是微调过程中唯一更新的参数。
Transformer层中前缀微调的图示。原始权重 (WQ, WK, WV) 被冻结。可训练的前缀参数 (P) 被映射到 PK 和 PV,并在注意力计算之前附加到原始的 K 和 V 矩阵前。
前缀微调中的可训练参数数量取决于前缀长度 Lp、模型的隐藏维度 dmodel(为简化起见,假设 dk=dv=dmodel,尽管实际上前缀可能通过较小的MLP进行映射),以及层数 N:
可训练参数≈Lp×dmodel×N×2(因子2是因为键和值有独立的前缀)。通常,会使用一个小型多层感知器(MLP)来将一个更小的初始前缀矩阵投影到 PK 和 PV 所需的完整维度,从而进一步减少参数。
与LoRA或适配器微调相比,前缀微调可以非常参数高效,尤其是当 Lp 较小(例如10-100)时。前缀参数 P 通常是随机初始化的。
在训练过程中,梯度仅相对于前缀参数 P 计算,而大型预训练模型保持冻结。使用AdamW等标准优化器。
经常采用的一个技术细节是重参数化。不是直接优化每层的前缀参数 P∈RLp×dmodel,而是学习一个更小的矩阵 P′∈RLp×demb,同时学习两个投影矩阵 Wproj,K,Wproj,V∈Rdemb×dmodel。这样,PK=P′Wproj,K 和 PV=P′Wproj,V。如果 demb<dmodel,这会减少可训练参数的数量。
然而,请考虑以下几点:
前缀微调与提示微调密切相关。主要区别在于调节发生的位置。提示微调通常只在输入层序列前附加可学习的嵌入,使其参数效率更高。前缀微调则通过将学习到的向量注入每一层的注意力机制,可能提供更大的表达能力来影响模型在整个生成过程中的内部表示,尽管代价是参数量略多于提示微调。
前缀微调提供了一种优雅的方式来调整LLMs,通过将计算工作集中在学习一个小的、特定于任务的“控制序列”上,而不是改变模型的核心知识。它在PEFT工具包中是一种有价值的替代方案,特别是在严格的参数效率和非侵入式模型调整是主要目标时。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造