PEFT documentation

DEFT: Decompositional Efficient Fine-Tuning для моделей «текст в изображение»

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: Decompositional Efficient Fine-Tuning для моделей «текст в изображение»

DEFT (Decompositional Efficient Fine-Tuning) — это метод параметрически эффективной дообучения для моделей генерации изображений по тексту. Он разлагает обновление замороженной матрицы весов W на два обучаемых компонента: проекцию, удаляющую подпространство низкого ранга из W, и обновление низкого ранга, вводящее новый контент в это подпространство. Такая формулировка разработана для балансирования соответствия целевому распределению, обучения новым концепциям по нескольким изображениям (персонализация) и сохранения способности предобученной модели следовать инструкциям и редактируемости.

Конкретно, DEFT объединяет два обучаемых компонента низкого ранга: (1) проекцию на дополнение подпространства низкого ранга, натянутого на матрицу низкого ранга, и (2) обновление низкого ранга. Первая матрица низкого ранга определяет подпространство, тогда как вторая обеспечивает гибкую адаптацию параметров внутри этого подпространства.

Когда использовать DEFT: он лучше всего подходит для адаптации модели к новым данным или концепциям с сохранением и даже улучшением способности базовой модели следовать инструкциям и минимизацией потери её предыдущих возможностей.

Для каждого целевого слоя DEFT обучает направление проекции P (размер out_features x r) и матрицу инъекции R (размер r x in_features). Эффективный вес представляет собой остаточную проекцию

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

Проектор P_proj выводится из P в соответствии с decomposition_method:

  • "relu" (по умолчанию): Q_P = P, P_proj = P @ relu(P).T — неортогональная проекция.
  • "qr": Q_P = qr(P), P_proj = Q_P @ Q_P.T — ортогональная проекция.

Член (I - P_proj) @ W удаляет подпространство предобученных весов, а Q_P @ R внедряет в него новый контент. По умолчанию (init_weights=True) R инициализируется так, чтобы обновление на этапе инициализации было точным тождественным преобразованием (W' == W), поэтому обучение начинается с предобученных весов и учится внедрению. Обновление эквивалентно аддитивному дельта-обновлению низкого ранга Q_P @ (R - right.T @ W), которое вычисляется без формирования матрицы проекции out x out и может быть объединено с базовыми весами для развёртывания без необходимости в инференсе.

Установка para=True выбирает вариант PaRa (Parameter Rank Reduction): обновление только с удалением W' = (I - P_proj) @ W, которое сохраняет лишь член удаления подпространства и исключает инъекцию. Обучается только проекция P (матрица инъекции R отсутствует), поэтому адаптер не является тождественным при инициализации. PaRa был предложен для персонализации диффузионных моделей «текст в изображение» и доступен здесь как частный случай DEFT.

DEFT в настоящее время реализован для слоёв torch.nn.Linear и Conv1D (например, gpt-2, через fan_in_fan_out). Исходная реализация и эксперименты из статьи (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). Меньшие значения сохраняют введённое обновление ближе к нулю на этапе инициализации. По умолчанию 1.0.
  • alpha (Optional[int]) — Коэффициент масштабирования для инъекционного члена, который масштабируется величиной alpha / r (аналогично alpha в LoRA). Если None, масштабирование не применяется (коэффициент 1.0). Член удаления подпространства не затрагивается.
  • para (bool) — Использовать ли метод PaRa: чистое удаление подпространства (delta = -P_proj @ W) без инъекционного члена. Если True, R не создаётся, P является единственной обучаемой матрицей, и адаптер не может быть тождественным при инициализации. По умолчанию False (полный DEFT).
  • fan_in_fan_out (bool) — Установите это значение в True, если заменяемый слой хранит веса в формате (fan_in, fan_out). Например, gpt-2 использует Conv1D, который хранит веса в формате (fan_in, fan_out), поэтому это значение должно быть установлено в True.
  • deft_dropout (float) — Вероятность dropout, применяемая к входу слоя. По умолчанию 0.0.
  • init_weights (bool) — Использовать ли начальную инициализацию адаптера по умолчанию (тождественную) для DEFT, чтобы адаптер не влиял на модель в начале обучения. Не изменяйте этот параметр, если вы точно не знаете, что делаете. По умолчанию 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. Может быть 'none', 'all' или 'deft_only'.
  • modules_to_save (List[str]) — Список модулей, помимо адаптерных слоёв, которые нужно сделать обучаемыми и сохранить в итоговой контрольной точке.

Это класс конфигурации для хранения конфигурации модели DeftModel.

DEFT (Decompositional Efficient Fine-Tuning) выполняет внедрение знаний через обновление с помощью остаточного проецирования. Для замороженного базового веса W обучаются направление низкорангового проецирования P (форма out_features x r) и матрица внедрения R (форма r x in_features). Адаптированный вес вычисляется как W' = (I - P_proj) @ W + Q_P @ R, где проектор P_proj выводится из P в соответствии с decomposition_method:

  • "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) — Создаёт пустые веса адаптера на meta-устройстве. Полезно для ускорения процесса загрузки.

Возвращает

torch.nn.Module

Модель DEFT.

Создаёт модель DEFT (Decompositional Efficient Fine-Tuning) на основе предобученной модели.

DEFT замораживает базовые веса и обучает, для каждого целевого модуля, направление низкорангового проецирования P и матрицу инъекции R. Эффективный вес становится (I - P_proj) @ W + Q_P @ R, заменяя подпространство W на вновь введённое содержимое (см. DeftConfig для доступных вариантов decomposition_method).

Атрибуты:

  • model (~torch.nn.Module) — Модель, подлежащая адаптации.
  • peft_config (DeftConfig): конфигурация модели DEFT.
Update on GitHub