LoRA (Low-Rank Adaptation) — метод параметро-эффективного дообучения больших моделей (LLM, диффузионные), в котором базовые веса замораживаются, а обучаемыми становятся только малые низкоранговые матрицы-адаптеры. Такой подход резко снижает требования к видеопамяти и датасету, ускоряет обучение и позволяет хранить/комбинировать множество «тонких» настроек одной и той же модели.
Не путать с LoRa (без большой буквы «R») — стандартом дальнобойной беспроводной связи. Здесь речь об адаптации весов нейросетей.
Связанные страницы: AI: общий обзор, RAG: хаб, Контекстное окно, Guardrails, Оценка (evals).
Интуиция и формула LoRA (Low-Rank Adaptation)
Идея проста: матрица весов слоя W меняется не полностью, а только через малую поправку ΔW низкого ранга.
Стандартная запись:
- W ≈ W₀ + ΔW, где W₀ — «замороженные» исходные веса;
- ΔW = A · Bᵀ, где A ∈ R^{d×r}, B ∈ R^{k×r}, а r ≪ min(d, k) — ранг адаптера.
Обучаются только параметры A и B (иногда с масштабированием α/r). Это даёт два ключевых эффекта:
- число обучаемых параметров снижается на порядок-два;
- итоговую «надстройку» легко хранить и распространять отдельно от базовой модели.
На инференсе адаптер можно:
- держать «на лету» (добавлять ΔW без изменения W₀);
- слить (merge) с базовыми весами и использовать как единую модель.
Куда «встраивают» LoRA в LLM
На практике LoRA ставят на линейные проекции в трансформере:
- Attention: матрицы Wq, Wk, Wv, Wo (особенно Wq/Wv);
- MLP: расширяющая и сжимающая проекции (up/down-proj).
Выбор целевых матриц — компромисс между качеством и бюджетом. Часто начинают с Wq/Wv, затем при необходимости добавляют Wo и MLP-слои.
Ключевые гиперпараметры
- rank r — «ёмкость» адаптера. Типично r = 4…64 для LLM среднего размера; выше — дороже, но гибче.
- α (lora_alpha) — коэффициент масштабирования ΔW (часто ставится α ≈ r, но подбирается эмпирически).
- dropout — регуляризация адаптера (например, 0,05…0,2).
- target_modules — список линейных слоёв, на которые вешаются адаптеры.
- bias — как обращаться со смещениями (обычно bias не обучают).
- init — начальная инициализация A/B (часто A — ноль, B — случайная малая).
Почему это работает
В высоких размерностях значимая часть полезных изменений весов хорошо аппроксимируется низким рангом. Обучение низкорангового «сдвига» обеспечивает:
- выборочность дообучения (модель не «переписывают» целиком);
- устойчивость (меньше переобучения на маленьких наборах);
- модульность (можно держать набор узкоспециализированных «надстроек» под разные домены/языки/тон).
QLoRA, DoRA и другие варианты
QLoRA — техника, сочетающая квантование базовой модели (часто 4-бит) и тренировку LoRA-адаптеров поверх неё. Это ещё сильнее уменьшает VRAM, сохраняя качество на уровне полноточного fine-tuning для многих задач. Важные детали:
- базовая модель в низкой разрядности (например, 4-бит NF4), градиенты считаются на адаптерах;
- полезна для инструкционного дообучения средних/крупных LLM на потребительских GPU.
DoRA (Decomposed/Weight-Rescaled LoRA) — модификация, которая отделяет направление и норму весов; позволяет добиться лучшего качества при той же ёмкости адаптера (часто стабильнее на высоких рангах).
Другие близкие идеи: IA³ (обучаемые скейлеры на активациях), LoRA+/LoCon/LoHa (вариации для vision/диффузионных моделей), AdapterFusion (комбинация нескольких адаптеров).
Применение LoRA
- Инструкционное дообучение LLM (инструкции, диалоги, формат ответов).
- Доменно-языковая адаптация (медицина/право/финансы; новые языки/стили).
- Кодовые модели (дообучение на репозиториях компании).
- Диффузионные модели (стили, персонажи, художественные техники).
- RLHF/RLAIF-контуры — на этапе supervised fine-tuning/претренировки критиков.
LoRA vs «полный» fine-tuning и другие PEFT
| Критерий | Полный fine-tuning | LoRA/QLoRA | Префикс/Prompt-тюнинг | IA³/Adapters |
|---|---|---|---|---|
| Обучаемые параметры | Все | Мало (A/B) | Очень мало (префиксы) | Мало (скейлеры/блоки) |
| Требования к VRAM | Высокие | Низкие/умеренные | Низкие | Низкие |
| Качество на узких задачах | Высокое | Сопоставимое при верных настройках | Ниже на сложных задачах | Сопоставимое |
| Совместимость/мердж | Полная модель | Лёгкий мердж/композиция | Композиция через промпт | Слияние зависит от реализации |
| Риск «затирания» знаний | Выше | Ниже | Низкий | Низкий |
Вывод: LoRA — золотая середина для бизнеса и исследований, где важны стоимость, оперативность и модульность.
Практика настройки (рецепты)
Бюджет VRAM и размер модели.
- До ~7B параметров: r=8…16, α=r, целевые модули Wq/Wv, затем при необходимости Wo.
- 13–34B: начните с r=16…32, добавляйте MLP-слои при недоборe качества.
- 70B+: QLoRA обязательна для потребительских GPU; выбирайте r=16…64 и прогоняйте сетку по α.
Датасет.
- 20–200 тыс. примеров для инструкционного дообучения — типичный порядок (можно меньше на узкие домены).
- Следите за качество/разнообразие, а не только за объёмом — LoRA легко переобучается на «узких» данных.
Оптимизация.
- Оптимизатор AdamW, lr 1e-4…3e-4 (для LoRA-параметров), weight decay малый или 0.
- lora_dropout 0,05…0,2 помогает против переобучения.
- Grad-accumulation и mixed precision (bf16/fp16) для стабильности.
Где ставить LoRA.
- Старт — Wq/Wv. Если задача требует «генеративного стиля», добавляйте Wo.
- Для «фактологичности» иногда помогает лёгкая адаптация MLP.
Валидация/безопасность.
- Держите dev-набор с проверками стиля/фактов/тонов.
- Не забывайте про guardrails и пороговые проверки — LoRA может усилить как полезные, так и нежелательные паттерны.
Инференс и композиция адаптеров
Режимы:
- Онлайн-суммирование: держать базовую модель и подмешивать ΔW из выбранного адаптера (или нескольких).
- Merge-in-place: слить LoRA в веса и выгрузить «моно-модель».
Композиция нескольких LoRA.
- Можно суммировать несколько ΔW с весами (scaling), но следите за конфликтами.
- Практика: один «базовый» адаптер (инструкции/стиль) + узкий доменный (медицина/право). Либо «по очереди» мерджить и тестировать.
Совместимость.
- Адаптеры чувствительны к точной версии базовой модели и названиям слоёв; фиксируйте «якоря» (commit/sha/архитектура).
Частые вопросы (FAQ)
Что значит «ранг r» и как его выбрать?
r — «ширина» низкоранговой аппроксимации (сколько базисных направлений умеет добавлять адаптер). Больше r — больше ёмкость и качество, но дороже. Типично начинают с r=8…16 и тестируют сетку.
Зачем нужен α (lora_alpha)?
Это масштаб ΔW. При малом r иногда ставят α≈r для сохранения «энергии» изменений. Но оптимум зависит от данных и слоёв.
Можно ли тренировать несколько LoRA на одной базе и потом комбинировать?
Да. Это одна из главных причин популярности LoRA: вы держите общую базу и «надеваете» разные адаптеры под задачу или язык. Комбинируйте аккуратно (скейлы, тесты на конфликты).
Когда хватит Prompt/Prefix-тюнинга, а когда нужен LoRA?
Если задача — форматирование стиля/тона и лёгкие инструкции, префиксы часто достаточно. Для новых знаний/домена и сложных политик — лучше LoRA/QLoRA.
В чём разница LoRA и QLoRA?
QLoRA — это LoRA поверх квантованной базы (например, 4-бит). Тренируются те же A/B, но VRAM ниже. Качество зависит от квантизации и задачи.
Сливать ли адаптер перед продом?
Если инфраструктура поддерживает «онлайн LoRA» стабильно, можно не сливать. Мердж упрощает деплой, но лишает гибкости динамически переключать адаптеры.
Типичные ошибки
- Несоответствие базы: адаптер обучен на другой версии модели/слоёв — качество падает или всё ломается.
- Слишком маленький r при сложной задаче — недообучение, шаблонные ответы.
- Отсутствие dev-валидации — адаптер «улучшил» BLEU/ROUGE, но испортил стиль/факты.
- Переобучение на узких данных — LoRA быстро «залипает» на артефактах. Используйте dropout/регуляризацию и разнообразный датасет.
- Агрегация адаптеров «как есть» — без весов/нормировок; приводит к конфликтам.
Пример «плана» эксперимента (LLM 7B, инстр. дообучение)
- База: 7B-модель в bf16; датасет 100k инструкций.
- LoRA: Wq/Wv, r=16, α=16, dropout=0,1.
- Оптимизатор: AdamW, lr=2e-4, batch-эквивалент 256 токенов/шаг (с накоплением), 2–3 эпохи.
- Мониторинг: длина ответов, фактические ошибки (manual eval), перплексия на dev-наборе.
- Затем добавьте Wo или увеличьте r до 32, если недобор качества на сложных запросах.
Сравнение подходов по сценариям
| Сценарий | Рекомендуемый подход |
|---|---|
| Стиль/тон для маркетинга, без новых фактов | Prompt-тюнинг или LoRA с малым r |
| Новый язык/домены документов | LoRA/QLoRA на целевых данных |
| Огромная база знаний, частая смена контента | RAG + компактная LoRA для стиля |
| Очень ограниченный GPU | QLoRA (4-бит база) + r=8…16 |
| Несколько команд/продуктов | Набор адаптеров и динамическое подключение под задачу |
Риски и ограничения
- Трансфер знаний ограничен: слишком узкая LoRA плохо переносится за пределы домена.
- Конфликты адаптеров при суммировании без нормировки.
- Зависимость от базовой архитектуры: смена модели часто требует переобучения LoRA.
- Юридические/лицензионные вопросы: соблюдайте лицензии базовой модели и датасетов.
Мини-глоссарий
- PEFT — Parameter-Efficient Fine-Tuning, класс методов дообучения с малым числом параметров.
- rank r — размер низкорангового подпространства адаптера.
- α (lora_alpha) — масштаб ΔW.
- Merge — слияние адаптера с базовыми весами.
- QLoRA — LoRA поверх квантованной базы.
- DoRA — модификация LoRA с декомпозицией на норму/направление.
