Как работает synthetic data для RLHF (предпочтения)?

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

Synthetic data (синтетические данные) для RLHF (Reinforcement Learning from Human Feedback) — это автоматически сгенерированные пары предпочтений (chosen/rejected), которые заменяют дорогую человеческую разметку. Основные подходы: RLAIF (RL from AI Feedback) с конституцией, Evol-instruct для создания улучшенных/ухудшенных версий ответов и Cross-model сравнение ответов разных моделей. Синтетические данные позволяют масштабировать сбор предпочтений до миллионов пар, снижая стоимость и время, но требуют тщательной валидации для избежания шума и смещения.


1. Термин: RLHF и роль данных предпочтений

RLHF — это метод выравнивания (alignment) языковых моделей, при котором модель обучается на предпочтениях людей. Классический пайплайн включает три этапа:

  1. SFT (Supervised Fine-Tuning) — дообучение на качественных примерах.
  2. Обучение reward model (модели вознаграждения) на парах предпочтений (chosen — предпочтительный ответ, rejected — непредпочтительный).
  3. Оптимизация политики (PPO, DPO и др.) с использованием reward model.

Ключевой узкий этап — сбор preference data (данных предпочтений). Ручная разметка дорога, медленна и субъективна. Synthetic data — это автоматически сгенерированные пары, которые имитируют человеческие предпочтения, используя другую LLM, правила или сравнение моделей.


2. RLAIF (Constitutional AI)

RLAIF (Reinforcement Learning from AI Feedback) — подход, в котором LLM сама оценивает свои ответы на основе заданного набора принципов — конституции (constitution). Конституция — это список правил, например: «Ответ должен быть полезным, безвредным и честным».

Как работает генерация пар

  1. Для заданного промпта LLM генерирует два ответа (или один, а затем модифицирует).
  2. LLM-критик (та же или другая модель) оценивает каждый ответ по конституции.
  3. Ответ, который лучше соответствует конституции, помечается как chosen, другой — как rejected.
  4. Полученные пары используются для обучения reward model или напрямую для DPO.

Пример конституции (упрощённо):

  • Ответ не должен содержать вредные инструкции.
  • Ответ должен быть информативным и по делу.
  • Ответ должен избегать предвзятости.

Преимущества

  • Не требует людей.
  • Масштабируется до миллионов пар.
  • Конституцию можно настраивать под конкретные ценности.

Недостатки

  • Качество зависит от LLM-критика (может быть зашумлено).
  • Конституция может быть неполной или противоречивой.
  • Риск «зацикливания» — модель учится имитировать собственные предпочтения.

3. Evol-instruct для предпочтений

Evol-instruct — метод, изначально предложенный для генерации инструкций (WizardLM). Адаптирован для создания пар предпочтений:

  1. Берём исходный ответ (например, от базовой модели).
  2. Эволюция вверх (evolve-up): LLM улучшает ответ — делает его более подробным, точным, структурированным. Это chosen.
  3. Эволюция вниз (evolve-down): LLM ухудшает ответ — вносит ошибки, опускает детали, делает его менее полезным. Это rejected.
  4. Пара (улучшенный, ухудшенный) используется как preference data.

Вариант можно генерировать несколько версий ответа и ранжировать их с помощью LLM-критика, выбирая лучший и худший.

Пример кода (псевдо):

def evolve_pair(prompt, response, model):
    chosen = model.generate(f"Улучши следующий ответ: {response}")
    rejected = model.generate(f"Ухудши следующий ответ: {response}")
    return chosen, rejected

Преимущества

  • Контролируемое качество: улучшенный ответ действительно лучше.
  • Не требует конституции — достаточно инструкции «улучши/ухудши».

Недостатки

  • Зависит от способности LLM понимать, что значит «улучшить».
  • Может генерировать искусственные артефакты (например, слишком длинные ответы).

4. Cross-model подход

Cross-modelсравнение ответов разных моделей. Идея: ответ от более сильной модели (например, GPT-4) считается chosen, ответ от более слабой (например, LLaMA-2-7B) — rejected.

Как работает

  1. Для каждого промпта генерируем ответ от модели A (сильная) и модели B (слабая).
  2. Пара (A, B) добавляется в датасет предпочтений.
  3. Можно также использовать несколько моделей и ранжировать их по известному качеству (например, по оценкам на бенчмарках).

Преимущества

  • Простота: не нужен отдельный критик.
  • Естественное ранжирование: сильная модель объективно лучше.

Недостатки

  • Требуется доступ к сильной модели (дорого, если это API).
  • Разрыв в качестве может быть слишком большим — модель учится имитировать сильную, но не учится тонким предпочтениям.
  • Не учитывает контекст: сильная модель может ошибаться в специфических доменах.

Сравнение методов

МетодИсточник предпочтенийМасштабируемостьЗатратыРиск шума
RLAIFLLM-критик + конституцияВысокаяСредние (вызовы LLM)Средний
Evol-instructЭволюция ответаВысокаяСредниеНизкий-средний
Cross-modelСравнение моделейОчень высокаяНизкие (если слабая модель своя)Низкий (если сильная модель надёжна)
Человеческая разметкаЛюдиНизкаяОчень высокиеНизкий (но субъективный)

5. Другие методы генерации synthetic preference data

  • Self-play / SPIN (Self-Play Fine-Tuning): модель генерирует ответы, затем играет роль критика, выбирая лучший из пары. Итеративно улучшается.
  • Chain-of-Thought критика: LLM пишет объяснение, почему один ответ лучше, затем использует это для генерации пар.
  • Аугментация с помощью шума: к хорошему ответу добавляются типичные ошибки (фактические, стилистические) для создания rejected.
  • Использование reward model: обученная reward model ранжирует ответы, и пары с большим разрывом в оценке берутся как synthetic preference.

6. Преимущества и ограничения synthetic data для RLHF

Преимущества

  • Масштаб: можно сгенерировать миллионы пар за дни, а не месяцы.
  • Стоимость: в 10–100 раз дешевле человеческой разметки.
  • Контроль: можно точно задать критерии (конституция, эволюция).
  • Итеративность: легко перегенерировать датасет при изменении требований.

Ограничения

  • Шум: synthetic данные могут содержать ошибки, которые модель выучит.
  • Смещение (bias): если LLM-критик предвзят (например, предпочитает длинные ответы), модель перенимает это смещение.
  • Отсутствие разнообразия: synthetic данные могут быть менее разнообразными, чем человеческие.
  • Риск коллапса: если модель учится на собственных предпочтениях, она может зациклиться и не улучшаться.

7. Оценка качества synthetic preference data

Для валидации synthetic данных используют:

  • Согласованность с человеком (human agreement): небольшая выборка пар проверяется людьми. Доля совпадений с synthetic меткой — метрика качества.
  • Внутренняя согласованность: если несколько LLM-критиков оценивают одну пару, насколько их мнения совпадают (Cohen’s kappa).
  • Влияние на downstream: обучаем reward model на synthetic данных и проверяем её accuracy на человеческом тестовом наборе.
  • Анализ распределения: проверяем, что synthetic данные покрывают разные типы ошибок (фактические, этические, стилистические).

Пример метрики

Accuracy@k = доля пар, где synthetic метка совпадает с человеческой

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

  • TRL (Transformer Reinforcement Learning) от Hugging Face: поддерживает обучение с DPO на synthetic preference data.
  • Axolotl: фреймворк для fine-tuning, включает поддержку synthetic data pipelines.
  • LangChain / LlamaIndex: могут использоваться для построения пайплайнов генерации пар (RLAIF, Evol-instruct).
  • OpenAI Evals: для оценки качества synthetic данных.
  • Собственные скрипты: часто проще написать пайплайн на Python с вызовами API LLM.

Пример пайплайна на Python (упрощённо):

import openai

def generate_preference_pair(prompt, model="gpt-4"):
    # Генерируем два ответа
    response_a = openai.ChatCompletion.create(model=model, messages=[{"role": "user", "content": prompt}])
    response_b = openai.ChatCompletion.create(model=model, messages=[{"role": "user", "content": prompt}])
    
    # Используем LLM как критика
    critic_prompt = f"Какой ответ лучше? A: {response_a} B: {response_b}. Ответь только 'A' или 'B'."
    judgement = openai.ChatCompletion.create(model="gpt-4", messages=[{"role": "user", "content": critic_prompt}])
    
    chosen = response_a if judgement == "A" else response_b
    rejected = response_b if judgement == "A" else response_a
    return chosen, rejected

9. Практические рекомендации

  • Комбинируйте методы: используйте synthetic данные для начального обучения, затем дообучайте на небольшом наборе человеческих предпочтений для коррекции смещения.
  • Используйте несколько LLM-критиков и усредняйте их оценки (ансамбль).
  • Проверяйте качество на каждом этапе: если synthetic данные слишком шумные, лучше уменьшить их объём.
  • Начинайте с Cross-model как самого простого подхода, затем добавляйте RLAIF для тонкой настройки.
  • Документируйте конституцию и процесс генерации — это поможет при отладке.

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

Задача: Создать synthetic preference dataset для обучения reward model на задаче генерации рецептов.

Инструменты: Python, OpenAI API (или локальная модель), библиотека TRL.

Шаги:

  1. Соберите 1000 промптов вида «Напиши рецепт блюда X».
  2. Для каждого промпта сгенерируйте два ответа с помощью GPT-4 (или другой модели).
  3. Используйте Evol-instruct: попросите GPT-4 улучшить один ответ (добавить детали, шаги) и ухудшить другой (убрать важные шаги).
  4. Сформируйте пары (chosen=улучшенный, rejected=ухудшенный).
  5. Обучите reward model на этих данных с помощью TRL (класс RewardTrainer).
  6. Оцените reward model на 100 парах, размеченных вручную (accuracy).

Ожидаемый результат: Reward model с accuracy >70% на тестовой выборке. Вы увидите, как synthetic данные влияют на качество.


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

ВопросТема
685Основы RLHF: пайплайн, reward model, PPO
687DPO (Direct Preference Optimization) — альтернатива PPO
688PPO (Proximal Policy Optimization) для RLHF
689Обучение reward model: архитектура, функции потерь
690Alignment (выравнивание) LLM: цели и методы
500Fine-tuning LLM: SFT, LoRA, QLoRA

Навигация