PEFT documentation
DEFT: Metinden Görsele Modeller için Ayrıştırılabilir Verimli İnce Ayar
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 @ RProjeleyici 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
< 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 )
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_projprojeksiyon matrisininPmatrisinden nasıl türetildiğini belirtir. Ya"relu"(varsayılan, ortogonal olmayanP @ relu(P).T) ya da"qr"(ortogonalQ_P @ Q_P.T). - init_scale (
float) — Enjeksiyon matrisiRbaşlatılmasında kullanılan standart sapmaya uygulanan ölçekleme (yalnızcainit_weights=Falseolduğ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ğer1.0'dır. - alpha (
Optional[int]) — Enjeksiyon terimi için ölçekleme faktörü,alpha / rile ölçeklenir (LoRA'nın alpha'sına benzer şekilde).Noneise ölçekleme uygulanmaz (faktör1.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).TrueolduğundaRoluşturulmaz,Ptek eğitilebilir matris olur ve adaptör başlangıçta birim (identity) olamaz. Varsayılan değerFalse'dır (tam DEFT). - fan_in_fan_out (
bool) — Değiştirilecek katman ağırlıkları (fan_in, fan_out) biçiminde saklıyorsa bunuTrueolarak ayarlayın. Örneğin, gpt-2 ağırlıkları (fan_in, fan_out) biçiminde saklayanConv1Dkullandığı için bu değerTrueolarak ayarlanmalıdır. - deft_dropout (
float) — Katman girdisine uygulanan dropout olasılığı. Varsayılan değeri0.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 olarakTrue'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ızcalayers_to_transformNone'den farklıysa kullanılır. Bu, genellikle'layers'veya'h'olarak adlandırılan modelinnn.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
< 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
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 toFalse) — 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ı.