Что такое DoRA и чем она отличается от LoRA?
Ответ от нейросети
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:
- Берется замороженная базовая модель.
- Для выбранных слоев выделяется направление весов и их норма.
- Направление адаптируется через low-rank-обновление.
- Норма корректируется отдельно.
- Модель дообучается на целевом датасете.
Ключевые моменты:
- LoRA обучает низкоранговую добавку к весам, а DoRA разлагает вес на направление и норму.
- DoRA обычно считается более выразительным способом адаптации при схожем бюджете параметров.
- Оба подхода относятся к parameter-efficient fine-tuning и позволяют не обновлять всю модель.
- LoRA проще и очень распространена; DoRA часто выбирают, когда нужен прирост качества.
- На собеседовании важно подчеркнуть, что DoRA — это не просто “LoRA с другим названием”, а другая декомпозиция весов.