LoRA — это метод параметро-эффективного дообучения, при котором базовую модель замораживают, а обучают только небольшие низкоранговые матрицы, добавленные к исходным весам. На практике это позволяет адаптировать LLM, encoder- и diffusion-модели с меньшими затратами памяти и диска, чем при полном fine-tuning. Метод плохо подходит, если нужно радикально перестроить поведение модели, изменить архитектуру, добавить новые обучаемые блоки или выжать максимум качества без жестких ограничений по ресурсам: в таких случаях полный fine-tuning, continued pretraining или другая схема адаптации могут дать лучший результат.
Простыми словами
В обычном fine-tuning вы меняете все или почти все веса модели. У большой модели это означает много памяти под градиенты, состояния оптимизатора и отдельную копию весов для каждой версии. LoRA решает задачу иначе: исходные веса остаются как есть, а рядом с некоторыми слоями появляются небольшие обучаемые «надстройки».
Идея в том, что для многих прикладных задач не нужно переписывать весь слой. Достаточно внести компактное изменение в его поведение. LoRA приближает это изменение с помощью матриц малого ранга. Поэтому метод и называется низкоранговой адаптацией.
- Базовая модель одна и та же.
- Для каждой задачи можно хранить отдельный небольшой адаптер.
- Адаптер можно подключать, отключать или объединять с весами модели.
Для команды это удобно: одна базовая модель обслуживает несколько доменов, а различия между ними упакованы в компактные файлы адаптеров.
Как это работает
Математическая идея
Пусть в линейном слое есть матрица весов W. Полный fine-tuning учит обновление ΔW той же размерности, что и W. В LoRA это обновление представляют как произведение двух небольших матриц: ΔW = B x A, где их внутренний размер задается рангом r. Тогда вместо обучения полной матрицы модель учит только параметры A и B, а исходная W остается замороженной.
Во время прямого прохода слой фактически использует W + ΔW. Часто к этому добавляют масштабирование, например через коэффициент alpha. Если ранг невелик относительно размера слоя, обучаемых параметров становится существенно меньше, чем при полном обновлении весов.
Что настраивают на практике
LoRA обычно вешают не на все подряд, а на выбранные линейные проекции. В LLM это часто проекции внимания и иногда MLP-слои. Выбор зависит от модели, бюджета памяти и задачи.
| Параметр | Что означает | Практический эффект |
|---|---|---|
r |
Ранг адаптации | Чем выше, тем больше выразительность и больше память |
alpha |
Масштаб вклада LoRA | Влияет на силу обновления и стабильность обучения |
| Target modules | Какие слои адаптируются | Определяет компромисс между качеством и стоимостью |
| LoRA dropout | Регуляризация адаптера | Может уменьшить переобучение на маленьком датасете |
| Merge | Слияние с базовыми весами | Упрощает инференс, если не нужен отдельный адаптер |
Ключевое следствие для инженера: памяти требуется меньше прежде всего потому, что оптимизатор и градиенты хранятся только для параметров адаптера. Но это не отменяет стоимость активаций. Если у вас длинный контекст, большой batch size или крупная модель, основным ограничением все равно может остаться память под forward/backward, а не только число обучаемых весов.
Зачем нужно
- Снизить стоимость дообучения. Это главная причина использовать LoRA на больших моделях.
- Хранить несколько версий поведения. Вместо полной копии модели можно держать набор адаптеров под разные продукты, языки или домены.
- Упростить выпуск изменений. Адаптер легче передавать между командами и проще версионировать.
- Быстро проверять гипотезы. Для прикладных экспериментов LoRA обычно удобнее полного fine-tuning.
Типичные задачи: адаптация стиля ответа, инструкционного поведения, отраслевой терминологии, классификации, извлечения структуры из текста, доменной генерации или персонализации под внутренние правила. Для diffusion-моделей LoRA часто применяют, когда нужно доучить конкретный визуальный стиль или объект без обучения всей сети.
Но LoRA не заменяет все остальные методы. Если задача на самом деле требует внешнего и часто меняющегося знания, обычно полезнее сначала настроить retrieval и качество контекста, а уже потом решать, нужен ли fine-tuning. Если проблема в архитектуре, длине контекста, токенизаторе или мультимодальном интерфейсе, LoRA не является прямым ответом.
Пример
Практический сценарий: команда хочет адаптировать русскоязычную instruction-модель для внутренней поддержки, чтобы она отвечала в нужном формате, знала терминологию продукта и соблюдала политику эскалации.
- Берут базовую модель, которая уже уверенно понимает русский язык и умеет следовать инструкциям.
- Готовят датасет из проверенных диалогов поддержки: вопрос, релевантный контекст, правильный ответ, метки отказа в опасных случаях.
- Подключают LoRA к проекциям внимания, например к
q_projиv_proj, а базовые веса замораживают. - Обучают адаптер на целевом формате ответов и проверяют не только качество текста, но и соблюдение правил: когда отвечать, когда запрашивать уточнение, когда передавать запрос оператору.
- На проде хранят одну базовую модель и отдельный адаптер для службы поддержки. Для другого продукта можно выпустить второй адаптер, не дублируя всю модель.
Что дает такой подход: модель начинает лучше использовать нужную терминологию и формат, а инфраструктуре не нужно хранить несколько полных копий весов. Чего он не дает сам по себе: если базовая модель слабо рассуждает, галлюцинирует на неизвестных данных или не имеет доступа к актуальным документам, LoRA это полностью не исправит. Тут нужны качественные данные, оценка, а иногда и RAG.
Заблуждения и ограничения
- «LoRA всегда заменяет полный fine-tuning». Нет. Если цель — максимальное качество на узкой задаче и ресурсы позволяют, полный fine-tuning может выиграть.
- «LoRA ничего не стоит на инференсе». Не совсем. Если адаптер не слит с базовыми весами, есть накладные расходы на его загрузку и управление версиями. При слиянии эти расходы меньше, но теряется гибкость.
- «Чем больше ранг, тем лучше». После некоторой точки рост ранга может почти не улучшать качество, но увеличивает память и риск переобучения.
- «LoRA исправит слабую базовую модель». Нет. Если база плохо знает язык, слабо следует инструкциям или ошибается в базовых паттернах, адаптеру часто не на что опереться.
- «LoRA подходит для любых изменений». Нет. Метод не предназначен для смены архитектуры, расширения словаря, изменения длины контекста или добавления новых модальностей сам по себе.
Еще одно практическое ограничение: качество LoRA сильно зависит от выбора target modules и данных. Маленький, шумный или противоречивый датасет легко приводит к хрупкому поведению. Поэтому оценка должна проверять не только loss, но и реальные бизнес-критерии: формат, отказоустойчивость, устойчивость к перефразировкам, безопасность и совместимость с системным промптом.
Частые вопросы
Нужно ли обновлять все веса модели?
Нет. В классической схеме LoRA базовые веса заморожены, а обучение идет только по параметрам адаптера. Это и дает экономию памяти и удобство хранения.
Можно ли использовать несколько LoRA-адаптеров на одной базе?
Да. Это один из основных практических сценариев: одна базовая модель и несколько адаптеров под разные задачи, домены или клиентов. Но нужно контролировать совместимость версий модели и конфигураций адаптеров.
Подходит ли LoRA только для LLM?
Нет. Метод применяют и к другим моделям с крупными линейными преобразованиями, включая diffusion-модели и некоторые encoder-архитектуры. Принцип тот же: заморозить базу и обучать компактное обновление.
Что выбрать: LoRA или QLoRA?
QLoRA обычно означает обучение LoRA-адаптера поверх квантизованной базовой модели, чтобы уместить обучение в меньшую память. Это полезно, когда видеопамяти мало, но усложняет стек и не всегда одинаково удобно для всех моделей и сред. Если памяти достаточно и нужен более простой пайплайн, обычная LoRA часто практичнее.
Связанные понятия
| Термин | Связь с LoRA |
|---|---|
| PEFT | Общий класс параметро-эффективных методов дообучения; LoRA — один из самых популярных вариантов |
| Fine-tuning | Полное дообучение всех или почти всех весов; базовая альтернатива LoRA |
| Adapters | Широкий класс подключаемых модулей; LoRA можно рассматривать как легковесную форму адаптации слоев |
| Prompt tuning | Меняет не веса слоя, а обучаемые промпт-представления; обычно еще дешевле, но и ограничения сильнее |
| QLoRA | Комбинирует LoRA с квантизацией базовой модели для экономии памяти при обучении |
| Continued pretraining | Дообучение на больших корпусах для смещения распределения знаний; нужно, когда адаптера недостаточно |
Если упрощать выбор, то он такой: когда нужно недорого адаптировать уже сильную базовую модель под конкретную задачу и сохранить несколько версий поведения, LoRA обычно является первым кандидатом. Когда нужно изменить саму основу модели или максимально выжать качество без компромиссов по ресурсам, стоит смотреть шире.