PEFT documentation
멀티태스크 프롬프트 튜닝
멀티태스크 프롬프트 튜닝
Multitask prompt tuning은 각 작업의 소프트 프롬프트를 작업별로 별도의 프롬프트를 사용하는 대신, 하나의 학습된 이식 가능한 프롬프트로 분해합니다. 이 단일 학습된 프롬프트는 곱셈 기반의 낮은 랭크 업데이트를 통해 각 작업에 맞게 조정할 수 있습니다.
해당 논문의 초록은 다음과 같습니다:
학습된 프롬프트 벡터를 조건으로 하여 기본 사전 학습 모델을 각 작업에 맞게 조정하는 프롬프트 튜닝은 대규모 언어 모델을 여러 하위 작업에 효율적으로 적응시키는 유망한 접근법으로 부상했습니다. 그러나 기존 방법들은 일반적으로 소프트 프롬프트 벡터를 처음부터 학습하며, 다중 작업 학습 환경에서 프롬프트 벡터를 활용하여 풍부한 작업 간 지식을 어떻게 활용할 수 있는지는 명확하지 않았습니다. 우리는 다중 작업 프롬프트 튜닝(MPT)을 제안합니다. 이 방법은 여러 작업별 소스 프롬프트에서 지식을 증류하여 단일 이식 가능한 프롬프트를 먼저 학습합니다. 그런 다음 이 공유 프롬프트에 곱셈형 저랭크 업데이트를 학습하여 각 하위 대상 작업에 효율적으로 적응시킵니다. 23개의 NLP 데이터셋에 대한 광범위한 실험을 통해, 제안된 접근법은 작업별 파라미터를 0.035%만 조정함에도 불구하고 일부 경우 전체 파인튜닝 베이스라인을 포함한 최첨단 방법들을 능가함을 입증했습니다.

MPT는 두 단계로 구성됩니다:
- source training - 각 작업별로, 해당 soft prompt는 작업별 벡터로 분해됩니다. 작업별 벡터들을 곱하여 또 다른 행렬 W를 형성하고, W와 공유 prompt 행렬 P 사이에 Hadamard product를 적용하여 작업별 prompt 행렬을 생성합니다. 작업별 prompt들은 모든 작업에서 공유되는 단일 prompt 행렬로 증류됩니다. 이 prompt는 multitask training으로 학습됩니다.
- target adaptation - 대상 작업에 단일 프롬프트를 적응시키기 위해, 대상 프롬프트를 초기화하고 공유 프롬프트 행렬과 작업별 저랭크(low-rank) 프롬프트 행렬의 하다마드 곱(Hadamard product)으로 표현합니다.

벤치마크 개요
이 방법에 대한 벤치마크는 아직 없습니다. 실험 구성을 기여해 주셔도 되지만, 먼저 여기에서 이슈를 생성해 주세요.
API
MultitaskPromptTuningConfig
클래스 peft.MultitaskPromptTuningConfig
< source >( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falsenum_virtual_tokens: int = Nonetoken_dim: int = Nonenum_transformer_submodules: Optional[int] = Nonenum_attention_heads: Optional[int] = Nonenum_layers: Optional[int] = Nonemodules_to_save: Optional[list[str]] = Noneprompt_tuning_init: peft.tuners.multitask_prompt_tuning.config.MultitaskPromptTuningInit | str = <MultitaskPromptTuningInit.RANDOM: 'RANDOM'>prompt_tuning_init_text: str | None = Nonetokenizer_name_or_path: str | None = Nonetokenizer_kwargs: dict | None = Noneprompt_tuning_init_state_dict_path: str | None = Noneprompt_tuning_init_task: int | None = 0num_ranks: int | None = 1num_tasks: int | None = 1 )
MultitaskPromptEmbedding
클래스 peft.tuners.MultitaskPromptEmbedding
< source >( config: MultitaskPromptTuningConfigword_embeddings )