PEFT 文档
Polytropon
并获得增强的文档体验
开始使用
Polytropon
Polytropon 是一种多任务模型,其“库存”中有许多不同的 LoRA 适配器。该模型通过路由函数从库存中学习适配器的正确组合,以为特定任务选择最佳的模块子集。PEFT 还支持用于 Polytropon 的 多头适配器路由 (MHR),它通过更细粒度地组合适配器头来构建和改进路由函数。适配器头被分离成不相交的块,并为每个块学习不同的路由函数,从而实现更强的表达能力。
论文摘要如下:
模块化设计鼓励神经模型解耦和重组知识的不同方面,以更系统地泛化到新任务。在这项工作中,我们假设每个任务都与一个(可能很小的)库存中的潜在离散技能子集相关联。反过来,技能对应于参数高效(稀疏/低秩)的模型参数化。通过共同学习这些技能和任务-技能分配矩阵,每个任务的网络被实例化为活动技能参数的平均值。为了支持任务间技能的非平凡软分区,我们尝试了一系列归纳偏置,例如印度自助餐过程先验和双速学习率。我们在两个主要设置中评估我们的潜在技能模型:1) 在 BabyAI 平台的 8 个级别上进行基于指令的强化学习多任务;2) 在 CrossFit 基准(包含 160 个 NLP 任务)上对预训练的文本到文本生成模型进行少样本适应。我们发现,与知识在任务间纠缠的全共享、特定任务或条件生成参数的基线相比,网络的模块化设计显著提高了强化学习中的样本效率和监督学习中的少样本泛化能力。此外,我们展示了离散技能如何有助于可解释性,因为它们产生了明确的任务层次结构。
PolyConfig
class peft.PolyConfig
< 源代码 >( task_type: typing.Union[str, peft.utils.peft_types.TaskType, NoneType] = None peft_type: typing.Union[str, peft.utils.peft_types.PeftType, NoneType] = None auto_mapping: typing.Optional[dict] = None base_model_name_or_path: typing.Optional[str] = None revision: typing.Optional[str] = None inference_mode: bool = False r: int = 8 target_modules: Optional[Union[list[str], str]] = None exclude_modules: Optional[Union[list[str], str]] = None modules_to_save: Optional[list[str]] = None init_weights: bool = True poly_type: Literal['poly'] = 'poly' n_tasks: int = 1 n_skills: int = 4 n_splits: int = 1 )
参数
- r (
int
) — Poly 中每个 LoRA 的注意力维度。 - target_modules (
Union[List[str],str]
) — 应用 Poly 的模块名称。 - exclude_modules (
Optional[Union[List[str], str]]
) — 不应用适配器的模块名称。当传入字符串时,将执行正则表达式匹配。当传入字符串列表时,将执行精确匹配或检查模块名称是否以任何传入的字符串结尾。 - 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 配置的配置类。
PolyModel
class peft.PolyModel
< 源代码 >( model peft_config: Union[PeftConfig, dict[str, PeftConfig]] adapter_name: str low_cpu_mem_usage: bool = False state_dict: Optional[dict[str, torch.Tensor]] = None )