Как работает DoRA (Weight-Decomposed LoRA) и чем лучше LoRA?

Краткий тезис

DoRA (Weight-Decomposed Low-Rank Adaptation) — это улучшение метода LoRA, которое разлагает предобученные веса на две компоненты: magnitude (масштаб/норма) и direction (направление). В DoRA обучается только направление через низкоранговую адаптацию (как в LoRA), а масштаб дообучается отдельным скалярным параметром. Такой подход позволяет точнее аппроксимировать полное обновление весов, давая прирост качества на 2–5% на рассуждающих задачах (reasoning) при незначительном увеличении числа параметров (примерно ×1.1 по сравнению с LoRA). DoRA особенно эффективен в сценариях, где важна точность логических выводов, например при fine-tuning LLM для агентных систем.


1. Термин: LoRA (Low-Rank Adaptation) — основа для понимания DoRA

LoRA — это метод параметро-эффективного fine-tuning (PEFT), который вместо обновления всей матрицы весов W (размерности d×k) вводит две маленькие матрицы A (d×r) и B (r×k), где ранг r значительно меньше d и k. Обновление весов представляется как ΔW = BA. Во время обучения замораживаются исходные веса W, а обучаются только A и B. Это резко сокращает количество обучаемых параметров (в 100–1000 раз) и потребление памяти.

Ограничение LoRA: обновление ΔW имеет ранг не выше r. Это означает, что все изменения весов лежат в подпространстве размерности r. На практике для многих задач ранга 8–16 достаточно, но для сложных рассуждающих задач (математика, логика) такое ограничение может снижать качество, так как полное обновление весов может требовать более богатой структуры.


2. Идея DoRA: разделение magnitude и direction

DoRA исходит из наблюдения, что любая матрица весов может быть представлена как произведение нормы (magnitude) и единичного направления (direction):

W = m * (V / ||V||), где m — вектор норм (для каждого выходного нейрона), а V — матрица весов без нормировки.

При fine-tuning полное обновление ΔW можно разложить на изменение масштаба Δm и изменение направления ΔV. LoRA пытается аппроксимировать и то, и другое одним низкоранговым обновлением, что неоптимально.

DoRA предлагает:

  • Заморозить исходную матрицу W_0.
  • Разложить её на m_0 (норма по строкам) и V_0 (нормированные веса).
  • Обучать направление через стандартную LoRA: V' = V_0 + BA.
  • Обучать масштаб отдельно: m — это обучаемый вектор длины d (количество выходных нейронов), инициализированный как m_0.
  • Итоговый вес: W = m * (V' / ||V'||).

Таким образом, DoRA добавляет к LoRA всего d дополнительных параметров (обычно d — размер скрытого слоя, например 4096 для LLaMA-7B), что составляет примерно 10% от числа параметров LoRA (при r=8). Общее число обучаемых параметров ≈ 1.1× от LoRA.


3. Математическая формулировка DoRA

Пусть W_0 ∈ R^{d×k} — предобученная матрица весов (например, проекция Query в attention). Обозначим W_0 = [w_1; w_2; ...; w_d], где w_i — строка (вектор размерности k).

Шаг 1: разложение

m_0[i] = ||w_i||_2   (норма L2 каждой строки)
V_0[i] = w_i / m_0[i]   (нормированная строка)

Шаг 2: обучаемые параметры

  • m ∈ R^d — вектор масштабов, инициализируется как m_0.
  • A ∈ R^{d×r}, B ∈ R^{r×k} — низкоранговые матрицы LoRA, инициализируются стандартно (A — случайная, B — нулевая).

Шаг 3: прямой проход

V' = V_0 + BA
V_norm = V' / (||V'||_2 по строкам)   # нормализация каждой строки
W = diag(m) * V_norm   # поэлементное умножение строк на m

Шаг 4: градиенты

  • Градиенты по m вычисляются напрямую через цепное правило.
  • Градиенты по A и B проходят через нормализацию, что требует аккуратного вычисления (используется градиент нормировки).

На практике DoRA реализуется как дополнительный слой-обёртка, который принимает исходные веса и LoRA-адаптеры, а затем применяет разложение.


4. Сравнение DoRA и LoRA

ХарактеристикаLoRADoRA
Число обучаемых параметров2×d×r (A и B)2×d×r + d (дополнительный вектор m)
Относительное увеличение~1.1× (при r=8, d=4096)
Качество на reasoning-задачах (GSM8K, MATH)Базовый уровень+2–5%
Качество на NLU-задачах (GLUE, SuperGLUE)СопоставимоСопоставимо или чуть лучше
Скорость обученияБыстроНезначительно медленнее (из-за нормализации)
Скорость инференсаБез накладных расходов (можно слить веса)Требует слияния весов или дополнительного шага нормализации
ИнтерпретируемостьНизкаяВыше: можно анализировать изменение масштаба и направления отдельно
Стабильность обученияХорошаяЛучше: разделение компонент уменьшает конфликт градиентов

Ключевое преимущество DoRA: разделение magnitude и direction позволяет модели точнее подстраивать как "уверенность" (масштаб), так и "смысл" (направление) каждого нейрона. В LoRA оба эффекта смешиваются в низкоранговом обновлении, что может приводить к субоптимальным решениям.


5. Экспериментальные результаты (из оригинальной статьи)

Авторы DoRA (Liu et al., 2024) провели эксперименты на LLaMA-7B/13B и других моделях:

  • MMLU (massive multitask language understanding): DoRA превосходит LoRA на 1.5–2% при том же ранге.
  • GSM8K (математические задачи): прирост 3–5% (например, с 42% до 46% на LLaMA-7B).
  • MATH (сложная математика): прирост 2–4%.
  • Common-sense reasoning (HellaSwag, WinoGrande): прирост 1–2%.
  • NLU (GLUE): разница в пределах статистической погрешности.

Важно: DoRA особенно эффективен, когда требуется точное следование инструкциям и многошаговые рассуждения — именно те сценарии, которые важны для агентных систем.


6. Когда выбирать DoRA вместо LoRA

Рекомендуется использовать DoRA, если:

  • Вы fine-tune модель для задач, требующих логических рассуждений (математика, code generation, планирование).
  • Ваша агентная система использует LLM для принятия решений на основе инструментов (tool use) — DoRA улучшает качество выбора действия.
  • У вас есть достаточно вычислительных ресурсов для незначительного увеличения времени обучения (обычно +5–10%).
  • Вы хотите интерпретируемости: можно отследить, какие нейроны изменили масштаб, а какие — направление.

LoRA остаётся предпочтительным, если:

  • Критично минимальное число параметров (например, развёртывание на edge).
  • Задача простая (классификация, сентимент-анализ) — выигрыш DoRA минимален.
  • Вы ограничены в памяти GPU (DoRA требует хранения дополнительного вектора m и вычисления нормализации).

7. Связь с Agentic RAG

В контексте Agentic RAG (агентные системы, которые используют RAG для поиска информации и выполнения действий) fine-tuning LLM с помощью DoRA даёт следующие преимущества:

  • Улучшение планирования: агент должен разбить сложный запрос на подзадачи — DoRA повышает точность рассуждений.
  • Лучший выбор инструментов: агент решает, какой API вызвать — DoRA улучшает понимание контекста.
  • Более точная генерация запросов к векторной БД: DoRA помогает модели формулировать эффективные поисковые запросы.
  • Снижение галлюцинаций: за счёт более точного fine-tuning модель реже выдумывает факты.

Таким образом, DoRA — это современная техника fine-tuning, которая особенно полезна для агентных архитектур, где качество рассуждений напрямую влияет на успех системы.


8. Пет-проект для закрепления

Задача: Сравнить LoRA и DoRA при fine-tuning небольшой LLM (например, GPT-2 или LLaMA-2-7B) на датасете математических рассуждений (GSM8K) и оценить точность.

Инструменты:

  • Python, PyTorch, Hugging Face Transformers, PEFT (библиотека поддерживает DoRA начиная с версии 0.12.0).
  • Датасет: gsm8k (Hugging Face datasets).
  • Метрика: accuracy на тестовой выборке.

Шаги:

  1. Загрузить предобученную модель (например, meta-llama/Llama-2-7b-hf).
  2. Реализовать LoRA (через peft.LoraConfig) и DoRA (через peft.DoraConfig).
  3. Fine-tune обе модели на подмножестве GSM8K (например, 1000 примеров) с одинаковыми гиперпараметрами (ранг r=8, learning rate=2e-4, 3 эпохи).
  4. Оценить accuracy на тестовом наборе (200 примеров).
  5. Сравнить число параметров, время обучения и точность.

Ожидаемый результат:

  • DoRA покажет accuracy на 2–5% выше, чем LoRA.
  • Число параметров DoRA будет примерно на 10% больше.
  • Время обучения увеличится незначительно (до 10%).

Дополнительно: можно визуализировать изменения вектора m (magnitude) после обучения — увидеть, какие нейроны изменили масштаб.


9. Связь с другими вопросами

ВопросТема
482Как работает LoRA и какие у него ограничения?
484Что такое QLoRA и как он сочетается с DoRA?
485Какие ещё методы PEFT существуют (IA3, AdaLoRA)?
486Как fine-tuning влияет на производительность RAG-системы?
487Как оценивать качество fine-tuning для агентных систем?
488В чём разница между full fine-tuning и PEFT?

10. Навигация


Навигация