PEFT documentation
DEFT: 텍스트-이미지 모델을 위한 분해형 효율적 파인튜닝
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 @ Rdecomposition_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
< 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 = 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
< source >( 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 모델의 구성입니다.