Llama-Adapter
Llama-Adapter 是一种专门为将 Llama 转换为指令遵循模型而设计的 PEFT 方法。Llama 模型被冻结,并且只学习一组添加到输入指令标记之前的适配提示。由于插入模型中的随机初始化模块会导致模型丢失一些现有的知识,因此 Llama-Adapter 使用零初始化注意力和零门控来逐步将指令提示添加到模型中。
论文的摘要是
我们提出了 LLaMA-Adapter,这是一种轻量级的适配方法,可以有效地将 LLaMA 微调为指令遵循模型。使用 52K 自指令演示,LLaMA-Adapter 在冻结的 LLaMA 7B 模型上仅引入了 120 万个可学习参数,并在 8 个 A100 GPU 上的微调成本不到一个小时。具体来说,我们采用了一组可学习的适配提示,并在较高级别的转换器层中将其添加到输入文本标记之前。然后,提出了一种零初始化注意力机制和零门控,该机制自适应地将新的指令提示注入到 LLaMA 中,同时有效地保留其预训练的知识。通过高效的训练,LLaMA-Adapter 生成的响应质量很高,与完全微调的 7B 参数的 Alpaca 相当。此外,我们的方法可以简单地扩展到多模态输入,例如图像,用于图像条件下的 LLaMA,在 ScienceQA 上实现了优越的推理能力。我们在 https://github.com/ZrrSkywalker/LLaMA-Adapter 发布了我们的代码。
.自适应提示配置
类 peft.AdaptionPromptConfig
< 源代码 >( peft_type: Union = None auto_mapping: Optional = None base_model_name_or_path: Optional = None revision: Optional = None task_type: Union = None inference_mode: bool = False target_modules: str = None adapter_len: int = None adapter_layers: int = None )
存储 AdaptionPromptModel 的配置。
自适应提示模型
实现了如 https://arxiv.org/pdf/2303.16199.pdf 中所述的自适应提示。
将最顶层的 L 个注意力模块替换为自适应注意力模块,这些模块包装了原始模块,但插入了带门的可训练提示(用于零初始化)。
关于多适配器模式的说明
- 我们通过维护一个由适配器名称索引的自适应注意力模块字典来存储不同适配器的状态。
- 每次我们切换适配器时,都会从模型中移除当前活动适配器的模块,将它们存储在字典中,并用新适配器的模块替换它们。
- 为了避免重复和可能不一致的状态,当前活动适配器始终从字典中移除。
- 禁用适配器也会导致模块从模型中移除。
添加具有给定名称和配置的适配器。
通过交换自适应注意力模块来禁用适配器层。
通过交换缓存的自适应注意力模块来启用适配器层。
将模型设置为使用具有给定名称的适配器。