Hoppa till innehållet
AI-grafen
F· AI engineeringLaboration· ca 75 min· container

Labb: LoRA på ett litet nät — träna bara adaptrarna

Implementera en LoRA-adapter (W + BA, rank r), frysa basmodellen, träna bara adaptrarna på en ny uppgift och jämföra parameterantal och resultat med full finjustering.

Lär ut: lora · Kräver: matrisfaktoriseringtrana-ett-neuronnat-i-pytorch

Teori

ΔW = BA där B är d×r och A är r×k. Med r ≪ min(d,k) är antalet tränade parametrar r(d+k) i stället för dk. B initieras till noll så att modellen startar oförändrad.

Deluppgifter

  1. LoRALinear — `LoRALinear(base: nn.Linear, r, alpha)` — fryser base, lägger till A (r×in, liten normal) och B (out×r, nollor), forward = base(x) + (alpha/r)·(x Aᵀ) Bᵀ.
  2. apply_lora — `apply_lora(model, r, alpha)` byter ut alla nn.Linear i ett nn.Sequential; `trainable_params(model)`.
  3. finjustera — `finetune(model, X, y, steps, lr)` tränar bara parametrar med requires_grad; `merge(lora_layer)` returnerar en nn.Linear med W + (alpha/r)BA.

Evals: lora-vs-full (lora_acc >= 0.85)

Logga in för att köra laborationen.

Förväntade resultat

LoRA med r=4 tränar < 10 % av parametrarna och når ≥ 0,85 accuracy på den skiftade uppgiften; merge ger samma utdata som adapter-modellen.

Vanliga fel

  • B initierat slumpmässigt → modellen ändras redan före träning.
  • Glömmer frysa basvikterna (requires_grad=False).
  • Skalning alpha/r saknas i merge.