PEFT documentation
WaveFT: Wavelet İnce Ayarı
WaveFT: Wavelet İnce Ayarı
WaveFT, art matrislerinin wavelet alanındaki seyrek güncellemeler tanıtan yeni bir parametre-verimli ince ayar (PEFT) yöntemidir. LoRA'nın ayrık düşük-rank seçimleriyle sınırlı kalmasının aksine WaveFT, dönüştürülmüş uzayda doğrudan seyrek bir katsayı kümesi öğrenerek eğitilebilir parametre sayısı üzerinde ince taneli kontrol sağlar. Bu katsayılar daha sonra Ters Ayrık Wavelet Dönüşümü (IDWT) aracılığıyla ağırlık alanına geri eşlenir ve çıkarım maliyeti oluşturmadan yüksek-rank güncellemeler üretir.
WaveFT şu anda aşağıdaki kısıtlamaya sahiptir:
- Yalnızca
nn.Linearkatmanları desteklenir.
Makalenin özeti şudur:
Büyük temel modellerin verimli bir şekilde uyarlanması, özellikle sıkı hesaplama ve bellek bütçeleri söz konusu olduğunda kritik öneme sahiptir. LoRA gibi Parametre Verimli İnce Ayar (PEFT) yöntemleri, düşük parametreli ortamlarda sınırlı bir granülerlik ve etkililik sunar. Biz, Wavelet İnce Ayar (WaveFT) adını verdiğimiz, kalıntı matrislerinin wavelet alanında son derece seyrek güncellemeler öğrenen yeni bir PEFT yöntemi öneriyoruz. WaveFT, eğitilebilir parametrelerin hassas kontrolüne olanak tanıyarak ince taneli kapasite ayarlaması sağlar ve şaşırtıcı derecede düşük parametre sayısıyla üstün performans gösterir; bu sayı, LoRA'nın minimumundan çok daha düşük olabilir—bu da aşırı parametre verimli senaryolar için idealdir. Stable Diffusion XL taban olarak kullanılarak kişiselleştirilmiş metinden görüntüye üretimde değerlendirilen WaveFT, özellikle düşük parametre sayılarında LoRA ve diğer PEFT yöntemlerini önemli ölçüde geride bırakarak üstün konu sadakati, istem uyumu ve görüntü çeşitliliği elde eder.
Karma performans değerlendirmesi genel bakış
API
WaveFTConfig
sınıf peft.WaveFTConfig
< 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 = Falsen_frequency: int = 2592scaling: float = 25.0wavelet_family: str = 'db1'use_idwt: bool = Truerandom_loc_seed: int = 777fan_in_fan_out: bool = Falsetarget_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonebias: str = 'none'modules_to_save: Optional[list[str]] = Nonelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonen_frequency_pattern: Optional[dict] = <factory>proportional_parameters: bool = Falseinit_weights: bool = True )
Parametreler
- n_frequency (
int) — Discrete Wavelet Transform (DWT) için öğrenilebilir wavelet katsayılarının sayısı. ‘n_frequency’, 0'dan büyük ve orijinal ağırlık matrisindeki (d_out * d_in) toplam eleman sayısına eşit veya ondan küçük olan bir tam sayıdır. Bu parametre, her uyarlanmış katman için eğitilebilir parametre sayısını doğrudan kontrol eder. Daha yüksek bir ‘n_frequency’ genellikle daha iyi performans sağlar ancak GPU bellek kullanımını da artırır; eğitim hızı üzerindeki etkisi ise önemsizdir. - scaling (
float) — Yeniden oluşturulan delta W matrisine uygulanan ölçekleme faktörü. Bu, LoRA'dakilora_alpha'ya benzer şekilde kritik bir hiperparametredir. Hiperparametre araması sırasında ayarlanabilir. SDXL kişiselleştirme için varsayılan değerimiz 25'tir. - wavelet_family (
str) — DWT ve Ters DWT (IDWT) için kullanılacak dalgalet ailesi (ör. ‘db1’, ‘sym2’, ‘coif1’). Varsayılan değer ‘db1’ (Haar dalgaleti)dir. Farklı dalgalet ailelerinin değişken filtre uzunlukları vardır ve bu durum eğitim süresini önemli ölçüde etkiler - use_idwt (
bool) — Verimli uyarlama için False olarak ayarlayın. Öğrenilen wavelet katsayılarından delta ağırlıklarını yeniden oluşturmak için Ters Ayrık Wavelet Dönüşümü'nün (IDWT) kullanılıp kullanılmayacağını belirtir.True(varsayılan) ise IDWT uygulanır.Falseise öğrenilen katsayılar, SDXL kişiselleştirme görevinde daha yavaş ama daha kötü performans gösteren seyrek bir delta ağırlık matrisi oluşturmak için doğrudan kullanılır. - random_loc_seed (
int) — Tam wavelet katsayı matrisi içindekin_frequencyöğrenilebilir wavelet katsayılarının rastgele konumlarını belirlemek için kullanılan tohum. - target_modules (
Union[list[str],str]) — WaveFT ile uyarlanacak modülleri belirleyen modül adlarının listesi veya bir regex ifadesi. Örneğin,['q_proj', 'v_proj']veya'.*decoder.*(SelfAttention|EncDecAttention).*(q|v)$'. Şu anda yalnızca lineer katmanlar (torch.nn.Linear) desteklenmektedir. - exclude_modules (
Optional[Union[List[str], str]]) — WaveFT uyarlama işleminden hariç tutulacak modüllerin adlarının listesi veya bir regex ifadesi. - fan_in_fan_out (
bool) — Değiştirilecek katmanın ağırlıkları(fan_in, fan_out)biçiminde saklanıyorsaTrueolarak ayarlayın. Varsayılan değerFalse'tür. - bias (
str) — WaveFT için bias türü. ‘none’, ‘all’ veya ‘waveft_only’ olabilir. (‘fourier_only’ büyük olasılıkla bir yazım hatasıdır ve yalnızca uyarlanan parametrelere bias eklendiğini ima ediyorsa ‘waveft_only’ olarak düzeltilmiştir) ‘waveft_only’ seçilirse, bias'lar yalnızca WaveFT bileşenlerine eklenir. ‘all’ seçilirse, bias'lar hem temel hem de WaveFT bileşenlerine eklenir. ‘none’ seçilirse, yeni bias eklenmez. - modules_to_save (
list[str]) — WaveFT katmanlarının yanı sıra, eğitilebilir olarak işaretlenmesi ve nihai checkpoint'te kaydedilmesi gereken modüllerin listesi. Rastgele başlatılan ve eğitim gerektiren, örneğin dizi veya token sınıflandırma görevlerindeki sınıflandırıcılar gibi katmanlar için faydalıdır. - layers_to_transform (
Union[list[int],int]) — Dönüştürülecek belirli katman indeksleri. Verildiğinde, PEFT yalnızca bu indekslerdeki katmanları uyarlar. Tek bir tamsayı verilirse, yalnızca o katman dönüştürülür. - layers_pattern (
Optional[Union[List[str], str]]) — Katman adları için desen,layers_to_transformbelirtildiğinde ve katman deseni standart değilse (ör. ‘layers’ veya ‘h’ değilse) kullanılır. Bu, modeldekinn.ModuleListöznitelğine yönelik olmalıdır. - n_frequency_pattern (
dict) — Katman adlarını (veya regex) belirlin_frequencydeğerlerine eşleyen, küreseln_frequencydeğerini geçersiz kılan bir sözlük. Örnek:{"model.decoder.layers.0.encoder_attn.k_proj": 1000}. - init_weights (
bool) — Öğrenilebilir wavelet katsayılarının (spektrum) başlatma stratejisi.True(varsayılan) ise, katsayılar sıfıra başlatılır.Falseise, katsayılar küçük bir çarpanla ölçeklenmiş standart normal dağılımdan başlatılır. - proportional_parameters (
bool) —Trueise,n_frequencyher katmanıninput_dim * output_dimdeğerine orantılı olarak atanır. Varsayılan değerFalse'tir. Not: Bu seçenek, pratik bir fayda sağlamak için değil, faydalı senaryolar belirlenmemiş olsa da araştırmacıların makale sonuçlarını yeniden üretebilmesine olanak tanımak amacıyla deneysel kapsamlılık için dahil edilmiştir.
Bu, WaveFTModel yapılandırmasını depolamak için kullanılan yapılandırma sınıfıdır. Wavelet tabanlı İnce Ayar (WaveFT) parametreleri için kullanılır; bu yaklaşım, önceden eğitilmiş modellerin parametre verimli ince ayarı için wavelet dönüşümlerinin seyrekliğini (sparsity) kullanır.
WaveFTModel
sınıf peft.WaveFTModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )