重要提示
您正在查看 NeMo 2.0 文档。此版本引入了 API 的重大更改和一个新的库 NeMo Run。我们目前正在将 NeMo 1.0 中的所有功能移植到 2.0。有关先前版本或 2.0 中尚不可用的功能的文档,请参阅 NeMo 24.07 文档。
支持的 PEFT 方法#
NeMo 支持以下 PFET 调优方法
适配器(规范):用于 NLP 的参数高效迁移学习
适配器(Houlsby 设置)是最早应用于 NLP 的 PEFT 方法之一。适配器调优比完全微调更有效,因为基础模型权重被冻结,而只有少量适配器模块权重被更新。在这种方法中,通过残差连接将具有瓶颈和非线性激活的两个线性层插入到每个 Transformer 层中。在每种情况下,输出线性层都初始化为 0,以确保未训练的适配器不会影响 Transformer 层的正常前向传递。
在 NeMo 中,您可以自定义适配器瓶颈维度、适配器 dropout 量以及归一化层的类型和位置。
LoRA:LoRA:大型语言模型的低秩自适应
LoRA 通过使用两个低秩分解矩阵表示权重更新,从而提高微调效率。原始模型权重保持冻结,而低秩分解矩阵被更新以适应新数据,因此可训练参数的数量保持较低。与适配器相比,原始模型权重和自适应权重可以在推理期间组合,从而避免在推理时模型中出现任何架构更改或额外的延迟。
在 NeMo 中,您可以自定义适配器瓶颈维度和应用 LoRA 的目标模块。LoRA 可以应用于任何线性层。在 Transformer 模型中,这包括 1) Q、K、V 注意力投影,2) 注意力输出层,以及 3) 两个 Transformer MLP 层中的一个或两个。对于 QKV,NeMo 的注意力实现将 QKV 融合到单个投影中,因此我们的 LoRA 实现为组合的 QKV 学习单个低秩投影。
-
IA3 通过使用学习向量重新缩放激活来提高微调效率。重新缩放层被注入到基础模型中的注意力(对于键和值)和前馈模块中。与其他 PEFT 方法类似,只有重新缩放向量在微调期间被更新以适应新数据,因此更新参数的数量很少。然而,由于重新缩放向量远小于低秩矩阵 (LoRA) 和瓶颈层(适配器),IA3 将可训练参数的数量进一步减少一个数量级。学习重新缩放向量也可以与基础权重合并,从而在推理时不会导致架构更改和额外的延迟。
IA3 适配器没有需要调整的超参数。
P-Tuning:GPT 也理解
P-tuning 是提示学习方法系列的一个示例,其中可训练的虚拟 token 被插入到模型输入提示中,以诱导其执行任务。虚拟 token(也称为“连续”或“软”token)是没有具体映射到模型词汇表中的字符串或字符的嵌入。它们只是与构成模型词汇表的真实 token 的维度匹配的 1D 向量。
在 p-tuning 中,使用中间 MLP 模型来生成虚拟 token 嵌入。我们将此中间模型称为
prompt_encoder
。提示编码器参数在 p-tuning 开始时随机初始化。所有基础模型参数都被冻结,并且仅在每个训练步骤更新提示编码器权重。在 Nemo 中,您可以自定义虚拟 token 的数量,以及嵌入和 MLP 瓶颈维度。