尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Prefix Tuning学习

Prefix Tuning学习 学习概览学习进程高效微调 → 高效推理 → LLaMA 项目实战1. Efficient Fine-tuning怎么更便宜地训练Prefix Tuning增加少量可训练 Prefix。Adapter Tuning在 Transformer 中插入小型 Adapter。LoRA / AdaLoRA / QLoRA通过低秩、动态 Rank 和量化进一步降低训练显存。2. Efficient Inference怎么更便宜地运行Quantization 基础理解低比特表示、Scale、Outlier、Block-wise 等。PTQ模型训练完成后再量化。QAT训练过程中提前模拟量化误差让模型主动适应低比特部署。3. Project Demo把方法真正跑起来最后以Efficient Finetune LLaMA做完整项目。串起数据准备 → PEFT 微调 → 保存 Adapter → 推理部署。把前面的“训练省资源”和“推理省资源”真正闭环。下节预告Flash Attention 与 Distributed Training1. Flash Attention优化单卡里的 Attention标准 Attention 会产生n × n的中间矩阵序列越长显存压力越大。Flash Attention不改变 Attention 公式主要通过Tiling / 分块计算减少 HBM ↔ SRAM 的数据搬运。核心作用更省显存、更快地处理长序列。2. Distributed Training解决单张 GPU 不够的问题当模型、数据或训练状态太大时需要多张 GPU 协同训练。常见方式包括Data Parallel、Tensor Parallel、Pipeline Parallel、Model Parallel。核心作用把数据、模型或计算拆到多张 GPU 上。3. 和前面课程怎么衔接LoRA / QLoRA减少训练参数和模型显存。Flash Attention优化单个 Attention 算子的计算效率。Distributed Training突破单卡显存与算力上限。一句话总结下一阶段从“怎么少训练、少存模型”继续走向“Attention 怎么算得更快以及多张 GPU 怎么一起训练”。内容回顾LoRA 回顾低秩更新为什么能省显存1. 核心结构冻结W₀只学习ΔW原始权重W₀保持Frozen。LoRA 只新增两个小矩阵ΔW BA。前向计算h W₀x BAx等价于使用W₀ ΔW。2. 为什么参数量会大幅减少原矩阵需要训练mn个参数。LoRA 只训练r(mn)个参数。因为r ≪ min(m,n)所以可训练参数、梯度和优化器状态都会大幅减少。3. 为什么常用A随机初始化、B0初始时B0所以BA0。因此刚开始训练时模型行为与原预训练模型保持一致。随着训练进行A、B再逐渐学习出有用的低秩更新方向。一句话总结LoRA 不是把原模型压缩掉而是冻结大模型只让“需要学习的变化”发生在一个很小的低秩空间里因此显著降低训练参数量和训练显存。AdaLoRA 回顾固定 Rank → 动态 Rank 分配1. LoRA 的问题Rank 通常提前固定普通 LoRA 使用ΔW BA不同模块往往预先设定相同或固定的r。但不同层、不同权重矩阵对任务的重要性并不一样。所以 AdaLoRA 要解决的是有限的 Rank Budget 到底应该分给谁2. AdaLoRA用PΛQ拆开每个 Rank 方向AdaLoRA 写成ΔW_k P_kΛ_kQ_k。P第i列、λ_{k,i}、Q第i行共同组成一个Rank-1 单元。如果λ_{k,i} → 0这个 Rank 方向就被关闭。3. 核心算法Importance Global Budget先根据参数和梯度计算重要性S_{k,i}。再把整个模型所有 Rank 单元放在一起全局排序。当前 Budget 为b^(t)时只保留Global Top-b^(t)其余λ → 0。一句话总结AdaLoRA 就是把 LoRA 的“固定 Rank”改成“所有 Rank 单元根据重要性竞争同一个全局 Budget”从而让参数预算自动流向更重要的模块。Prefix Tuning1. Prefix Tuning给不同任务学习不同的“虚拟前缀”1.1 核心思路冻结 Base Model预训练 Transformer 参数全部Frozen。不做 Full Fine-tuning只训练一小组Prefix Parameters。所以它和 LoRA 一样都属于PEFT。1.2 每个任务学习自己的 PrefixTranslation、Summarization、Table-to-text 等任务各自拥有一套 Prefix。Prefix 不是自然语言而是模型学习出来的连续向量。可以理解为同一个大模型 不同任务的小型“任务提示参数”。1.3 和 LoRA / Adapter 的区别Prefix Tuning增加可学习的上下文 / Attention Prefix。Adapter Tuning在网络层中插入小模块。LoRA学习低秩权重增量ΔW BA。一句话总结Prefix Tuning 就是Frozen LM Trainable Task-specific Prefix大模型共享不同任务只需要保存一小套 Prefix 参数。2. Prefix Tuning 的灵感从“人工 Prompt”到“可学习 Context”2.1 Prompting 已经证明Context 能控制模型输出模型参数w不变只改变输入 Contextx输出概率P(y|x;w)就会变化。例如加入更明确的上下文后模型会更倾向预测符合语义的下一 Token。所以关键发现是不用改模型参数也能通过 Context 引导模型行为。2.2 Prefix Tuning不再人工猜 Prompt普通 Prompting人手工设计 Context。Prefix Tuning直接学习一组连续向量p₁,p₂,…,pₘ。可以理解成让梯度下降自动寻找最适合当前任务的“软提示”。2.3 和 LoRA 的本质区别LoRA学习权重增量ΔW BA。Prefix Tuning模型权重保持 Frozen学习可训练的 Prefix / Context。原始 Prefix Tuning 还会把这些前缀信息注入多层 Attention而不只是简单在文本前加几个词。一句话总结Prompting 是“人来设计 Context”Prefix Tuning 则是“把 Context 变成参数让模型自己学出来”。3. Prefix Tuning 核心为什么要从离散 Prompt 走向连续 Prefix3.1 第一种想法直接优化 Prompt Token把 Instruction 写成w₁,w₂,…,wₘ。冻结 Transformer 参数θ只寻找一组最优 Prompt。目标就是让训练集上的正确输出概率尽可能大。3.2 问题离散 Token 很难优化每个wᵢ都必须从 Vocabulary 里选择。如果词表很大、Prompt 又很长搜索空间会非常夸张。而 Token ID 是离散变量不能像普通参数一样直接做梯度下降。3.3 Prefix Tuning 的关键转变不再要求 Prefix 一定对应真实单词。直接学习连续向量p₁,p₂,…,pₘ ∈ Rᵈ。这样就把离散搜索问题变成了可以正常反向传播的连续优化问题。一句话总结Prefix Tuning 的关键一步就是Prompt Token 太难搜索 → 不找真实词了 → 直接学习连续 Prefix Vector。4. Prefix Tuning从离散 Prompt 到连续 Prefix这一页只讲一个变化离散 Token - 连续 Embedding原来要在词表里“找词”现在直接学习连续向量因此可以使用梯度下降优化。4.1 离散 Prompt 为什么难优化传统 Prompt 需要从词表中选择真实 Token例如w_i ∈ V。Token 是离散变量不能像普通参数一样直接做梯度下降。当词表很大、Prompt 很长时搜索空间会非常大。4.2 核心思路不再“找词”而是直接“学向量”Transformer 最终处理的是 Token 对应的 Embedding。因此可以跳过真实 Token 的选择直接学习连续向量e_1, e_2, ..., e_m ∈ R^k这些向量不需要对应真实单词可以看作Virtual Tokens虚拟 Token。4.3 为什么连续 Prefix 可以训练e_i是连续参数可以直接计算梯度。更新方式可以简单写成e_i - e_i - eta * dL/de_i原始 Transformer 参数保持Frozen训练时主要更新 Prefix 参数。4.4 核心变化寻找最优 Token - 学习最优连续向量Prefix Tuning 的关键思想就是不再寻找“哪个词最适合做 Prompt”而是直接学习“什么样的连续向量最能引导模型完成任务”。5. Prefix Tuning从输入层 Prompt 到各层 Prefix Activation总结这一页真正进入 Prefix Tuning 的核心不只在输入层前面加几个连续向量而是在 Transformer 的每一层都加入可学习的 Prefix 信息。5.1 前两种方法铺垫了什么第一种方法是直接搜索离散 Token也就是“找最合适的词”。第二种方法改成学习连续 Embedding也就是“找最合适的向量”。但第二种方法主要还是只在输入层前加入 Soft Prompt。5.2 真正的 Prefix Tuning 做了什么Prefix Tuning 更进一步给 Transformer 的每一层都加入 Prefix。也就是说不只是输入前有提示而是每一层都会直接拿到任务相关信息。可以简单理解为输入层加 Prefix - 各层都加 Prefix5.3 为什么它比只加输入 Prefix 更强如果 Prefix 只在输入层加入那么高层只能间接接收到任务信息。而 Prefix Tuning 让每一层都直接得到提示因此任务信号能贯穿整个 Transformer 深度。所以它对模型的控制能力更强也更接近真正的layer-wise task guidance分层任务引导。5.4 训练时更新什么原始 Transformer 参数保持Frozen。训练时主要更新各层 Prefix 参数P^1, P^2, ..., P^L。因此它仍然属于PEFT参数高效微调只增加少量参数但能有效适配新任务。一句话总结Prompt Tuning 是“在入口给提示”而 Prefix Tuning 是“在每一层 Attention 都给模型提示”。6. Prefix Tuning虚拟 Prefix 在各层如何工作6.1 整个序列分成哪几部分s_1, s_2, ..., s_mPrefix 的虚拟位置。x_1, x_2, ...真实任务输入。y_1, y_2, ...模型需要生成的目标序列。因此训练序列可以理解为[Prefix, Input x, Output y]6.2 第 i 层里哪些表示是可学习的Prefix 位置在第i层对应h_1^(i), h_2^(i), ..., h_m^(i)这些就是Prefix Activations前缀激活负责携带任务相关信息。而h_x^(i)、h_y^(i)是真实 Token 的 Hidden States由 Frozen Transformer 正常计算得到。6.3 Prefix 如何影响真实 Token在每一层 Attention 中真实 Token 都可以访问 Prefix 提供的任务信息。可以简单理解为K - [Prefix K ; Real K]V - [Prefix V ; Real V]因此 Prefix 就像一段虚拟的任务上下文持续影响后续 Token 的表示和生成。6.4 训练时到底更新什么Base Model 参数保持Frozen。只优化各层 Prefix 相关参数。不同任务可以使用不同 Prefix但共享同一个预训练模型。一句话总结Prefix Tuning 真正学习的不是“前面几个特殊 Token”而是这些虚拟 Prefix 在 Transformer 各层应该提供什么样的隐藏表示才能持续引导模型完成任务。7. Prefix TuningPrefix 不是越长越好7.1 Prefix Length 是什么Prefix 可以写成P [p_1, p_2, ..., p_m]。其中m就是Prefix Length前缀长度。m越大模型可以学习的任务相关上下文越多但新增参数也会更多。7.2 Prefix 变长后性能怎么变化Prefix 很短时任务信息不足模型效果较差。随着 Prefix Length 增加ROUGE、BLEU 等指标会明显提升。但达到一定长度后性能会逐渐进入平台期。太短 - 快速提升 - 边际收益下降 - 性能饱和7.3 为什么 Prefix 不能无限加长Prefix 越长Attention 需要处理的额外位置越多。因此会增加参数量、显存占用和推理延迟。当性能已经趋于饱和后继续增加 Prefix 往往收益很小甚至可能出现轻微下降。7.4 实际应该怎么选择Prefix Length 是一个Hyperparameter超参数。不同任务的最优长度不同例如 XSUM 可能需要更长 Prefix而 DART 较短 Prefix 就可能已经足够。更合理的原则是选择刚进入性能平台期附近的最小 Prefix Length一句话总结Prefix 不是越长越好真正需要找的是“效果已经够好同时计算成本还比较低”的那个长度。8. Prefix TuningTransformer 内部的 Prefix Activation8.1 序列由哪三部分组成训练时可以把整个序列理解为[Prefix, Input x, Output y]其中s_1, s_2, ..., s_m虚拟 Prefix 位置x_1, x_2, ...真实任务输入y_1, y_2, ...模型需要生成的目标输出Prefix 本身不是实际任务内容而是专门用来承载任务提示信息的位置。8.2 第 i 层中哪些表示是可学习的Prefix 在 Transformer 第i层对应一组隐藏表示h_1^(i), h_2^(i), ..., h_m^(i)这些就是Prefix Activations前缀激活属于任务相关的可学习表示。而真实 Token 对应的h_x^(i), h_y^(i)仍然由 Frozen Transformer 正常前向传播计算得到。简单理解Prefix Hidden States - 额外学习Real Token Hidden States - Frozen LM 正常计算8.3 Prefix 如何影响真实 Token在每一层 Attention 中真实 Token 不仅能够访问正常文本的 Key / Value还能够访问 Prefix 提供的信息。可以简单理解成K [Prefix K ; Real K]V [Prefix V ; Real V]因此 Prefix 就像一段虚拟的任务上下文让x和y在 Transformer 的不同层都能获得任务提示。8.4 训练时到底更新什么原始 Transformer 参数保持Frozen冻结。只优化各层 Prefix 相关参数。不同任务可以学习不同 Prefix但共享同一个 Base Model。例如Translation - Translation PrefixSummary - Summary PrefixTable-to-text - Table Prefix一句话总结Prefix Tuning 真正学习的不是“前面几个特殊 Token”而是这些虚拟 Prefix 在 Transformer 各层应该提供什么样的隐藏表示才能持续引导模型完成当前任务。9. Prefix Tuning 与 Infix-tuning位置也会影响效果9.1 两种方法的序列位置不同Prefix Tuning[P, x, y]Infix-tuning[x, P, y]两者都使用可学习 Prefix但插入位置不同。9.2 为什么 Prefix 能更早影响模型Decoder-only 模型使用Causal Attention因果注意力Token 只能看到自己和左边的信息。在[P, x, y]中输入x从一开始就能看到 Prefix。因此 Prefix 可以同时影响输入理解 输出生成9.3 Infix 有什么限制在[x, P, y]中Prefix 位于x后面。因此x无法看到未来位置的 Infix也就无法被它反向影响。Infix 主要是在输入已经处理之后再去影响后续y的生成。9.4 为什么标准 Prefix 往往更好Prefix 更早进入模型任务信息从处理输入阶段就开始参与计算。Infix 出现得更晚控制范围相对更局部。因此实验中通常可以看到Prefix Tuning Infix-tuning一句话总结Prefix 不只是“学什么”还要看“放在哪里”放在最前面往往能更早、更全面地引导整个模型。10. Adapter Tuning在每层插入小型适配器10.1 Adapter 插在哪里Adapter 不会替换原来的 Attention 或 FFN而是作为一个额外的小模块插入 Transformer Layer。常见做法是在 Attention 和 FFN 附近分别加入 Adapter。原始 Transformer 参数保持Frozen冻结训练时主要更新 Adapter。10.2 Adapter 内部是什么结构Adapter 采用典型的Bottleneck瓶颈结构d - k - d其中dTransformer 原来的 Hidden Dimensionk较小的 Bottleneck Dimension满足k d先把高维特征压缩再经过非线性激活最后恢复到原来的维度。10.3 为什么参数量很小Down Projectiond - kUp Projectionk - d因此主要参数量约为2 * d * k因为k d所以 Adapter 的参数远小于完整的d * d权重矩阵。10.4 Adapter 最核心的作用是什么Adapter 可以理解成h h Adapter(h)也就是保留原来的隐藏表示h再额外学习一个很小的任务修正。因此不同任务只需要保存不同的 Adapter而 Base Model 可以一直复用。一句话总结Adapter Tuning 就是“模型主体不动在每层插一个小型 Bottleneck 网络用很少参数学习任务差异”。11. Adapter Tuning为什么初始化时要接近恒等映射11.1 Adapter 本质上是在学习一个小修正Adapter 通过残差连接作用在原始隐藏表示h上h h Adapter(h)也可以写成h h Δh其中Δh就是 Adapter 学到的任务特定修正。11.2 为什么初始化时要让 Δh 接近 0如果 Adapter 一开始输出很大的随机值就会直接扰乱预训练模型原本已经学好的表示。因此初始化时希望Δh ≈ 0于是h ≈ h也就是刚插入 Adapter 时整个网络仍然接近原来的预训练模型。11.3 Adapter 内部如何做到这一点Adapter 仍然采用 Bottleneck 结构d - k - d具体过程可以理解为h - Down Projection - Nonlinearity - Up Projection - Δh初始化的核心不是要求所有参数都严格等于 0而是让整个 Adapter 分支的最终输出足够小。11.4 和 LoRA 的初始化思想有什么关系LoRA 希望刚开始ΔW ≈ 0从而W ΔW ≈ WAdapter 则希望Δh ≈ 0从而h Δh ≈ h两者的共同思想都是新增模块一开始先不要破坏原模型之后再通过训练逐渐学习任务差异。一句话总结Adapter 的初始化目标就是让整个新增模块近似 Identity恒等映射刚插进去时先“什么都别做”训练以后再慢慢学会怎么修正模型。12. Adapter Tuning推理阶段为什么会有额外开销12.1 为什么 Adapter 会增加推理开销Adapter 是真正插进 Transformer 计算路径里的额外模块。推理时仍然需要经过Down Projection - Nonlinearity - Up Projection如果每层都插 Adapter整个网络就会增加额外的矩阵乘法、激活计算和串行路径。12.2 为什么 Adapter 不能像 LoRA 一样直接合并Adapter 的计算是h h W_up * sigma(W_down * h)其中存在Nonlinearity非线性激活sigma。因此一般不能把整个 Adapter 简单改写成一个固定的新权重矩阵也就不能直接 Merge 回原来的 Transformer。12.3 LoRA 为什么可以 MergeLoRA 的低秩分支是线性的ΔW B * A训练时Wx BAx可以写成(W BA)x所以训练结束后可以直接得到W_hat W BA推理时仍然只需要一个普通 Linear Layer不必继续保留额外 LoRA 分支。12.4 两者最核心的工程区别Adapter参数少但新增串行网络推理路径会变长。LoRA训练时增加低秩分支但部署前可以 Merge 回原权重。因此 Adapter 的一个主要局限就是Inference Latency ↑一句话总结Adapter 是“训练省参数但推理时多走一段路”LoRA 是“训练时多一条分支但部署时可以把分支融回原权重”。
返回列表