PEFT documentation
DeLoRA: Çözümlenmiş Düşük Sıralı Uyarlanma
DeLoRA: Çözümlenmiş Düşük Sıralı Uyarlanma
DeLoRA, öğrenilebilir düşük rütbeli matrisleri normalizeleyip ölçekleyerek önceden eğitilmiş ağırlıklara göre Frobenius sınırını dolaylı olarak koruyan parametre-verimli ince ayar tekniğidir. Bu, ağırlık güncellemelerinin yönünü (BA terimi) ve büyüklüğünü (sınır terimi) öğrenmeyi etkili bir şekilde ayrıştırarak, uyarlanmış ağırlıklardaki felaket kaymaları önler ve hiperparametre seçimlerine karşı sağlamlığı artırır.
Not:
- standart LoRA varyantları için kullanılan öğrenme hızından 10-100 kat daha büyük bir öğrenme hızı kullanın (tipik değerler 1e-3/1e-2/..)
- başlangıç sınır parametresi lambda'nın çok küçük olmamasını sağlayın (tipik değerler 10/15/.. civarındadır). Farklı katmanlara farklı lambda değerleri ayarlamak mümkündür
DeLoRA şu anda aşağıdaki kısıtlamalara sahiptir:
- Yalnızca nn.Linear katmanları 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:
Parametre Verimli İnce Ayar (PEFT) yöntemleri, büyük ölçekli önceden eğitilmiş modellerin yaygın olarak kullanılabilir hale gelmesi sayesinde son zamanlarda önemli bir popülerlik kazanmıştır. Bu yöntemler, minimal hesaplama maliyetiyle aşağı akış görevlerine hızlı uyarlama imkânı sunar. Ancak LoRA gibi popüler ince ayar yöntemleri, hiperparametre seçimleri veya uzatılmış eğitim rejimleri söz konusu olduğunda sınırlı bir sağlamlık sergiler ve bu durum, kutudan çıktığı gibi en iyi performansı engeller. Buna karşılık, ETHER gibi sınırlı yaklaşımlar daha yüksek sağlamlık sağlar ancak aşırı düşük rütbeli uyarlamalara ve sabit güçlü dönüşümlere sınırlıdır; bu da uyarlamalarının ifade gücünü azaltır. Bu çalışmada, öğrenilebilir düşük rütbeli matrisleri normalize eden ve ölçekleyen, yeni bir ince ayar yöntemi olan Decoupled Low-rank Adaptation (DeLoRA) öneriyoruz. Dönüşümün mesafesini sınırlayarak DeLoRA, açısal öğrenmeyi uyarlanma gücünden etkili bir şekilde ayrıştırır ve performansı ödün vermeden sağlamlığı artırır. Konu odaklı görüntü üretimi, doğal dil anlama ve talimat ayarı üzerindeki değerlendirmeler aracılığıyla, DeLoRA'nın rakip PEFT yöntemlerinin performansına eşit veya üstü performans sergilerken daha güçlü bir sağlamlık gösterdiğini gösteriyoruz.
Karma performans değerlendirmesi genel bakış
API
DeloraConfig
sınıf peft.DeloraConfig
< 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 = 8delora_lambda: int = 15module_dropout: float = 0.0target_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonebias: Literal['none', 'all', 'delora_only'] = 'none'init_weights: bool = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonerank_pattern: Optional[dict] = <factory>lambda_pattern: Optional[dict] = <factory>modules_to_save: Optional[list[str]] = None )
Parametreler
- r (
int) — DeLoRA adaptörünün rütbesi. - delora_lambda (
int) — DeLoRA adaptörünün sınırının başlangıç değeri. Bu değişken, ağırlık değişiminin Frobenius normuna bir üst sınır koyarak, ince ayarlanmış modelin orijinal modelden çok fazla sapmasını önler. - module_dropout (
float) — Eğitim sırasında DeLoRA modüllerini devre dışı bırakmak için kullanılan dropout olasılığı. - 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 sona erip ermediği kontrol edilir. Bu parametre ‘all-linear’ olarak belirtilirse, çıktı katmanı hariç tüm linear/Conv1D modülleri 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. - bias (
str) — Bias type for DeLoRA. Can be ‘none’, ‘all’ or ‘delora_only’. If ‘all’ or ‘delora_only’, the corresponding biases will be updated during training. Be aware that this means that, even when disabling the adapters, the model will not produce the same output as the base model would have without adaptation. - init_weights (
bool) — Adapter ağırlıklarının başlatılmasının yapılıp yapılmayacağı.True(varsayılan) ise: A, kaiming uniform başlatma ile başlatılırken B, sıfırlarla başlatılır.Falseise: A ve B, kaiming uniform ile başlatılır ve anında sıfır olmayan bir delta katkıda bulunur. Bu, normal kullanım için genellikle önerilmez. - 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. - rank_pattern (
dict) —rile belirtilen varsayılan rank'ten farklı rank'lara sahip katman adlarının veya regexp ifadelerinin eşlemesi. Örneğin,{'^model.decoder.layers.0.encoder_attn.k_proj': 16}. - lambda_pattern (
dict) — Varsayılandelora_lambdaile belirtilen varsayılan lambda'dan farklı olan lambdalara, katman adlarından veya regexp ifadelerinden yapılan eşleme. Örneğin,{'^model.decoder.layers.0.encoder_attn.k_proj': 16}. - modules_to_save (
Optional[List[str]]) — Adapter katmanları dışında, eğitilebilir olarak ayarlanacak ve nihai checkpoint'te kaydedilecek modüllerin listesi.
Bu, bir DeloraModel yapılandırmasını depolamak için kullanılan yapılandırma sınıfıdır.
DeloraModel
sınıf peft.DeloraModel
< 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 (DeloraConfig) — DeLoRA modelinin yapılandırması.
- adapter_name (
str) — Adaptörün adı, varsayılan olarak"default"'tır.
Dönüş değeri
torch.nn.Module
DeLoRA modeli.
Önceden eğitilmiş bir transformers modelinden DeLoRA modeli oluşturur.
Yöntem, DeLoRA: Decoupled Low-rank Adaptation makalesinde ayrıntılı olarak açıklanmıştır.
Öznitelikler:
- model (PreTrainedModel) — Uyarlanacak model.
- peft_config (DeloraConfig): DeLoRA modelinin yapılandırması.