PEFT 文档

情境感知提示调整:通过对抗性方法推进情境学习

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

情境感知提示调整:通过对抗性方法推进情境学习

CPT 结合了情境学习 (ICL)、提示调整 (PT) 和对抗性优化,通过精炼情境嵌入来改善少样本学习。CPT 通过优化情境和训练样本来更新情境词元,将其封装到一个新颖的损失函数设计中,该设计能最大限度地减少过拟合,实现更有效的优化,并显著提高分类任务的性能。

论文摘要如下:

大型语言模型 (LLM) 可以使用基于优化的方法或情境学习 (ICL) 来进行少样本学习。基于优化的方法通常会因为需要用有限的数据更新大量参数而导致过拟合。相比之下,ICL 避免了过拟合,但其性能通常不如基于优化的方法,并且对演示样本的选择、顺序和格式高度敏感。为了克服这些挑战,我们引入了情境感知提示调整 (CPT),这是一种受 ICL、提示调整 (PT) 和对抗性攻击启发的方法。CPT 建立在 ICL 在输入前拼接样本的策略之上,并通过结合类似 PT 的学习来扩展它,通过迭代优化来精炼情境嵌入,从而从训练样本中提取更深层次的洞见。我们的方法仔细修改特定的情境词元,考虑了情境内样本的独特结构。除了通过类似 PT 的优化更新情境外,CPT 还从对抗性攻击中汲取灵感,根据情境中存在的标签调整输入,同时保留用户提供数据的固有价值。为确保优化过程中的鲁棒性和稳定性,我们采用了投影梯度下降算法,将词元嵌入约束在接近其原始值的范围内,以保障情境的质量。我们的方法在多个使用不同 LLM 模型的分类任务上展示了卓越的准确性,超越了现有的基线,并有效解决了少样本学习中的过拟合挑战。

请参阅示例,获取如何使用 CPT 训练模型的分步指南。

CPTConfig

class peft.CPTConfig

< >

( 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 num_virtual_tokens: int = None token_dim: int = None num_transformer_submodules: typing.Optional[int] = None num_attention_heads: typing.Optional[int] = None num_layers: typing.Optional[int] = None modules_to_save: typing.Optional[list[str]] = None cpt_token_ids: typing.Optional[list[int]] = None cpt_mask: typing.Optional[list[int]] = None cpt_tokens_type_mask: typing.Optional[list[int]] = None opt_weighted_loss_type: typing.Optional[typing.Literal['none', 'decay']] = 'none' opt_loss_decay_factor: typing.Optional[float] = 1.0 opt_projection_epsilon: typing.Optional[float] = 0.1 opt_projection_format_epsilon: typing.Optional[float] = 0.1 tokenizer_name_or_path: typing.Optional[str] = None )

用于情境感知提示调整 (CPT) 的 CPT 配置类,扩展自 PeftConfig。

此类引入了 CPT 所需的额外参数,例如

  • 词元类型掩码
  • 提示调整初始化
  • 损失加权
  • 投影设置

更多详情,请参阅论文:https://huggingface.co/papers/2410.17222

CPTEmbedding

class peft.CPTEmbedding

< >

( config word_embeddings )

CPTEmbedding 是一个为 PEFT 中的情境感知提示调整 (CPT) 设计的自定义嵌入层。它初始化嵌入,应用特定于提示的投影,并使用标签掩码计算损失。

calculate_loss

< >

( base_model_output labels cpt_type_mask config ) ModelOutput

参数

  • base_model_output (ModelOutput) — 来自基础模型的输出,包含 logits。
  • labels (torch.Tensor) — 输入词元的真实标签。
  • cpt_type_mask (torch.Tensor) — 用于过滤有效损失项的词元类型掩码。
  • config (Namespace) — 包含与损失相关的超参数的配置对象。

返回

ModelOutput

带有计算损失的基础模型输出。

计算 CPT 模型的损失,可选指数衰减。

forward

< >

( indices ) torch.Tensor

参数

  • indices (torch.Tensor) — 要嵌入的词元的索引。

返回

torch.Tensor

提示嵌入和增量嵌入的总和。

计算提示嵌入并应用增量调整。

get_projection

< >

( )

将基于 epsilon 的投影应用于增量嵌入以控制其范数。

set_updated_tokens

< >

( )

设置一个反向传播钩子,以根据 CPT 词元类型掩码选择性地更新词元梯度。

< > 在 GitHub 上更新