LoRA ve QLoRA nasıl çalışır? Rank (r) ve alpha nasıl seçilir?
Cevap
LoRA (Low-Rank Adaptation), büyük bir modelin ağırlıklarını dondurup her hedef ağırlık matrisine küçük, eğitilebilir düşük ranklı bir güncelleme ekleyen bir PEFT (parameter-efficient fine-tuning) yöntemidir.
Matematik
Orijinal ağırlık W ∈ R^(d×k) dondurulur. Güncelleme iki küçük matrisin çarpımı olarak yazılır:
W' = W + ΔW = W + (alpha / r) · B·A
A ∈ R^(r×k), B ∈ R^(d×r), r << min(d, k)Arastgele,Bsıfırla başlatılır. Böylece eğitim başındaΔW = 0olur ve model orijinal davranışla başlar.- Örnek: d = k = 4096, r = 16 için tam matris 16,7M parametre, LoRA ise
2 × 4096 × 16 ≈ 131Kparametre (yaklaşık %0.8). - Hipotez: Fine-tuning sırasındaki ağırlık değişimi düşük "intrinsic rank"a sahiptir.
- Eğitim sonrası
BAorijinal ağırlığa birleştirilebilir (merge). Böylece inference'ta ek gecikme olmaz. Ya da farklı görevler için farklı adapter'lar tek bir base model üzerinde dinamik olarak değiştirilebilir.
QLoRA
QLoRA (Dettmers ve ark., 2023), base modeli 4-bit NF4 formatında dondurur, LoRA adapter'larını BF16'da eğitir. Ek olarak quantization sabitlerini de quantize eden double quantization ve bellek taşmalarını CPU'ya aktaran paged optimizer kullanır. Sonuç: 65B'lik bir model tek bir 48 GB GPU'da fine-tune edilebilmiştir. Kalite kaybı genelde azdır, ama eğitim dequantization yüzünden biraz daha yavaştır.
Hiperparametreler
| Parametre | Tipik değer | Not |
|---|---|---|
| r | 8–64 | Basit görevde düşük yeterli. Çok düşükse kapasite yetmez, çok yüksekse bellek artar ve küçük veride overfit riski |
| alpha | Genelde r veya 2r | Güncellemenin ölçeği, alpha/r oranı efektif LR gibi davranır |
| target_modules | Tüm lineer katmanlar (q, k, v, o, gate, up, down) | Sadece q, v'ye uygulamak genelde daha zayıf |
| learning rate | 1e-4 – 2e-4 | Tam fine-tuning'den daha yüksek |
| dropout | 0–0.1 |
from peft import LoraConfig, get_peft_model
cfg = LoraConfig(r=16, lora_alpha=32, lora_dropout=0.05, task_type="CAUSAL_LM",
target_modules=["q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj"])
model = get_peft_model(base_model, cfg)
model.print_trainable_parameters()Diğer PEFT yöntemleri: prefix tuning, prompt tuning, adapter katmanları, DoRA (ağırlığı büyüklük ve yön olarak ayırır).
İlgili LLM & Üretken YZ soruları
- RAG'de chunking stratejisi, hybrid search ve reranker neden önemlidir? Retrieval kalitesi düşükse ne yaparsınız?
- Şirket içi dokümanlar (Confluence, PDF, wiki) üzerinde soru cevaplayan bir RAG sistemi tasarlayın.
- Hangi prompt engineering tekniklerini kullanırsınız? Few-shot ve chain-of-thought ne zaman işe yarar?
- LLM'lerde temperature, top-k ve top-p (nucleus) sampling parametreleri ne işe yarar?
- Production'daki bir LLM uygulamasında maliyeti ve gecikmeyi (latency) nasıl düşürürsünüz?
- Prompt injection nedir? LLM tabanlı bir uygulamayı ve agent'ı buna karşı nasıl korursunuz?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.