LoRA (Low-Rank Adaptation)

LoRA (Low-Rank Adaptation) je technika, ako doladiť veľký model na konkrétnu úlohu tak, že necháš pôvodné váhy „zamrznuté“ a učíš len malé doplnkové vrstvy — výsledkom je lacnejší a praktickejší fine-tuning.

1. Čo to je (definícia + analógia)

  • Jadro: namiesto úpravy miliónov/miliárd parametrov trénuješ malé „adaptéry“, ktoré modelu jemne zmenia správanie.

  • Analógia s okuliarmi: oči (základný model) necháš rovnaké, ale pridáš šošovky (LoRA), ktoré zmenia, ako vidíš detail pre konkrétnu situáciu.

  • Prečo low-rank: zmena správania sa dá často vystihnúť „menšou“ úpravou než plnou maticou váh.

  • Kde sa s tým stretneš: pri prispôsobovaní open-source modelov alebo pri generovaní obrázkov/štýlov, kde sa LoRA používa ako „balíček štýlu“.


2. Ako to funguje

  • Zmrazenie základného modelu: pôvodné váhy sa nemenia, čo znižuje riziko, že „rozbiješ“ všeobecné schopnosti.

  • Pridanie adaptérov: do vybraných vrstiev sa vložia malé trénovateľné matrice.

  • Tréning len adaptérov: učíš menej parametrov, takže:

    • Rýchlejšie trénuješ,

    • potrebuješ menej pamäte,

    • vieš spraviť viac variantov.

  • Použitie v inferencii: LoRA môže byť:

    • Pripojená dynamicky (zapnúť/vypnúť podľa potreby),

    • alebo zliata do váh (podľa implementácie a použitia).

  • Praktický detail: kvalita závisí od toho, kam adaptér vložíš a akú „kapacitu“ (rank) mu dáš.


3. Prečo je to dôležité / kde sa to používa

  • Personalizácia bez obrovských nákladov: firmy aj jednotlivci vedia mať vlastné verzie modelu pre:

    • špecifický štýl komunikácie (support, interné odpovede),

    • doménu (práca s internými dokumentmi, technická terminológia),

    • formát (šablóny, JSON výstupy, konzistentné štruktúry).

  • Ekosystém „malých doplnkov“: namiesto jedného monolitického modelu vzniká knižnica LoRA modulov:

    • rôzne štýly, rôzne úlohy, rôzne jazyky.
  • Experimentovanie: vieš rýchlo porovnať, ktorý adaptér funguje lepšie, bez pretrénovania všetkého.


4. Výhody a obmedzenia

Prístup Výhoda Kedy zlyháva
LoRA Lacný fine-tuning, malé súbory, rýchle iterácie Keď potrebuješ hlbokú zmenu správania naprieč celým modelom
Plný fine-tuning Maximálna flexibilita Drahý, riziko „zabudnutia“ (catastrophic forgetting)
Len promptovanie Nula tréningu, rýchle nasadenie Keď chceš stabilný štýl a prompt je príliš krehký
  • Obmedzená kapacita: malý adaptér nemusí stačiť na komplexnú doménu.

  • Konflikty medzi adaptérmi: viac LoRA naraz môže viesť k nečakanému miešaniu štýlov.

  • Kvalita dát: LoRA ti neodpustí zlé príklady — ak trénuješ na chaotických dátach, dostaneš chaotické správanie.


5. Praktické použitie

  • Pre bežného používateľa: ak používaš nástroje, ktoré ponúkajú „štýlové balíčky“ alebo doménové doplnky, často ide práve o LoRA alebo podobný adaptér.

  • Pre tím, ktorý chce vlastný štýl: LoRA je dobrá voľba, keď chceš:

    • konzistentný tón (napr. stručné odpovede, vždy s bodmi),

    • dodržiavanie formátu (napr. JSON štruktúry),

    • doménové frázy (produktové názvy, interné skratky).

  • Tipy, ktoré šetria nervy:

    • Verzionovanie: označ si, na akých dátach a s akými nastaveniami LoRA vznikla.

    • Test set: maj sadu 30–100 otázok, na ktorých vždy porovnáš starú a novú verziu.

    • Jasné ciele: trénuj na jednu vec (štýl, doména, formát) — miešanie cieľov bez kontroly sa rýchlo pokazí.

  • Kedy to nepoužiť: ak je problém skôr v chýbajúcich informáciách než v správaní, často viac pomôže RAG (pripojenie znalostí) než LoRA.


6. Matematika v jednej rovnici (a v kóde)

LoRA aproximuje zmenu váhovej matice ΔW ako súčin dvoch malých matíc nízkeho ranku r:

W_eff = W_frozen + (B · A) · (alpha / r)
        \______/   \_____/
        zamrznuté   trénované (A: r×d, B: d×r) — zlomok parametrov
class LoRALinear(nn.Module):
    def __init__(self, base, r=8, alpha=16):
        super().__init__()
        self.base = base                      # zamrznuté pôvodné váhy
        self.A = nn.Parameter(torch.randn(r, base.in_features) * 0.01)
        self.B = nn.Parameter(torch.zeros(base.out_features, r))
        self.scale = alpha / r
    def forward(self, x):
        return self.base(x) + (x @ self.A.T @ self.B.T) * self.scale

B sa inicializuje na nulu, takže na začiatku sa model správa presne ako pôvodný a postupne sa doladí.

7. Súvislosti

  • Transfer learning: LoRA je úsporná forma fine-tuningu (parameter-efficient).
  • Gradient Descent: trénujú sa len adaptéry — nízky learning rate je kľúčový.
  • Overfitting: pri malom datasete LoRA ľahko „prestrelí".
  • Diffusion models: v generovaní obrázkov sú LoRA „balíčky štýlu".

Zhrnutie

  • LoRA umožní doladiť model tým, že trénuješ malé adaptéry namiesto celých váh.
  • Výhoda je nízka cena, rýchlosť a modularita — vieš mať viac špecializovaných variantov a len ich prepínať.
  • Limity sú kapacita adaptéra, možné konflikty a veľká závislosť od kvality tréningových dát.
  • V praxi je to ideálne na štýl, formát a doménové doladenie bez extrémnych nákladov; keď chýbajú znalosti (nie štýl), často viac pomôže RAG.