PEFT 文档
适配器
并获得增强的文档体验
开始使用
适配器
基于适配器的方法通过在一个冻结的预训练模型中的注意力和全连接层之后添加额外的可训练参数,从而减少内存使用并加速训练。具体方法因适配器而异,可能只是简单地增加一个额外的层,也可能是将权重更新 ∆W 表示为权重矩阵的低秩分解。无论哪种方式,适配器通常都很小,但能表现出与完全微调模型相当的性能,并且能用更少的资源训练更大的模型。
本指南将简要介绍 PEFT 支持的各种适配器方法(如果您对特定方法的更多细节感兴趣,请查阅链接的论文)。
低秩适配 (LoRA)
LoRA 是最受欢迎的 PEFT 方法之一,如果你刚开始接触 PEFT,它是一个很好的起点。它最初是为大型语言模型开发的,但由于其高效性和有效性,它现在是扩散模型中非常流行的训练方法。
正如前面简要提到的,LoRA 是一种在消耗更少内存的同时加速大型模型微调的技术。
LoRA 通过低秩分解,用两个较小的矩阵(称为*更新矩阵*)来表示权重更新 ∆W。这些新矩阵可以被训练以适应新数据,同时保持总参数数量较低。原始权重矩阵保持冻结,不接收任何进一步的更新。为了产生最终结果,原始权重和额外的适配权重会结合在一起。你也可以将适配器权重与基础模型合并,以消除推理延迟。

这种方法有许多优点:
- LoRA 通过大幅减少可训练参数的数量,使微调更高效。
- 原始预训练权重保持冻结,这意味着你可以为各种下游任务构建多个轻量级、可移植的 LoRA 模型。
- LoRA 与其他参数高效方法是正交的,并且可以与其中许多方法结合使用。
- 使用 LoRA 微调的模型的性能与完全微调模型的性能相当。
原则上,LoRA 可以应用于神经网络中任何权重矩阵子集,以减少可训练参数的数量。然而,为了简化和进一步提高参数效率,LoRA 通常只应用于 Transformer 模型中的注意力块。LoRA 模型中可训练参数的数量取决于更新矩阵的大小,这主要由秩 `r` 和原始权重矩阵的形状决定。

LoRA 专家混合 (X-LoRA)
X-LoRA 是一种针对 LoRA 的专家混合方法,通过使用密集或稀疏门控来动态激活 LoRA 专家。在训练期间,LoRA 专家以及基础模型都保持冻结,因此只有门控层需要训练,从而导致参数数量较低。具体来说,门控层输出缩放值,这些缩放值(根据配置)在层级和词元级上是细粒度的。此外,在推理过程中,X-LoRA 会动态激活 LoRA 适配器来回忆知识并有效地混合它们。
下图展示了对于不同提示,每个词元的缩放值如何变化。这突显了随着生成过程的进行和序列创建新上下文时,不同适配器的激活情况。
在每一步中,X-LoRA 需要运行两次基础模型:第一次,获取没有任何 LoRA 适配器时的隐藏状态;第二次,使用隐藏状态计算缩放值,将这些缩放值应用于 LoRA 适配器,然后再次运行模型。第二次运行的输出即为该模型步骤的结果。
最终,由于其双重前向传递机制,X-LoRA 允许模型反思其知识,并动态地重新配置架构。
低秩哈达玛积 (LoHa)
低秩分解可能会影响性能,因为权重更新被限制在低秩空间内,这可能会限制模型的表达能力。然而,你并不希望使用更大的秩,因为它会增加可训练参数的数量。为了解决这个问题,LoHa(一种最初为计算机视觉开发的方法)被应用于扩散模型,其中生成多样化图像的能力是一个重要考虑因素。LoHa 也应该适用于通用模型类型,但目前 PEFT 尚未实现嵌入层。
LoHa 使用哈达玛积(逐元素乘积)代替矩阵乘积。∆W 由四个较小的矩阵表示,而不是像 LoRA 中那样用两个,并且每对低秩矩阵都通过哈达玛积进行组合。结果是,∆W 可以在拥有相同数量的可训练参数的情况下,具有更高的秩和表达能力。
低秩克罗内克积 (LoKr)
LoKr 与 LoRA 和 LoHa 非常相似,主要应用于扩散模型,但你也可以将它用于其他模型类型。LoKr 用克罗内克积来代替矩阵乘积。克罗内克积分解会创建一个块矩阵,保留了原始权重矩阵的秩。克罗内克积的另一个好处是它可以通过堆叠矩阵的列来进行向量化。这可以加快处理速度,因为你避免了完全重构 ∆W。
正交微调 (OFT)

OFT 是一种主要关注在微调模型中保留预训练模型生成性能的方法。它试图保持层内所有神经元对之间的余弦相似度(超球面能量)不变,因为这能更好地捕捉神经元之间的语义信息。这意味着 OFT 更能保留主题,更适合可控生成(类似于 ControlNet)。
OFT 通过学习神经元的正交变换来保持超球面能量不变,从而使它们之间的余弦相似度保持不变。在实践中,这意味着将一个正交矩阵与预训练权重矩阵进行矩阵乘积。然而,为了实现参数高效,这个正交矩阵被表示为一个具有秩为 `r` 的块的块对角矩阵。LoRA 通过低秩结构减少可训练参数的数量,而 OFT 则通过稀疏的块对角矩阵结构减少可训练参数的数量。
正交蝶形 (BOFT)
BOFT 是一种主要关注在微调模型中保留预训练模型生成性能的方法。它试图保持层内所有神经元对之间的余弦相似度(超球面能量)不变,因为这能更好地捕捉神经元之间的语义信息。这意味着 OFT 更能保留主题,更适合可控生成(类似于 ControlNet)。
OFT 通过学习神经元的正交变换来保持超球面能量不变,从而使它们之间的余弦相似度保持不变。在实践中,这意味着将一个正交矩阵与预训练权重矩阵进行矩阵乘积。然而,为了实现参数高效,这个正交矩阵被表示为一个具有秩为 `r` 的块的块对角矩阵。LoRA 通过低秩结构减少可训练参数的数量,而 OFT 则通过稀疏的块对角矩阵结构减少可训练参数的数量。
自适应低秩适配 (AdaLoRA)
AdaLoRA 通过为那些更能适应任务的重要权重矩阵分配更多参数(即更高的秩 `r`),并剪枝掉不太重要的矩阵,来管理 LoRA 引入的参数预算。秩的控制是通过一种类似于奇异值分解(SVD)的方法实现的。∆W 用两个正交矩阵和一个包含奇异值的对角矩阵进行参数化。这种参数化方法避免了迭代应用 SVD,后者计算成本很高。基于这种方法,∆W 的秩会根据一个重要性分数进行调整。∆W 被分成三元组,每个三元组根据其对模型性能的贡献进行评分。重要性分数低的三元组被剪枝,而重要性分数高的三元组则保留用于微调。
使用 AdaLoRA 进行训练分为三个阶段:初始化阶段、预算阶段和最终阶段。在初始化阶段,不应用预算,因此秩保持不变。在预算阶段,应用上述过程,根据预算重新分配秩,目标是为更重要的适配器分配更高的秩,为不重要的层分配更低的秩。当进入最终阶段时,预算分配结束,秩已重新分配,但我们可能会继续用重新分配的秩训练一段时间,以进一步提高性能。
Llama-Adapter
Llama-Adapter 是一种将 Llama 适配为指令跟随模型的方法。为了帮助模型适应指令跟随,该适配器使用了一个包含 52K 指令-输出对的数据集进行训练。
一组可学习的适配提示被前置到输入指令词元中。这些提示被插入到模型的较高层,因为利用预训练模型更高层次的语义进行学习效果更好。前置到输入的指令-输出词元引导适配提示生成上下文相关的响应。

为了避免给词元增加噪声,该适配器使用零初始化的注意力。除此之外,适配器还增加了一个可学习的门控因子(初始化为零),以便在训练过程中逐步向模型添加信息。这可以防止新学习到的指令淹没模型预训练的知识。
Householder 反射适配 (HRA)
HRA 提供了一个连接 LoRA 和 OFT 的新视角,这意味着它可以利用这两种策略的优势,减少参数和计算成本,同时惩罚预训练知识的损失。

HRA 构建了一个由 `r` 个可训练的 Householder 反射 (HR) 组成的链。因为 Householder 反射矩阵是正交矩阵,而正交矩阵的乘积也是正交矩阵,所以 HRA 满足正交微调 (OFT) 的理论保证。同时,HRA 也可以通过重写公式被看作是一种低秩微调适配器。
r
越高,可训练的参数就越多,从而带来更大的模型容量和更好的性能。此外,由于链式结构,HR 平面的正交性影响了 HRA 的容量和正则性。为了在模型容量和正则性之间取得平衡,我们在损失函数中增加了一个 HR 平面的正交性正则化器。权重可以控制正则化器的强度。
Bone
MiSS 论文新版本 (MiSS: Balancing LoRA Performance and Efficiency with Simple Shard Sharing)。如果你已经有了一个 Bone 检查点,可以使用 `/scripts/convert-bone-to-miss.py` 将其转换为 MiSS 检查点,然后继续使用 MiSS 进行训练。
MiSS
MiSS MiSS (Matrix Shard Sharing) 是一种新颖的参数高效微调(PEFT)方法,旨在解决大型语言模型中适应性和效率之间的权衡问题。MiSS 的核心方法涉及一个简单的分片共享机制。它通过将权重矩阵分解为多个片段,然后利用一个共享的、可训练的“公共片段”来实现低秩适配。最终的低秩更新矩阵是通过复制这些共享的分区片段来构建的。(MiSS 是一种采用低秩结构的新型 PEFT 方法,仅需一个可训练矩阵,并引入了不同于 LoRA 的新更新机制,在性能和效率之间实现了极佳的平衡。)
MiSS:通过简单的分片共享平衡 LoRA 的性能和效率直观地看,MiSS 中单个可训练矩阵的形状与 `lora_B` 一致,因此 MiSS 中的 `r` 参数比 LoRA 中的 `r` 参数少 ( `in_feature * r` )。
注意:Bat 的 r (b) 很特殊,要求权重 W 满足 `in_features % r == 0` 和 `out_features % r == 0` 的条件。此外,当 `in_features == out_features` 且 MiSS 的 r 等于 LoRA 的 r 时,MiSS 的可训练参数数量仅为 LoRA 的一半。
虽然 Bat 的非线性更新带来了一些性能提升,但也增加了计算开销。其主要目的是为研究人员提供一个改进方向。因此,我们推荐微调综合性的 MiSS 模型。
< > 在 GitHub 上更新