PEFT 文档

适配器

Hugging Face's logo
加入 Hugging Face 社区

并获得增强型文档体验

开始使用

适配器

基于适配器的方法在冻结的预训练模型的注意力和全连接层之后添加额外的可训练参数,以减少内存使用量并加快训练速度。 该方法根据适配器而有所不同,它可以简单地是一个额外的添加层,也可以将权重更新 ∆W 表达为权重矩阵的低秩分解。 无论哪种方式,适配器通常很小,但展示了与完全微调模型相当的性能,并能够使用更少的资源训练更大的模型。

本指南将简要概述 PEFT 支持的适配器方法(如果您有兴趣了解有关特定方法的更多详细信息,请查看链接的论文)。

低秩适应 (LoRA)

LoRA 是最受欢迎的 PEFT 方法之一,也是您开始使用 PEFT 的良好起点。 它最初是为大型语言模型开发的,但由于其效率和有效性,它也是扩散模型的一种非常流行的训练方法。

如前所述,LoRA 是一种技术,它可以在消耗更少内存的情况下加速大型模型的微调。

LoRA 通过低秩分解将权重更新 ∆W 表示为两个较小的矩阵(称为*更新矩阵*)。这些新矩阵可以在保持参数总数较低的情况下训练以适应新数据。原始权重矩阵保持冻结,不会接收任何进一步更新。为了生成最终结果,原始权重和额外的适应权重将被合并。您还可以将适配器权重与基本模型合并以消除推理延迟。

这种方法具有许多优势

  • LoRA 通过大幅减少可训练参数数量,使微调更高效。
  • 原始预训练权重保持冻结,这意味着您可以基于它们构建多个轻量级且可移植的 LoRA 模型,用于各种下游任务。
  • LoRA 与其他参数高效方法正交,可以与其中许多方法结合使用。
  • 使用 LoRA 微调的模型的性能与完全微调模型的性能相当。

原则上,LoRA 可以应用于神经网络中权重矩阵的任何子集,以减少可训练参数的数量。但是,为了简单起见并进一步提高参数效率,LoRA 通常仅应用于 Transformer 模型中的注意力块。LoRA 模型中可训练参数的数量取决于更新矩阵的大小,该大小主要由秩r和原始权重矩阵的形状决定。

导航文本到图像定制:从 LyCORIS 微调到模型评估

LoRA 专家混合(X-LoRA)

X-LoRA 是一种针对 LoRA 的专家混合方法,它通过使用密集或稀疏门控来动态激活 LoRA 专家。LoRA 专家以及基本模型在训练期间保持冻结,导致参数计数较低,因为仅需要训练门控层。特别地,门控层输出比例,这些比例(取决于配置)在层和标记级别上是细粒度的。此外,在推理期间,X-LoRA 动态激活 LoRA 适配器以回忆知识并有效地混合它们

以下图形演示了每个标记的不同提示如何改变比例。这突出了在生成过程中激活不同的适配器,以及序列如何创建新的上下文。

Token-by-token scalings

对于每一步,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,而 SVD 计算量很大。基于此方法,∆W 的秩根据重要性得分进行调整。∆W 被分成三元组,每个三元组根据其对模型性能的贡献进行评分。重要性得分低的三元组被剪枝,而重要性得分高的三元组被保留用于微调。

Llama-Adapter

Llama-Adapter 是一种将 Llama 转换为指令跟随模型的方法。为了帮助模型适应指令跟随,适配器使用 52K 个指令-输出数据集进行训练。

一组可学习的适配提示被添加到输入指令标记之前。这些提示被插入到模型的上层,因为在预训练模型的更高层语义中学习效果更好。添加到输入的指令-输出标记引导适配提示生成上下文响应。

LLaMA-Adapter:使用零初始化注意力对语言模型进行高效微调

为了避免向标记添加噪声,适配器使用零初始化注意力。除此之外,适配器还添加了一个可学习的门控因子(用零初始化),以在训练期间逐步向模型添加信息。这可以防止模型的预训练知识被新学习的指令淹没。

< > 更新 on GitHub