目录
- 4.2 参数附加方法
- 4.2.1 加在输入
- 4.2.2 加在模型
- 1)Prefix-tuning(前缀微调)
- 2)Adapter-tuning(适配器微调)
- 3)AdapterFusion(适配器融合)
- 4.2.3 加在输出
4.2 参数附加方法
参数附加方法通过增加新的参数或模块对大语言模型进行微调,按附加位置分为三类:
-
加在输入、
-
加在模型、
-
加在输出。
.
4.2.1 加在输入
加在输入的方法:
- 将额外参数附加到模型的输入嵌入(Embedding)中,最经典的方法是 Prompt-tuning。
Prompt-tuning通过在模型输入中引入可微分的连续张量即软提示(Soft prompt),与文本数据一起输入模型,微调时仅更新软提示参数,达到参数高效微调目的。
给定输入文本序列,经嵌入层转化成输入嵌入矩阵X,引入软提示嵌入矩阵P,将P与X拼接成新矩阵[P;X],输入Transformer模型,通过反向传播最大化输出概率似然训练模型,且仅更新软提示参数P。
图 4.3: Prompt-tuning 示意图
软提示长度通常在1到200之间,20以上有性能保证。
软提示初始化对性能有影响,使用词表中的 token 或在分类任务中用类名进行初始化会优于随机初始化。
Prompt-tuning最初为自动学习提示词,而非参数高效微调。
前面介绍的常见提示工程是硬提示(Hard prompt),大语言模型输出质量依赖提示词构建,找最佳提示词费时,故采用可微分方式通过反向传播自动优化提示词更有效。
Prompt-tuning优势:
-
内存效率高,显著降低内存需求,如T5-XXL模型经Prompt-tuning后参数量大幅减少;
-
多任务能力,单一冻结模型可适应多任务,只需存储小的任务提示模块,还能混合任务推理;
-
缩放特性好,模型参数量增加时性能增强,10B参数量下性能接近全参数微调。
.
4.2.2 加在模型
加在模型的方法:
-
将额外的参数或模型添加到预训练模型的隐藏层中。
-
经典的方法有:Prefix-tuning(前缀微调)、Adapter-tuning(适配器微调) 和 AdapterFusion(适配器融合)。
1)Prefix-tuning(前缀微调)
Prefix-tuning 将一系列连续的可训练前缀(Prefixes,即 Soft-prompt)插入到输入嵌入以及 Transformer 注意力模块中。
图 4.4: Prefix-tuning 示意图
Prefix-tuning引入可学习向量Pk和Pv,添加到Transformer的键K和值V前,但存在参数更新不稳定、优化难收敛的问题。实际应用中,输入Transformer前需经多层感知机(MLP)重参数化,训练参数包括MLP和前缀矩阵,训练后丢弃MLP参数,仅保留前缀参数。
- MLP重参数化的作用:是通过MLP对前缀参数进行处理,生成更适合Transformer模型的参数形式,有助于优化过程的稳定性和模型的最终性能。
Prefix-tuning有三大优势:
-
参数效率:只有前缀参数在微调过程中被更新,这显著减少了训练参数量;
-
任务适应性:前缀参数可以针对不同的下游任务进行定制,微调方式灵活;
-
保持预训练知识:由于预训练模型的原始参数保持不变,Prefix-tuning 能够保留预训练过程中学到的知识。
.
2)Adapter-tuning(适配器微调)
Adapter-tuning 向预训练语言模型中插入新的可学习的神经网络模块,称为适配器(Adapter)。
图 4.5: Adapter-tuning 示意图
适配器采用瓶颈结构,包含下投影层、非线性映射和上投影层。下投影层将信息压缩到低维表示,经非线性映射后,上投影层将其扩展回原始维度。
Adapter-tuning 在 Transformer 的每一个多头注意力层(Multi-head Attention Layer)和全连接层(Feed-forward Network Layer)之后添加适配器。
与 Transformer 的全连接层不同,由于采用了瓶颈结构,适配器的隐藏维度通常比输入维度小。
.
Adapter-tuning 适配器公式
适配器模块由下投影矩阵 W d ∈ R d × r W_d \in \mathbb{R}^{d \times r} Wd∈Rd×r、上投影矩阵 W u ∈ R r × d W_u \in \mathbb{R}^{r \times d} Wu∈Rr×d 及残差连接组成,其计算公式为:
A ( l ) = σ ( W d ∗ H ( l − 1 ) ) W u + H ( l − 1 ) A^{(l)} = \sigma(W_d * H^{(l-1)}) W_u + H^{(l-1)} A(l)=σ(Wd∗H(l−1))Wu+H(l−1)
其中:
-
σ ( ⋅ ) \sigma(\cdot) σ(⋅) 是激活函数(如 ReLU 或 Sigmoid)
-
A ( l ) A^{(l)} A(l) 是适配器的输出
-
H ( l − 1 ) H^{(l-1)} H(l−1) 是第 (l-1) 层的隐藏状态
适配器中,下投影矩阵将 d 维输入压缩到低维 r,上投影矩阵再将其投回 d 维。因此,每层总参数量为 2dr + d + r,设置 r ≪ d 可减少任务参数量。
适配器模块可设计得更复杂,如多投影层、不同激活函数和参数初始化。Adapter-tuning 变体包括调整模块位置和剪枝等策略,以减少可训练参数。
.
3)AdapterFusion(适配器融合)
Adapter-tuning 通过适配器参数学习单个任务知识,无需更新预训练模型。若要结合多任务知识,可“融合”(Fusion)多个适配器参数。AdapterFusion 提出两阶段学习法:知识提取和知识组合。
AdapterFusion 的两阶段步骤如下:
(1)知识提取: 对每个任务分别训练适配器模块,学习特定任务的知识。该阶段有两种训练方式:
-
Single-Task Adapters (ST-A):独立优化每个任务的适配器,互不干扰。
-
Multi-Task Adapters (MT-A):联合优化多个任务的适配器。
(2)知识组合:
-
引入融合模块,搜索多个任务适配器的最优组合,实现任务泛化。
-
该阶段,语言模型的参数以及 N 个适配器的参数被固定,仅微调 AdapterFusion 模块的参数。
.
AdapterFusion 公式:
在知识组合阶段,AdapterFusion 引入融合模块,通过优化以下损失函数来搜索多个任务适配器模块的最优组合:
Ψ ← a r g m i n Ψ L n ( D n ; Θ , Φ 1 , … , Φ N , Ψ ) \Psi \leftarrow argmin_{\Psi} L_n(D_n; \Theta, \Phi_1, \ldots, \Phi_N, \Psi) Ψ←argminΨLn(Dn;Θ,Φ1,…,ΦN,Ψ)
其中:
-
L n L_n Ln 是第 n 个任务的损失函数
-
D n D_n Dn 是第 n 个任务的训练数据
-
Θ \Theta Θ 表示预训练模型参数
-
Φ i \Phi_i Φi 表示第 i 个任务的适配器模块参数
-
Ψ \Psi Ψ 是融合模块参数
图 4.6: AdapterFusion 示意图
AdapterFusion 模块每层包含可学习的 Key、Value 和 Query 投影矩阵。全连接层输出作为 Query,适配器输出作为 Key 和 Value,计算注意力得到联合多个适配器的输出结果。此外,在不同的适配器模块间参数共享融合模块,可以进一步减少参数数量。
.
4.2.3 加在输出
在微调大语言模型时,面临模型参数庞大(如LLaMA最大模型有70B参数)和无法访问模型权重(黑盒模型)的问题。
为解决这些问题,代理微调(Proxy-tuning)提出一种轻量级解码时(Decoding-time)算法,允许在不直接修改模型权重、仅访问模型输出词汇表预测分布的情况下,实现对大语言模型的定制化调整。
图 4.7: Proxy-tuning 示意图
如图所示,在代理微调中,给定代理模型 M M M 和较小的反专家模型 M − M^{-} M−,二者词汇表需相同。微调 M − M^{-} M− 得到专家模型 M + M^{+} M+。在自回归生成每步中,计算 M + M^{+} M+ 和 M − M^{-} M− 的 logits 分布差异,并将其加到 M M M 下一词预测的 logits 分布中。
.
Proxy-tuning公式:
在代理微调中,给定代理模型 M \mathcal{M} M、专家模型 M + \mathcal{M}^+ M+ 和反专家模型 M − \mathcal{M}^- M−,针对每一时间步 t 的输入序列 x < t x_{<t} x<t,从三个模型中获取输出分数 s M , s M + , s M − s_{\mathcal{M}}, s_{\mathcal{M}^+}, s_{\mathcal{M}^-} sM,sM+,sM−。通过以下公式调整目标模型的输出分数 s ~ \tilde{s} s~:
s ~ = s M + s M + − s M − \tilde{s} = s_{\mathcal{M}} + s_{\mathcal{M}^+} - s_{\mathcal{M}^-} s~=sM+sM+−sM−
然后,使用 softmax 函数对其进行归一化,得到输出概率分布:
p M ~ ( X t ∣ x < t ) = softmax ( s ~ ) p_{\tilde{\mathcal{M}}}(X_t | x_{<t}) = \text{softmax}(\tilde{s}) pM~(Xt∣x<t)=softmax(s~)
最后,在该分布中采样得到下一个词的预测结果。
在实际使用中,专家模型通常较小(如LLaMA-7B),而代理模型较大(如LLaMA-13B或70B)。通过代理微调,将小模型的知识以解码时约束的方式迁移到大模型中,节省计算成本,且适用于黑盒模型。
.
其他参考:【大模型基础_毛玉仁】系列文章
声明:资源可能存在第三方来源,若有侵权请联系删除!