PEFT documentation

DEFT: 텍스트-이미지 모델을 위한 분해형 효율적 파인튜닝

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

DEFT: 텍스트-이미지 모델을 위한 분해형 효율적 파인튜닝

DEFT(Decompositional Efficient Fine-Tuning)은 텍스트-이미지 모델에 적용되는 매개변수 효율적 파인튜닝 방법입니다. 이는 동결된 가중치 행렬 W의 업데이트를 두 가지 학습 가능한 구성 요소로 분해합니다. 하나는 W에서 저랭크 부분공간을 제거하는 투사(projection)이고, 다른 하나는 해당 부분공간에 새로운 콘텐츠를 주입하는 저랭크 업데이트입니다. 이 수식은 목표 분포와의 정렬, 소수의 이미지로부터의 새로운 개념 학습(개인화), 그리고 사전 학습된 모델의 지시 따르기 능력 및 편집 가능성을 유지하는 것 사이의 균형을 맞추도록 설계되었습니다.

구체적으로, DEFT는 학습 가능한 두 가지 저랭크(low-rank) 구성 요소를 결합합니다: (1) 저랭크 행렬에 의해 형성된 저랭크 부분 공간의 여공간(complement)으로의 투사(projection), (2) 저랭크 업데이트(low-rank update). 첫 번째 저랭크 행렬은 부분 공간을 정의하고, 두 번째 행렬은 해당 부분 공간 내에서 유연한 매개변수 적응을 가능하게 합니다.

DEFT 사용 시점: 기존 모델의 지시 따르기 능력을 유지하고 심지어 향상시키면서 기존 기능의 망각을 최소화하는 동시에 모델을 새로운 데이터나 개념에 적응시키는 데 가장 적합합니다.

타겟 레이어별로 DEFT는 투영 방향 P(shape out_features x r)와 주입 행렬 R(shape r x in_features)를 학습합니다. 유효한 가중치는 잔차 투영

W' = (I - P_proj) @ W + Q_P @ R

decomposition_method에 따라 P로부터 P_proj 프로젝터가 유도됩니다:

  • "relu" (기본값): Q_P = P, P_proj = P @ relu(P).T — 비직교 투사(non-orthogonal projection)입니다.
  • "qr": Q_P = qr(P), P_proj = Q_P @ Q_P.T — 직교 투사(orthogonal projection).

(I - P_proj) @ W 항은 사전 학습된 가중치의 부분 공간을 제거하고, Q_P @ R은 해당 공간에 새로운 내용을 주입합니다. 기본값(init_weights=True)에서 R은 초기화 시점에 업데이트가 정확한 항등식이 되도록(W' == W) 초기화되어, 학습이 사전 학습된 가중치에서 시작하여 주입을 학습합니다. 이 업데이트는 out x out 투영 행렬을 형성하지 않고 계산되는 저랭크 가산 델타 Q_P @ (R - right.T @ W)와 동치이며, 추론 전용 배포를 위해 기본 가중치에 병합할 수 있습니다.

para=True를 설정하면 PaRa(Parameter Rank Reduction) 변형이 선택됩니다. 이는 주입을 제거하고 부분공간 제거 항만 유지하는 제거 전용 업데이트 W' = (I - P_proj) @ W입니다. 투영 P만 학습되며(주입 행렬 R 없음), 어댑터는 초기화 시 항등 변환이 아닙니다. PaRa는 텍스트-이미지 확산 모델의 개인화를 위해 도입되었으며, 여기서는 DEFT의 특수한 경우로 제공됩니다.

DEFT는 현재 torch.nn.Linear 및 Conv1D(예: fan_in_fan_out를 통한 gpt-2) 레이어에 구현되어 있습니다. 원본 구현 및 논문(Dreambooth, Dreambench Plus, InsDet, VisualCloze, Stable Diffusion 및 통합 모델)의 실험은 github.com/MAXNORM8650/DEFT에서 확인할 수 있습니다.

작업에서 DEFT를 사용하신 경우, 다음 논문을 인용해 주세요:

@article{kumar2026deft,
  title={DEFT: Decompositional Efficient Fine-Tuning for Text-to-Image Models},
  author={Kumar, Komal and Anwer, Rao and Shahbaz Khan, Fahad and Khan, Salman and Laptev, Ivan and Cholakkal, Hisham},
  journal={Advances in Neural Information Processing Systems},
  volume={38},
  pages={102009--102035},
  year={2026}
}

PaRa 변형(para=True)을 사용하는 경우, 다음도 인용해 주세요:

@inproceedings{chen2025personalizing,
  title={Para: Personalizing text-to-image diffusion via parameter rank reduction},
  author={Chen, Shangyu and Pan, Zizheng and Cai, Jianfei and Phung, Dinh},
  booktitle={International Conference on Learning Representations},
  year={2025}
}

DeftConfig

클래스 peft.DeftConfig

< >

( 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 = Falser: int = 8target_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonedecomposition_method: Literal['relu', 'qr'] = 'relu'init_scale: float = 1.0alpha: Optional[int] = Nonepara: bool = Falsefan_in_fan_out: bool = Falsedeft_dropout: float = 0.0init_weights: bool = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonebias: str = 'none'modules_to_save: Optional[list[str]] = None )

매개변수

  • r (int) — 레이어 간 DEFT 투영/주입의 랭크입니다.
  • target_modules (Optional[Union[List[str], str]]) — 어댑터를 적용할 모듈의 이름입니다. 이 값이 지정되면, 지정된 이름을 가진 모듈만 교체됩니다. 문자열을 전달하면 정규식 매칭이 수행됩니다. 문자열 목록을 전달하면 정확한 매칭이 수행되거나, 모듈 이름이 전달된 문자열 중 하나로 끝나는지 확인됩니다. 이 값이 ‘all-linear’로 지정되면 출력 레이어를 제외한 모든 선형 모듈이 선택됩니다. 이 값이 지정되지 않으면 모델 아키텍처에 따라 모듈이 선택됩니다. 아키텍처가 알려지지 않은 경우 오류가 발생하며, 이 경우 대상 모듈을 수동으로 지정해야 합니다.
  • exclude_modules (Optional[Union[List[str], str]]) — 어댑터를 적용하지 않을 모듈의 이름입니다. 문자열을 전달하면 정규식 매칭이 수행됩니다. 문자열 목록을 전달하면 정확한 매칭이 수행되거나, 모듈 이름이 전달된 문자열 중 하나로 끝나는지 확인됩니다.
  • decomposition_method (str) — P_proj가 P로부터 어떻게 유도되는지를 정의합니다. "relu"(기본값, 비직교 P @ relu(P).T) 또는 "qr"(직교 Q_P @ Q_P.T) 중 하나입니다.
  • init_scale (float) — 주입 행렬 R 초기화에 사용되는 표준편차에 적용되는 스케일링입니다(init_weights=False일 때만 사용). 값이 작을수록 초기화 시 주입되는 업데이트가 0에 더 가깝게 유지됩니다. 기본값은 1.0입니다.
  • alpha (Optional[int]) — 주입 항의 스케일링 계수로, alpha / r로 스케일링됩니다(LoRA의 alpha와 유사). None인 경우 스케일링이 적용되지 않습니다(계수 1.0). 부분 공간 제거 항에는 영향을 주지 않습니다.
  • para (bool) — PaRa 방법을 사용할지 여부: 주입 항이 없는 순수 부분공간 제거(delta = -P_proj @ W)입니다. True인 경우 R은 생성되지 않으며, P가 유일한 학습 가능한 행렬이 되고 어댑터는 초기화 시 항등 행렬이 될 수 없습니다. 기본값은 False(완전한 DEFT)입니다.
  • fan_in_fan_out (bool) — 교체할 레이어가 가중치를 (fan_in, fan_out) 형식으로 저장하는 경우 이 값을 True로 설정합니다. 예를 들어, gpt-2는 가중치를 (fan_in, fan_out) 형식으로 저장하는 Conv1D를 사용하므로 이 값을 True로 설정해야 합니다.
  • deft_dropout (float) — 레이어 입력에 적용되는 dropout 확률입니다. 기본값은 0.0입니다.
  • init_weights (bool) — 어댑터 가중치에 DEFT의 기본(항등) 초기화를 사용할지 여부입니다. 이를 통해 학습 시작 시 어댑터가 아무 동작도 하지 않는(no-op) 상태가 됩니다. 정확히 무엇을 하는지 아는 경우를 제외하고는 이 설정을 변경하지 마세요. 기본값은 True입니다.
  • layers_to_transform (Union[List[int], int]) — 변환할 레이어의 인덱스입니다. 정수 목록을 전달하면 이 목록에 지정된 레이어 인덱스에 어댑터를 적용합니다. 단일 정수를 전달하면 해당 인덱스의 레이어에 변환을 적용합니다.
  • layers_pattern (Optional[Union[List[str], str]]) — layers_to_transform가 None과 다르면만 사용되는 레이어 패턴 이름입니다. 이는 모델의 nn.ModuleList를 대상으로 해야 하며, 보통 'layers' 또는 'h'라고 불립니다.
  • bias (str) — DEFT의 Bias 유형입니다. 'none', 'all' 또는 'deft_only'를 사용할 수 있습니다.
  • modules_to_save (List[str]) — 어댑터 레이어를 제외한 최종 체크포인트에 학습 가능 상태로 설정되고 저장될 모듈 목록.

이것은 DeftModel의 구성을 저장하기 위한 구성 클래스입니다.

DEFT(Decompositional Efficient Fine-Tuning)는 잔차-투영 업데이트를 통해 지식 주입을 수행합니다. 고정된 기본 가중치 W에 대해, 저랭크 투영 방향 P(shape out_features x r)과 주입 행렬 R(shape r x in_features)을 학습합니다. 적응된 가중치는 W' = (I - P_proj) @ W + Q_P @ R이며, 여기서 투영기 P_proj는 decomposition_method에 따라 P로부터 유도됩니다:

  • "relu" (기본값): Q_P = P, P_proj = P @ relu(P).T (비직교 투영)
  • "qr": Q_P = qr(P), P_proj = Q_P @ Q_P.T (직교 투영)

기본적으로 (init_weights=True) R는 초기화 시 업데이트가 정확한 항등 변환이 되도록(적응된 가중치가 W와 같도록) 초기화되며, 따라서 학습은 사전 학습된 가중치에서 시작하여 주입을 학습합니다.

DeftModel

클래스 peft.DeftModel

< >

( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None ) → torch.nn.Module

매개변수

  • model (torch.nn.Module) — 어댑터 튜너 레이어가 연결될 모델입니다.
  • config (DeftConfig) — DEFT 모델의 구성입니다.
  • adapter_name (str) — 어댑터의 이름이며, 기본값은 "default"입니다.
  • low_cpu_mem_usage (bool, optional, 기본값 False) — 메타 디바이스에 빈 어댑터 가중치를 생성합니다. 로딩 프로세스를 가속하는 데 유용합니다.

반환값

torch.nn.Module

DEFT 모델.

DEFT(Decompositional Efficient Fine-Tuning) 모델을 사전 학습된 모델로부터 생성합니다.

DEFT는 기본 가중치를 고정하고, 대상 모듈별로 저랭크 투영 방향 P와 주입 행렬 R을 학습합니다. 유효 가중치는 (I - P_proj) @ W + Q_P @ R가 되며, W의 부분 공간을 새로 주입된 내용으로 대체합니다(사용 가능한 decomposition_method 변형은 DeftConfig를 참조하세요).

속성:

  • model (~torch.nn.Module) — 적응할 모델.
  • peft_config (DeftConfig): DEFT 모델의 구성입니다.
Update on GitHub