PEFT documentation

DEFT: Metinden Görsele Modeller için Ayrıştırılabilir Verimli İnce Ayar

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: Metinden Görsele Modeller için Ayrıştırılabilir Verimli İnce Ayar

DEFT (Decompositional Efficient Fine-Tuning), metinden görüntüye modeller için parametre verimli bir ince ayar yöntemidir. Donmuş bir ağırlık matrisinin W güncellemesini, W'den düşük rütbeli bir alt uzayı kaldıran bir projeksiyon ve bu alt uzaya yeni içerik enjekte eden düşük rütbeli bir güncelleme olmak üzere iki eğitilebilir bileşene ayırır. Bu formülasyon, hedef dağılımla hizalanmayı, birkaç görüntüden yeni kavramları öğrenmeyi (kişiselleştirme) ve önceden eğitilmiş modelin talimat izleme yeteneği ile düzenlenebilirliğini korumayı dengeleyecek şekilde tasarlanmıştır.

Somut olarak DEFT, iki eğitilebilir düşük-rank bileşeni birleştirir: (1) düşük-rank bir matris tarafından gerilen düşük-rank bir alt uzayın tamamlayıcısına bir projeksiyon ve (2) düşük-rank bir güncelleme. İlk düşük-rank matris alt uzayı tanımlarken, ikincisi bu alt uzay içinde esnek parametre uyarlama sağlar.

DEFT'nin ne zaman kullanılacağı: DEFT, temel modelin talimat izleme yeteneğini koruyup hatta iyileştirirken ve önceki yeteneklerinin unutulmasını en aza indirirken bir modelin yeni verilere veya kavramlara uyarlanması için en uygun çözümdür.

Hedef katman başına DEFT, bir projeksiyon yönü P (şekil out_features x r) ve bir enjeksiyon matrisi R (şekil r x in_features) öğrenir. Etkili ağırlık, artımlı projeksiyondur

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

Projeleyici P_proj, P'den decomposition_method'ye göre türetilir:

  • "relu" (varsayılan): Q_P = P, P_proj = P @ relu(P).T — ortogonal olmayan bir izdüşüm.
  • "qr": Q_P = qr(P), P_proj = Q_P @ Q_P.T — dik bir izdüşüm.

(I - P_proj) @ W terimi, önceden eğitilmiş ağırlığın bir alt uzayını kaldırırken Q_P @ R yeni içeriği bu uzaya enjekte eder. Varsayılan olarak (init_weights=True) R, başlatma anında güncellemenin tam bir kimlik dönüşümü olacağı şekilde (W' == W) başlatılır; böylece eğitim önceden eğitilmiş ağırlıklardan başlar ve enjeksiyonu öğrenir. Güncelleme, düşük rütbeli bir eklemeli delta olan Q_P @ (R - right.T @ W) ile eşdeğerdir; bu, out x out boyutlu projeksiyon matrisini hiç oluşturmadan hesaplanır ve çıkarım için ücretsiz dağıtımda taban ağırlıklarla birleştirilebilir.

para=True olarak ayarlamak, PaRa (Parameter Rank Reduction) varyantını seçer: yalnızca alt uzay kaldırma terimini koruyup enjeksiyonu düşüren, sadece kaldırma içeren bir güncelleme W' = (I - P_proj) @ W. Yalnızca projeksiyon P eğitilir (enjeksiyon matrisi R yoktur), bu nedenle adaptör başlangıçta birim (identity) değildir. PaRa, metinden görüntüye difüzyon modellerini kişiselleştirmek için tanıtılmıştır ve burada DEFT'nin özel bir durumu olarak mevcuttur.

DEFT şu anda torch.nn.Linear ve Conv1D (ör. gpt-2, fan_in_fan_out üzerinden) katmanları için uygulanmıştır. Makaledeki orijinal uygulama ve deneyler (Stable Diffusion ve birleşik bir model üzerinde Dreambooth, Dreambench Plus, InsDet, VisualCloze) github.com/MAXNORM8650/DEFT adresinde mevcuttur.

Çalışmanızda DEFT kullanıyorsanız, lütfen makaleyi atıf olarak belirtin:

@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 varyantını (para=True) kullanıyorsanız, lütfen şu kaynağı da alıntalayın:

@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

sınıf 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 )

Parametreler

  • r (int) — Katmanlar arası DEFT projeksiyon/enjeksiyonunun rütbesi.
  • target_modules (Optional[Union[List[str], str]]) — Uyarlamanın (adapter) uygulanacağı modüllerin adları. Bu parametre belirtilirse, yalnızca belirtilen adlara sahip modüller değiştirilir. Bir dize (string) geçirildiğinde, bir regex eşleşmesi yapılır. Dize listesi geçirildiğinde, tam bir eşleşme yapılır veya modül adının, geçirilen dizelerden herhangi biriyle sonlanıp sonlanmadığı kontrol edilir. Bu parametre ‘all-linear’ olarak belirtilirse, çıktı katmanı hariç tüm lineer modüller seçilir. Bu parametre belirtilmezse, modüller model mimarisine göre seçilir. Mimari bilinmiyorsa bir hata oluşturulur — bu durumda, hedef modülleri manuel olarak belirtmelisiniz.
  • exclude_modules (Optional[Union[List[str], str]]) — Uyarlamanın (adapter) uygulanmaması istenen modüllerin adları. Bir dize geçirildiğinde, bir regex eşleşmesi yapılır. Bir dize listesi geçirildiğinde, tam bir eşleşme yapılır veya modül adının, geçirilen dizelerden herhangi biriyle sonlanıp sonlanmadığı kontrol edilir.
  • decomposition_method (str) — P_proj projeksiyon matrisinin P matrisinden nasıl türetildiğini belirtir. Ya "relu" (varsayılan, ortogonal olmayan P @ relu(P).T) ya da "qr" (ortogonal Q_P @ Q_P.T).
  • init_scale (float) — Enjeksiyon matrisi R başlatılmasında kullanılan standart sapmaya uygulanan ölçekleme (yalnızca init_weights=False olduğunda kullanılır). Daha küçük değerler, başlatma sırasında enjekte edilen güncellemeyi sıfıra daha yakın tutar. Varsayılan değer 1.0'dır.
  • alpha (Optional[int]) — Enjeksiyon terimi için ölçekleme faktörü, alpha / r ile ölçeklenir (LoRA'nın alpha'sına benzer şekilde). None ise ölçekleme uygulanmaz (faktör 1.0). Alt uzay kaldırma terimi etkilenmez.
  • para (bool) — PaRa yönteminin kullanılıp kullanılmayacağı: enjeksiyon terimi olmadan saf alt uzay kaldırma (delta = -P_proj @ W). True olduğunda R oluşturulmaz, P tek eğitilebilir matris olur ve adaptör başlangıçta birim (identity) olamaz. Varsayılan değer False'dır (tam DEFT).
  • fan_in_fan_out (bool) — Değiştirilecek katman ağırlıkları (fan_in, fan_out) biçiminde saklıyorsa bunu True olarak ayarlayın. Örneğin, gpt-2 ağırlıkları (fan_in, fan_out) biçiminde saklayan Conv1D kullandığı için bu değer True olarak ayarlanmalıdır.
  • deft_dropout (float) — Katman girdisine uygulanan dropout olasılığı. Varsayılan değeri 0.0'dir.
  • init_weights (bool) — Eğitimin başlangıcında adaptörün hiçbir işlem yapmaması (no-op) için DEFT'nin varsayılan (identity) başlatma yöntemini adaptör ağırlıkları için kullanıp kullanmayacağını belirtir. Bu ayarı, ne yaptığınızı tam olarak biliyorsanız değiştirin. Varsayılan olarak True'dur.
  • layers_to_transform (Union[List[int], int]) — Dönüştürülecek katman indeksleri. Bir int listesi geçirilirse, adaptör bu listede belirtilen katman indekslerine uygulanır. Tek bir tamsayı geçirilirse, dönüşümler bu indeksteki katmana uygulanır.
  • layers_pattern (Optional[Union[List[str], str]]) — Katman desen adı, yalnızca layers_to_transform None'den farklıysa kullanılır. Bu, genellikle 'layers' veya 'h' olarak adlandırılan modelin nn.ModuleList'ini hedeflemelidir.
  • bias (str) — DEFT için sapma türü. 'none', 'all' veya 'deft_only' olabilir.
  • modules_to_save (List[str]) — Son kontrol noktasında kaydedilecek ve eğitilebilir olarak ayarlanacak, adaptör katmanları dışındaki modüllerin listesi.

Bu, bir DeftModel yapılandırmasını depolamak için kullanılan yapılandırma sınıfıdır.

DEFT (Decompositional Efficient Fine-Tuning), bilgi enjeksiyonunu bir residual-projection güncellemesi yoluyla gerçekleştirir. Donmuş bir taban ağırlığı W için, düşük rütbeli bir projeksiyon yönü P (şekil out_features x r) ve bir enjeksiyon matrisi R (şekil r x in_features) öğrenilir. Uyarlanmış ağırlık W' = (I - P_proj) @ W + Q_P @ R şeklindedir; burada projeksiyoncu P_proj, P'den decomposition_method'e göre türetilir:

  • "relu" (varsayılan): Q_P = P, P_proj = P @ relu(P).T (ortogonal olmayan izdüşüm)
  • "qr": Q_P = qr(P), P_proj = Q_P @ Q_P.T (ortogonal izdüşüm)

Varsayılan olarak (init_weights=True) R, başlangıçta güncellemenin tam bir kimlik dönüşümü olacağı şekilde (uyarlanmış ağırlık W'ye eşit olacak şekilde) başlatılır; böylece eğitim önceden eğitilmiş ağırlıklardan başlar ve enjeksiyonu öğrenir.

DeftModel

sınıf 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

Parametreler

  • model (torch.nn.Module) — Adaptör ayarlayıcı katmanlarının bağlanacağı model.
  • config (DeftConfig) — DEFT modelinin yapılandırması.
  • adapter_name (str) — Adaptörün adı, varsayılan olarak "default"'tır.
  • low_cpu_mem_usage (bool, optional, defaults to False) — Meta cihazda boş adaptör ağırlıkları oluşturur. Yükleme sürecini hızlandırmak için faydalıdır.

Dönüş değeri

torch.nn.Module

DEFT modeli.

Önceden eğitilmiş bir modelden DEFT (Decompositional Efficient Fine-Tuning) modeli oluşturur.

DEFT, temel ağırlıkları dondurur ve her hedef modül için düşük sıralı bir projeksiyon yönü P ile bir enjeksiyon matrisi R öğrenir. Etkili ağırlık (I - P_proj) @ W + Q_P @ R haline gelir ve W'nin bir alt uzayı, yeni enjekte edilen içerikle değiştirilir (mevcut decomposition_method varyantları için DeftConfig'e bakın).

Öznitelikler:

  • model (~torch.nn.Module) — Uyarlanacak model.
  • peft_config (DeftConfig): DEFT modelinin yapılandırması.
Update on GitHub