Что такое ReFT (Representation Fine-Tuning) и когда он лучше LoRA?

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

ReFT (Representation Fine-Tuning) — это метод параметро-эффективного fine-tuning, который вместо обновления весов модели обучает небольшие interventions (вмешательства) на скрытых представлениях (hidden states). В отличие от LoRA, которая добавляет обучаемые низкоранговые матрицы к весам, ReFT модифицирует активации на определённых слоях, используя на порядки меньше параметров (в 10–100 раз меньше, чем LoRA). ReFT лучше подходит для задач, где нужно изменить стиль, поведение или alignment модели, но уступает LoRA в задачах, требующих усвоения новых фактов или знаний.


1. Термины: Fine-tuning, LoRA, ReFT

Fine-tuning — дообучение предобученной модели на небольшом наборе данных для адаптации к конкретной задаче. fine-tuning|Полный fine-tuning обновляет все параметры, что дорого для больших LLM.

LoRA (Low-Rank Adaptation) — метод PEFT (Fine-Tuning|Parameter-Efficient Fine-Tuning), который добавляет к весам модели обучаемые низкоранговые матрицы (обычно ранг 8–64). Количество обучаемых параметров составляет ~0.1–1% от полной модели.

ReFT (Representation Fine-Tuning) — более новый подход, предложенный в 2024 году (Wu et al.). Вместо изменения весов ReFT обучает interventions — небольшие векторы или преобразования, которые добавляются к скрытым состояниям (hidden states) на выбранных слоях и позициях токенов. Параметров может быть в 10–100 раз меньше, чем у LoRA.


2. Как работает LoRA (напоминание)

LoRA для каждого линейного слоя (например, W_q, W_v в attention) добавляет две матрицы A и B с низким рангом r:

h = W₀x + BAx
  • W₀ — замороженная исходная матрица весов.
  • A (входная размерность → r) и B (r → выходная размерность) — обучаемые.
  • Количество параметров: 2 * d_in * r на слой.

LoRA эффективен, но всё ещё требует хранения и обновления матриц для каждого адаптируемого слоя.


3. Как работает ReFT

ReFT опирается на идею interventions — направленных изменений скрытых представлений во время forward pass. Основные компоненты:

  • Скрытые состояния (hidden states) — выходы слоёв трансформера для каждого токена.
  • Intervention — обучаемый вектор или преобразование, которое добавляется к скрытому состоянию на определённом слое и позиции.
  • Маска (mask) — указывает, на каких токенах и слоях применять intervention.

Формально, для слоя l и токена i:

h_l_i' = h_l_i + f_θ(z_i)

где f_θ — небольшая нейронная сеть (например, линейный слой или MLP), а z_i — условный вектор (conditional vector), который может зависеть от входного токена или быть общим для всех.

На практике ReFT часто использует LoReFT (Low-rank ReFT) — вариант, где f_θ — это низкоранговая матрица, действующая на скрытое состояние:

h_l_i' = h_l_i + R^T (W h_l_i + b)

Здесь R — матрица ранга r (обычно 1–4), W — проекция, b — смещение. Параметров: (d_model * r) + (r * d_model) + r ≈ 2 * d_model * r.

Ключевое отличие от LoRA: LoRA модифицирует веса (матрицы), а ReFT модифицирует активации (скрытые состояния). Это позволяет ReFT быть более гибким в выборе, какие именно представления менять (по слоям и токенам).


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

ХарактеристикаLoRAReFT
Что обучаетсяНизкоранговые матрицы к весамInterventions на скрытых состояниях
Количество параметров~0.1–1% от модели~0.001–0.1% от модели (в 10–100 раз меньше LoRA)
Где применяетсяКо всем линейным слоям (или выборочно)К выбранным слоям и позициям токенов
Влияние на forward passИзменяет веса → все последующие вычисленияИзменяет активации только в конкретных точках
Скорость обученияБыстро (мало параметров)Ещё быстрее (меньше параметров)
Скорость инференсаМожно слить с весами (merge) → без накладокТребует дополнительных вычислений при каждом forward (intervention)
Область примененияХорошо для усвоения фактов, знаний, доменовЛучше для изменения стиля, поведения, alignment
Производительность на задачах знанийВысокаяНиже, чем LoRA (недостаточно ёмкости для запоминания)
Производительность на задачах поведенияСредняя (изменяет веса глобально)Высокая (точечное вмешательство в нужные представления)

5. Когда ReFT лучше LoRA

ReFT превосходит LoRA в следующих сценариях:

  • Изменение стиля генерации — например, сделать ответы более формальными, краткими или дружелюбными. ReFT может вмешаться в представления, отвечающие за тональность, не затрагивая фактические знания.
  • Alignment (выравнивание) — настройка модели на следование инструкциям, отказ от вредных запросов. ReFT позволяет точечно корректировать поведение на определённых слоях, отвечающих за принятие решений.
  • Контроль над атрибутами — изменение пола, возраста, эмоциональной окраски текста. ReFT эффективен, так как работает на уровне представлений, а не весов.
  • Быстрое прототипирование — из-за малого числа параметров ReFT можно обучить за несколько минут на одном GPU.
  • Задачи с ограниченными вычислительными ресурсами — когда нужно адаптировать модель на устройстве с малым объёмом памяти.

Пример: Настроить LLM на генерацию ответов в стиле Шекспира. LoRA попытается изменить веса, что может испортить фактические знания. ReFT же добавит intervention на слоях, отвечающих за стиль, оставив знания нетронутыми.


6. Когда LoRA лучше ReFT

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

  • Нужно усвоить новые факты или знания — например, дообучить модель на медицинских данных. LoRA имеет больше параметров и может запомнить новую информацию.
  • Требуется высокая точность на задачах с фактологией (QA, retrieval). ReFT часто показывает более низкие метрики на таких бенчмарках.
  • Инференс без накладок — LoRA можно слить с весами модели (merge), после чего инференс не отличается от исходной модели. ReFT требует выполнения intervention на каждом шаге, что добавляет latency.
  • Широкая поддержка в инструментах — LoRA реализована в PEFT, Hugging Face, Axolotl и многих других. ReFT пока менее распространён.

7. Математическая основа ReFT (детали)

Рассмотрим LoReFT (Low-rank ReFT) — самую популярную реализацию.

Пусть h ∈ ℝ^d — скрытое состояние на некотором слое для токена. Intervention:

h' = h + R^T (W h + b)

где:

  • W ∈ ℝ^{r × d} — проекционная матрица (обучаемая),
  • b ∈ ℝ^r — смещение (обучаемое),
  • R ∈ ℝ^{r × d} — матрица проекции обратно в исходное пространство (обучаемая).

Параметры: 2 * r * d + r. При r=1 это всего 2d+1 параметров на слой.

Выбор слоёв и позиций токенов — гиперпараметры. Обычно interventions применяются к последним слоям (например, 4–8 из 32) и к каждому токену или только к последнему токену.


8. Пример применения ReFT (концептуальный код)

Библиотека pyreft (https://github.com/stanfordnlp/[pyreft](/wiki/pyreft)) предоставляет реализацию ReFT для моделей Hugging Face.

import torch
from pyreft import get_reft_model, ReftConfig

model = AutoModelForCausalLM.from_pretrained("gpt2")
config = ReftConfig(
    representations=[{"layer": l, "component": "block_output",
                      "low_rank_dimension": 4} for l in [8, 9, 10]],
    intervene_on_prompt=True,
)
reft_model = get_reft_model(model, config)

# Обучаем только intervention-параметры
optimizer = torch.optim.AdamW(reft_model.parameters(), lr=1e-3)
# ... цикл обучения ...

# Инференс
input_ids = tokenizer("Hello, how are you?", return_tensors="pt").input_ids
_, reft_output = reft_model(input_ids, output_hidden_states=True)
# reft_output содержит модифицированные скрытые состояния

9. Ограничения ReFT

  • Не подходит для запоминания фактов — ёмкость interventions мала.
  • Накладные расходы на инференс — intervention добавляет дополнительные вычисления (умножение на матрицы), хотя и небольшие.
  • Сложность выбора слоёв и позиций — требует эмпирической настройки.
  • Меньшая экосистема — меньше примеров, инструментов и сообщества по сравнению с LoRA.
  • Риск переобучения — из-за малого числа параметров может быстро перестроиться под небольшой датасет, но потерять обобщение.

10. Инструменты и библиотеки

  • pyreft — официальная реализация от Stanford NLP.
  • Hugging Face PEFT — пока не поддерживает ReFT (только LoRA, IA3, Prompt Tuning).
  • Axolotl — нет встроенной поддержки ReFT.
  • ReFT может быть реализован вручную через hooks в PyTorch.

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

Задача: Изменить стиль генерации небольшой модели (GPT-2) с нейтрального на формальный с помощью ReFT и сравнить с LoRA.

Инструменты: Python, PyTorch, transformers, pyreft, peft (для LoRA), датасет формальных/неформальных пар (например, из DailyDialog).

Шаги:

  1. Загрузить GPT-2 и подготовить датасет: для каждого неформального предложения создать формальный вариант.
  2. Реализовать ReFT с помощью pyreft: выбрать 4 последних слоя, ранг 4, intervention на всех токенах.
  3. Обучить ReFT на 1000 примерах (2 эпохи).
  4. Обучить LoRA (ранг 8) на том же датасете.
  5. Оценить обе модели на тестовом наборе:
    • Автоматически: метрика BLEU, perplexity на формальных ответах.
    • Вручную: оценить, насколько изменился стиль, не потерялись ли факты.
  6. Сравнить количество параметров и время обучения.

Ожидаемый результат: ReFT покажет лучшее изменение стиля при меньшем числе параметров, но LoRA может лучше сохранить фактологию (если датасет содержит новые факты). Вы увидите, что ReFT быстрее обучается и требует меньше памяти.


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

ВопросТема
483Что такое LoRA и как он работает?
485Какие существуют стратегии fine-tuning для LLM?
486Что такое PEFT и какие методы к нему относятся?
487Что такое QLoRA и как он сочетает квантизацию и LoRA?
489Что такое Prompt Tuning и чем отличается от ReFT?

13. Навигация


Навигация