第四章:大模型(LLM)

第十部分:微调方法与实战

第四节:Prefix-Tuning


1️⃣ 背景与动机

在大规模语言模型微调中:

  • 全参数微调:需更新模型全部参数,计算与存储开销极大。

  • Prompt Tuning / P-tuning:只在输入层添加提示,参数开销小,但对复杂任务(尤其是生成任务)表现不足。

Prefix-Tuning 被提出,作为 介于全参数微调与 Prompt Tuning 之间的折中方案

  • Transformer 每一层的注意力机制中添加前缀向量

  • 保持模型主体参数冻结,只训练少量前缀参数。

  • 既能保持高效性,又能保证在文本生成等任务中的表现。


2️⃣ 核心思想

Prefix-Tuning 的关键是:

  • 每一层的 Self-Attention 和 Cross-Attention 模块中,预先注入一组可学习的前缀向量(prefix embeddings)

  • 这些前缀向量会被拼接到 Key 和 Value 中,使模型在计算注意力时,强制“关注”这些额外信息

这样:

  • 模型就好像在“潜意识”里多了额外的记忆片段。

  • 不需要改动输入句子本身,也不需要改动模型权重。


3️⃣ 方法原理

在 Transformer 的注意力机制中:

\text{Attn}(Q,K,V) = \text{Softmax}\left(\frac{QK^T}{\sqrt{d}}\right)V

在 Prefix-Tuning 中:

K' = [P_K; K], \quad V' = [P_V; V]

  • PK,PV:可学习的前缀向量,长度为 mm。

  • [P_K;K]:表示在原始 Key 前拼接上前缀 Key。

  • [P_V;V]:表示在原始 Value 前拼接上前缀 Value。

于是注意力变为:

\text{Attn}(Q, K', V') = \text{Softmax}\left(\frac{QK'^T}{\sqrt{d}}\right)V'


4️⃣ 与其他方法的比较

方法 注入位置 是否逐层 参数开销 效果
Prompt Tuning 输入层 embedding 仅输入层 极小 效果有限
P-tuning v1 输入层(带编码器) 仅输入层 较好
Prefix-Tuning KV Cache 每层 中等 好,特别适合生成任务
P-tuning v2 KV Cache 每层 中等 更强大,统一各种任务
LoRA 线性层低秩分解 每层 中等 更灵活,高效

5️⃣ 特点与优势

参数高效:通常仅需训练百万级别参数(占比 <1%)。
强大生成能力:在 GPT-2/3 上的生成任务表现接近全参数微调。
通用性:不仅适用于分类任务,更适合生成与条件文本任务。
低侵入性:无需修改原始模型架构,易于集成。


6️⃣ PyTorch 伪代码

import torch
import torch.nn as nn

class PrefixAttention(nn.Module):
    def __init__(self, num_heads, prefix_len, dim):
        super().__init__()
        self.prefix_len = prefix_len
        self.num_heads = num_heads
        self.dim = dim

        # 可学习前缀 (Key/Value)
        self.prefix_key = nn.Parameter(torch.randn(prefix_len, num_heads, dim))
        self.prefix_value = nn.Parameter(torch.randn(prefix_len, num_heads, dim))

    def forward(self, K, V):
        # 拼接前缀到原始 K/V
        K = torch.cat([self.prefix_key, K], dim=0)
        V = torch.cat([self.prefix_value, V], dim=0)
        return K, V

7️⃣ 总结

  • Prefix-Tuning 是一种 参数高效微调方法,通过在 每层 Attention 注入前缀向量 来引导模型生成。

  • 它在 文本生成任务 上表现优异,比 Prompt Tuning/P-tuning 更强。

  • 它为后续的 P-tuning v2LoRA 等方法提供了重要灵感。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐