LoRA
Masz duży model i chcesz dostosować go do stylu swoich dokumentów. Uczenie wszystkich jego wag — liczb sterujących obliczeniami — wymaga dużo pamięci. Czy można nauczyć tylko mniejszą poprawkę do tego, co model już potrafi?
LoRA (Low-Rank Adaptation) zachowuje bazowe wagi i uczy dwie mniejsze macierze, czyli tabele liczb, opisujące ich zmianę. Iloczyn tych tabel daje poprawkę dodawaną do wybranej macierzy modelu.
Zamiast niezależnie zmieniać każde pole dużej tabeli, aktualizacja przechodzi przez wąski pośredni wymiar. Jego rozmiar, zwany rankiem r, ogranicza liczbę niezależnych kierunków poprawki. Oszczędność dotyczy trenowanych parametrów, a nie usunięcia bazowego modelu z pamięci.
Małe r daje tańszy, lecz mniej swobodny sposób dostosowania. LoRA jest wariantem Fine-tuning; nie gwarantuje jakości bez dobrych danych i ustawień. Poniższy przykład pozwala policzyć liczbę uczonych liczb oraz odróżnić ją od całkowitego zapotrzebowania na pamięć.
Mechanizm i szczegóły
W oryginalnej parametryzacji dla macierzy bazowej używamy:
i zawierają uczone parametry. Małe ogranicza rank aktualizacji, a ustala jej skalę. Ograniczenie dotyczy zmiany wag, nie rank całej macierzy bazowej. Mechanizm opisują Hu et al., LoRA: Low-Rank Adaptation of Large Language Models, §4.1.
Ile parametrów rzeczywiście oszczędzamy
Własny przykład: macierz 4096 × 4096 ma 16 777 216 parametrów. Dla dwie macierze LoRA mają razem parametrów. To 256 razy mniej trenowanych parametrów tej jednej macierzy, przy założeniu, że uczymy tylko jej adapter.
Bazowe wagi nadal trzeba przechowywać. Potrzebna jest też pamięć na aktywacje i pozostałe elementy obliczeń, więc z tego przykładu nie wynika 256-krotnie mniejsze zużycie VRAM. W §4.2 autorzy osobno opisują oszczędności stanu optymalizatora i rozmiaru zapisywanego adaptera.
W Transformer LoRA można zastosować do wybranych projekcji attention, ale metoda nie jest ograniczona do jednej pary macierzy. Ostateczny zakres treningu zależy od konfiguracji: rank, wskazanych warstw i ewentualnych dodatkowych uczonych modułów. Dokumentacja PEFT opisuje m.in. r, target_modules oraz modules_to_save.
Starszy wpis o skrypcie treningowym DeepSeek R1 zawiera przykład konfiguracji LoRA. Jest materiałem powiązanym; powyższa definicja opiera się na oryginalnej pracy i dokumentacji.