Что такое LoRA и почему она работает (low-rank гипотеза)?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
LoRA — это способ дообучать большие модели, не изменяя все их веса, а добавляя небольшие обучаемые низкоранговые матрицы. Это сильно снижает требования к памяти, ускоряет обучение и упрощает хранение адаптаций для разных задач. Работает это потому, что для многих задач реальная “полезная” поправка к весам модели имеет низкую эффективную размерность.
Определение:
LoRA (Low-Rank Adaptation) — это метод параметр-эффективного fine-tuning, при котором исходные веса модели замораживаются, а вместо полного обновления матриц весов обучается их низкоранговая добавка.
Если в обычном fine-tuning обновляется вся матрица весов W, то в LoRA учатся две маленькие матрицы A и B, а итоговое изменение задаётся как ΔW = B @ A, где ранг этой аппроксимации значительно меньше размерности исходной матрицы.
Идея low-rank гипотезы в этом контексте такая: для адаптации к новой задаче не нужно менять все степени свободы модели, достаточно небольшой подпространственной поправки. Иными словами, оптимальное изменение весов часто лежит в низкоразмерной структуре.
Пример использования:
Допустим, есть большая языковая модель, и нужно адаптировать её под стиль поддержки клиентов компании. Полный fine-tuning дорог по памяти и времени, а LoRA позволяет обучить только небольшие адаптеры для слоёв внимания или MLP, сохранив базовую модель неизменной.
# Псевдокод: идея LoRA, а не конкретная библиотека
W_frozen = load_pretrained_weight()
A = init_small_matrix(rank=8, in_dim=W_frozen.in_dim)
B = init_small_matrix(out_dim=W_frozen.out_dim, rank=8)
def forward(x):
# базовое преобразование
base = x @ W_frozen
# low-rank поправка
delta = x @ (B @ A)
return base + delta
При инференсе можно либо держать LoRA отдельно, либо “слить” ΔW в основной вес, если нужен один объединённый набор параметров.
Пояснение кода:
В этом примере код показывает принцип, а не точную реализацию из фреймворка.
W_frozen— это исходный вес предобученной модели, который не обучается.AиB— маленькие обучаемые матрицы, размер которых определяется выбранным рангомr.x @ W_frozen— обычный проход через слой.x @ (B @ A)— добавка к выходу, которая и адаптирует модель под новую задачу.- В процессе обучения меняются только
AиB, а не вся большая матрицаW. - Так как
rобычно маленький, число обучаемых параметров резко уменьшается.
Если говорить практично, это означает: можно дообучать большие модели на меньшем железе, быстрее экспериментировать и хранить много разных “надстроек” под разные задачи.
Ключевые моменты:
- LoRA — это параметр-эффективный fine-tuning: база модели заморожена, обучается только низкоранговая добавка.
- Экономия памяти и вычислений достигается за счёт того, что вместо полной матрицы учатся две маленькие.
- Low-rank гипотеза: полезное изменение весов для новой задачи часто имеет низкую эффективную размерность.
- LoRA удобно использовать для LLM, потому что можно иметь одну базовую модель и множество лёгких адаптеров.
- Обычно LoRA проще хранить, распространять и комбинировать, чем полностью дообученные копии моделей.
- Это не “магия”, а практическая аппроксимация: качество зависит от ранга, места вставки адаптеров и самой задачи.