Sobes.tech
Back to questions
Middle — Senior
20

Что такое DoRA и чем она отличается от LoRA?

Companies where asked
ЦифровыеПривычки
филиппинский банк Salmon
Тинькофф

Answer from AI

sobes.tech AI

Что хотят услышать интервьюеры:

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

Определение:

DoRA (Weight-Decomposed Low-Rank Adaptation) — это метод параметрически эффективного дообучения, в котором исходные веса слоя представляются как произведение направления и нормы. Идея в том, чтобы адаптировать не только низкоранговую поправку к весам, как в LoRA, но и отдельно учитывать изменение их масштаба.

LoRA добавляет к замороженной матрице весов низкоранговую добавку: [ W' = W + \Delta W,\quad \Delta W = BA ] где (A) и (B) — обучаемые матрицы малого ранга.

DoRA вместо этого декомпозирует веса на норму и направление и дообучает направление через low-rank-адаптацию, а норму — отдельно. Это часто дает более гибкую адаптацию модели при сопоставимых или меньших затратах памяти.

Пример использования:

Если нужно адаптировать LLM под доменную задачу, например под юридические тексты, но нельзя дообучать все веса из-за ограничений по памяти, можно использовать LoRA или DoRA.
LoRA обычно проще и широко распространена, а DoRA может дать лучшее качество там, где важно точнее подстроить поведение модели без полного fine-tuning.

# Концептуальный пример: дообучение большой модели через PEFT
# Схема зависит от конкретной библиотеки, но идея одна:
# 1) загружаем базовую модель
# 2) замораживаем основные веса
# 3) подключаем адаптеры LoRA или DoRA
# 4) обучаем только небольшое число параметров

base_model = load_pretrained_model("some-llm")

# LoRA: добавляем низкоранговую поправку к весам
lora_model = apply_lora(base_model, rank=8)

# DoRA: декомпозируем веса на направление и норму
dora_model = apply_dora(base_model, rank=8)

train(dora_model, domain_dataset)

Пояснение кода:

Код нужен только для иллюстрации идеи, конкретный синтаксис зависит от библиотеки и версии.
Сначала берется предобученная модель, затем к ней подключается метод PEFT: либо LoRA, либо DoRA. После этого обучаются не все параметры модели, а только адаптеры и, в случае DoRA, компоненты, отвечающие за масштаб весов.

Шаги на примере DoRA:

  1. Берется замороженная базовая модель.
  2. Для выбранных слоев выделяется направление весов и их норма.
  3. Направление адаптируется через low-rank-обновление.
  4. Норма корректируется отдельно.
  5. Модель дообучается на целевом датасете.

Ключевые моменты:

  • LoRA обучает низкоранговую добавку к весам, а DoRA разлагает вес на направление и норму.
  • DoRA обычно считается более выразительным способом адаптации при схожем бюджете параметров.
  • Оба подхода относятся к parameter-efficient fine-tuning и позволяют не обновлять всю модель.
  • LoRA проще и очень распространена; DoRA часто выбирают, когда нужен прирост качества.
  • На собеседовании важно подчеркнуть, что DoRA — это не просто “LoRA с другим названием”, а другая декомпозиция весов.