PEFT documentation
FourierFT: Ayrık Fourier Dönüşümü İnce Ayarı
FourierFT: Ayrık Fourier Dönüşümü İnce Ayarı
FourierFT, ayarlanabilir ağırlıkları sıkıştırmak için Discrete Fourier Transform’dan yararlanan parametre-verimli bir ince ayar tekniğidir. Bu yöntem, çok daha az parametre kullanarak GLUE benchmark’ında ve yaygın ViT sınıflandırma görevlerinde LoRA’dan daha iyi performans gösterir.
FourierFT şu anda aşağıdaki kısıtlamalara sahiptir:
- Yalnızca
nn.Linearkatmanları desteklenir. - Kantize katmanlar desteklenmez.
Bu kısıtlamalar kullanım senaryonuza uygun değilse, bunun yerine başka yöntemleri düşünün.
Makalenin özeti şudur:
Düşük rütbeli uyarlama (LoRA), son zamanlarda temel modellerin ince ayarında büyük ilgi görmüştür. Ağırlık değişimini temsil etmek için düşük rütbeli A ve B matrislerini birleştirerek eğitilebilir parametre sayısını etkili bir şekilde azaltır; yani Delta W=BA. LoRA'nın ilerlemesine rağmen, kapsamlı özelleştirme uyarlamaları veya daha büyük temel modellerle uğraşırken depolama zorluklarıyla karşı karşıyadır. Bu çalışmada, Fourier dönüşümünün güçlü ifade yeteneğinden yararlanarak eğitilebilir parametreleri daha da sıkıştırmayı hedefliyoruz. Özellikle, FourierFT'yi tanıtıyoruz; bu yöntem Delta W'yi uzamsal alanda bir matris olarak ele alır ve yalnızca spektral katsayılarının küçük bir kısmını öğrenir. Eğitilen spektral katsayılarıyla, Delta W'yi geri getirmek için ters ayrık Fourier dönüşümünü uygularız. Deneysel olarak, FourierFT yöntemimiz, doğal dil anlama, doğal dil üretimi, talimat ayarı ve görüntü sınıflandırması dahil olmak üzere çeşitli görevlerde LoRA'dan daha az parametreyle karşılaştırılabilir veya daha iyi performans göstermektedir. Örneğin, LLaMA2-7B modelinde talimat ayarı yapılırken, FourierFT, LoRA'nın 33,5M'ine kıyasla yalnızca 0,064M eğitilebilir parametreyle LoRA'yı geride bırakmaktadır.
Karma performans değerlendirmesi genel bakış
API
FourierFTConfig
sınıf peft.FourierFTConfig
< 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 = 1000scaling: float = 150.0random_loc_seed: Optional[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>init_weights: bool = False )
Parametreler
- n_frequency (
int) — Discrete Fourier Transform için öğrenilebilir frekans sayısı. ‘n_frequency’, 0’dan büyük ve d^2’den küçük veya eşit olan bir tam sayıdır (ağırlık W’nin boyutlarının d x d olduğu varsayılır). Ayrıca, her delta W ağırlığını güncellemek için gereken eğitilebilir parametre sayısıdır. ‘n_frequency’, PEFT için performans ve verimliliği etkileyecektir. Özellikle, eğitim hızı üzerinde çok az etkisi vardır, ancak daha yüksek değerleri (genellikle) daha büyük GPU bellek maliyetlerine ve daha iyi doğruluğa yol açar. Aynıtarget_modulesile, LoRA’nın parametre sayısı, FourierFT’nin (2dr/n_frequency) katıdır. Kullanıcılar için ‘n_frequency’ ayarlarına ilişkin aşağıdaki örnekler referans olarak kullanılabilir. RoBERTa-large modeli ile NLU görevlerinde, ‘n_frequency’: 1000 benimsemek, LoRA’daki ‘r’: 8 ile neredeyse benzer sonuçlara ulaşabilir. Bu durumda, LoRA’nın parametre sayısı, FourierFT’nin yaklaşık 16 katıdır. Vit-large modelleri ile görüntü sınıflandırma görevlerinde, ‘n_frequency’: 3000 benimsemek, LoRA’daki ‘r’: 16 ile neredeyse benzer sonuçlara ulaşabilir; burada LoRA’nın parametre sayısı, FourierFT’nin yaklaşık 11 katıdır. - scaling (
float) — Delta W matrisi için ölçekleme değeri. Bu, LoRA yöntemindeki ‘lora_alpha’ parametresine benzer olarak ölçekleme için kullanılan önemli bir hiperparametredir. ‘scaling’, hiperparametre arama süreci sırasında belirlenebilir. Ancak kullanıcılar bu süreci atlamak istiyorsa, aşağıdaki senaryolardaki ayarlara başvurabilirler. Bu parametre, tüm NLU (GLUE) görevlerinde hem RoBERTa-base hem de RoBERTa-large modelleri için 100.0 veya 150.0 olarak ayarlanabilir. Bu parametre, tüm talimat ayarlamalarında (instruction tuning) LLaMA ailesi modelleri için 300.0 olarak ayarlanabilir. Bu parametre, tüm görüntü sınıflandırma görevlerinde hem ViT-base hem de ViT-large modelleri için 300.0 olarak ayarlanabilir. - random_loc_seed (
int) — Frekansların rastgele konumu için, yani spektral giriş matrisi için tohum. - target_modules (
Union[list[str],str]) — FourierFT ile değiştirilecek modül adlarının listesi veya modül adlarının regex ifadesi. Örneğin, [‘q’, ‘v’] veya ‘.decoder.(SelfAttention|EncDecAttention).*(q|v)$‘. Yalnızca lineer katmanlar desteklenir. - 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. - 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. - bias (
str) — FourierFT için sapma türü. ‘none’, ‘all’ veya ‘fourier_only’ olabilir. - modules_to_save (
list[str]) — FourierFT katmanları dışında, eğitilebilir olarak ayarlanacak ve nihai checkpoint'te kaydedilecek modüllerin listesi. Örneğin, Sınıflandırma (Sequence Classification) veya Token Sınıflandırma görevlerinde, son katmanclassifier/scorerastgele başlatılır ve bu nedenle eğitilebilir olmaları ile kaydedilmeleri gerekir. - layers_to_transform (
Union[list[int],int]) — Dönüştürülecek katman indeksleri. Bu argüman belirtilirse, PEFT yalnızca bu listede belirtilen katman indekslerini dönüştürür. Tek bir tamsayı geçirilirse, PEFT yalnızca bu indeksteki katmanı dönüştürür. - layers_pattern (
Optional[Union[List[str], str]]) — Katman desen adı, yalnızcalayers_to_transformNone'den farklıysa ve katman deseni ortak katman desenlerinde yer almıyorsa kullanılır. Bu, genellikle'layers'veya'h'olarak adlandırılan modelinnn.ModuleListhedeflenmelidir. - n_frequency_pattern (
dict) — Varsayılan olarak belirtilenden farklı olan n_frequency değerlerine sahip katman adlarından veya regexp ifadelerinden yapılan eşleme. Örneğin,{model.decoder.layers.0.encoder_attn.k_proj: 1000}. - init_weights (
bool) — Fourier ağırlıklarının başlatılması. Spektrum standart normal dağılıma başlatılıyorsa bunu False (varsayılan) olarak ayarlayın. Spektrum sıfırlara başlatılıyorsa bunu True olarak ayarlayın.
Bu, FourierFTModel yapılandırmasını depolamak için kullanılan yapılandırma sınıfıdır.
FourierFTModel
sınıf peft.FourierFTModel
< 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) — Uyarlanacak model. - config (FourierFTConfig) — FourierFT 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
FourierFT modeli.
Önceden eğitilmiş bir transformers modelinden FourierFT modeli oluşturur.
Yöntem, https://huggingface.co/papers/2405.03003 adresinde ayrıntılı olarak açıklanmıştır.
Öznitelikler:
- model (PreTrainedModel) — Uyarlanacak model.
- peft_config (FourierFTConfig): Fourier modelinin yapılandırması.