Polytropon
Polytropon 是一个多任务模型,其“库存”中包含多个不同的 LoRA 适配器。该模型使用路由函数来学习库存中适配器的正确组合,以选择最适合特定任务的模块子集。PEFT 还支持 多头适配器路由 (MHR) 用于 Polytropon,该功能在路由函数的基础上构建并改进,通过更细粒度地组合适配器头来实现。适配器头被分成不相交的块,每个块学习不同的路由函数,从而提高表达能力。
论文摘要如下
模块化设计鼓励神经模型解开和重新组合知识的不同方面,以便更系统地推广到新的任务。在这项工作中,我们假设每个任务都与来自(潜在的小)库存的潜在离散技能子集相关联。反过来,技能对应于参数效率(稀疏/低秩)模型参数化。通过共同学习这些参数和任务-技能分配矩阵,每个任务的网络被实例化为活动技能参数的平均值。为了有利于跨任务的技能的非平凡软分区,我们尝试了一系列归纳偏差,例如印度自助餐过程先验和两速学习率。我们在两个主要设置上评估了我们的潜在技能模型:1)基于 BabyAI 平台的 8 个级别的基础指令遵循的多任务强化学习;以及 2)在 CrossFit 上预训练的文本到文本生成模型的少样本适应,CrossFit 是一个包含 160 个 NLP 任务的基准。我们发现,与具有完全共享、特定于任务或条件生成的知识跨任务纠缠的参数的基线相比,网络的模块化设计显着提高了强化学习中的样本效率和监督学习中的少样本泛化。此外,我们展示了离散技能如何帮助可解释性,因为它们产生了任务的显式层次结构。
PolyConfig
class peft.PolyConfig
< source >( 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 r: int = 8 target_modules: Union = None modules_to_save: Optional = None init_weights: bool = True poly_type: Literal = 'poly' n_tasks: int = 1 n_skills: int = 4 n_splits: int = 1 )
参数
- r (
int
) — Poly 中每个 Lora 的注意力维度。 - target_modules (
Union[List[str],str]
) — 要应用 Poly 的模块名称。 - modules_to_save (
List[str]
) — 除 Poly 层之外,在最终检查点中设置为可训练并保存的模块列表。 - init_weights (bool) — 是否执行 Poly 权重的初始化。
- poly_type (
Literal["poly"]
) — 要使用的 Poly 模块的变体。目前,只支持“poly”。 - n_tasks (
int
) — 多任务场景中的任务数量。 - n_skills (
int
) — 每个 Poly 层中的技能(LoRA)数量。 - n_splits (
int
) — 每个 Poly 层的 LoRA 内的拆分次数。大于 1 的值表示使用多头路由 (MHR)。
这是一个用于存储 PolyModel 配置的配置类。