LoRA (Low-Rank Adaptation) — параметро-эффективное дообучение больших моделей

LoRA (Low-Rank Adaptation) — метод параметро-эффективного дообучения больших моделей (LLM, диффузионные), в котором базовые веса замораживаются, а обучаемыми становятся только малые низкоранговые матрицы-адаптеры. Такой подход резко снижает требования к видеопамяти и датасету, ускоряет обучение и позволяет хранить/комбинировать множество «тонких» настроек одной и той же модели.

LoRA (Low-Rank Adaptation) — параметро-эффективное дообучение больших моделей

Не путать с 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, инстр. дообучение)

  1. База: 7B-модель в bf16; датасет 100k инструкций.
  2. LoRA: Wq/Wv, r=16, α=16, dropout=0,1.
  3. Оптимизатор: AdamW, lr=2e-4, batch-эквивалент 256 токенов/шаг (с накоплением), 2–3 эпохи.
  4. Мониторинг: длина ответов, фактические ошибки (manual eval), перплексия на dev-наборе.
  5. Затем добавьте 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 с декомпозицией на норму/направление.

См. также

Task Runner