Aivaro
  • Оглавление
  • Вопросы
  • Практика
  • Вики
  • Материалы сообщества
  • Тесты
  • Поиск
✈Telegram @ai_varo
RUEN中文
…
Оглавление/Вопросы/#983

Как собирать preference data для RLHF? (A/B сравнение ответов, ranking, Elo score)

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

Preference data — ключевой компонент Reinforcement Learning from Human Feedback (RLHF). Без качественных предпочтений невозможно обучить reward model и затем выровнять LLM. Основные методы сбора: парные (A/B) сравнения ответов на один промпт, ранжирование нескольких кандидатов (ranking) и турнирная система Elo score для непрерывного обновления оценок. Оценки могут ставить асессоры (эксперты-аннотаторы) или краудсорсеры, причём качество асессоров часто выше, а крауд даёт дешевле, но требует чеков качества.

2. Ranking: отсортировать N ответов

Вместо попарных сравнений можно попросить асессора упорядочить все N ответов от лучшего к худшему (или наоборот). Это даёт более богатый сигнал за один проход.

Плюсы:

  • Эффективность: один промпт даёт N*(N-1)/2 пар неявно.
  • Меньше стоить (по времени асессора) по сравнению с полным попарным сбором для больших N (например, N=5 ÷ 10).

Минусы:

  • Выше когнитивная нагрузка — асессору нужно удерживать в голове все варианты.
  • Возможен эффект "порядка" (первый/последний ответ запоминается лучше).
  • Сложнее агрегировать мнения нескольких асессоров (нужны методы вроде Kendall tau или Plackett–Luce).

Рекомендации:

  • Использовать N = 4-6 для краудсорсеров, больше — только эксперты.
  • Перемешивать порядок ответов при показе.
  • Использовать интерфейс drag-and-drop для удобства.

Математическая модель: Для ранжирования часто применяют Plackett–Luce (обобщение Bradley–Terry на N>2). Вероятность ранга R задаётся:

[ P(R) = \prod_{k=1}^{N-1} \frac{\exp(r_{(k)})}{\sum_{j=k}^{N} \exp(r_{(j)})} ]

где (r_{(k)}) — score k-го элемента в упорядоченном списке.


3. Elo: как в шахматах, обновление рейтингов

Система Elo — популярный метод для непрерывного сбора предпочтений через небольшие турниры. Каждый ответ имеет скрытый рейтинг. После каждого сравнения (A vs B, кто лучше) рейтинги обновляются:

[ E_A = \frac{1}{1+10^{(R_B - R_A)/400}} ] [ R_A' = R_A + K*(S_A - E_A) ]

где S_A = 1, если A выиграл, 0.5 — ничья, 0 — проигрыш. K — фактор обновления (обычно 32).

Плюсы:

  • Легко масштабируется — можно добавлять новые ответы постепенно.
  • Естественная интеграция с краудсорсингом: каждый асессор делает несколько пар, рейтинги всех ответов уточняются.
  • Устойчивость к "шуму" благодаря накоплению статистики.

Минусы:

  • Рейтинг относительно анонимен — есть проблемы с несбалансированностью пула (если один ответ сравнивали 100 раз, а другой — 1).
  • Необходимо правильно выбирать порядок пар для минимизации стандартной ошибки (обычно используют Bayesian Elo или TrueSkill).

Применение в RLHF:

  • Каждый сгенерированный ответ получает начальный Elo (например, 1000).
  • Краудсорсеры сравнивают случайные пары.
  • После большого числа сравнений (тысячи) Elo-рейтинг становится оценкой качества ответа.
  • Эти рейтинги можно использовать как метки для обучения reward model (регрессия на Elo score).

Реализация минимального Elo на Python:

class Elo:
    def __init__(self, K=32):
        self.K = K
        
    def expected(self, ra, rb):
        return 1 / (1 + 10 ** ((rb - ra) / 400))
    
    def update(self, winner, loser, draw=False):
        ea = self.expected(winner.rating, loser.rating)
        eb = 1 - ea
        if draw:
            sw, sl = 0.5, 0.5
        else:
            sw, sl = 1, 0
        winner.rating += self.K * (sw - ea)
        loser.rating += self.K * (sl - eb)

4. Лучше асессоры, можно крауд

Качество preference data критически зависит от подбора аннотаторов.

Асессоры (эксперты):

  • Прошли обучение по чек-листам (например, "полезность", "безопасность", "точность").
  • Работают в штате или по контракту.
  • Дешевле крауда? Нет, обычно дороже, но выше качество.
  • Используются в InstructGPT / ChatGPT (OpenAI нанимала асессоров с высшим образованием, знание английского, 15-25 $/час ориентировочно).

Краудсорсинг (Amazon MTurk, Toloka, Prolific):

  • Быстро, дёшево (0.02-0.50 $ за задание).
  • Риск шума, спама, некомпетентности.
  • Требуют фильтрации: золотые задания (ground truth), межоценщическое согласие (Krippendorff’s alpha), качественные оценки времени выполнения.
  • Эффективны для простых A/B сравнений, но не для ранжирования сложных рассуждений.

Гибридный подход:

  • Использовать крауд для первичного сбора, потом фильтр экспертов по выборочной проверке сомнительных пар (low confidence).
  • Или обучить маленькую модель предсказывать согласованность и отсеивать плохих крауд-воркеров.

Чек-лист качества:

  1. Чёткое описание критериев (что значит "лучше" — factuality, helpfulness, harmlessness).
  2. Контрольные вопросы для отбора асессоров/крауд-воркеров.
  3. Межоценщическое согласие (например, majority voting из 3 асессоров на каждую пару).
  4. Анализ систематических ошибок (bias: "длинный ответ лучше", "первый ответ лучше").

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

Задача: Собрать preference data для небольшого набора ответов от двух разных LLM (например, GPT-spring и LLaMA-3) на 10 промптах из Chatbot Arena (датасет). Обучить reward model и измерить улучшение политики через PPO.

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

  • Python (scipy, torch, transformers)
  • Датасет: Hugging Face Datasets (example: lmsys/chatbot_arena_conversations)
  • Крауд-платформа: бесплатный локальный инструмент -- своя HTML-страница с form submit (можно имитировать асессора себя).
  • Библиотека для обучения reward model: TRL (Transformer Reinforcement Learning) от Hugging Face.

Шаги:

  1. Взять 10 промптов, сгенерировать по 5 ответов от каждой модели (температура 0.7).
  2. Создать интерфейс для сравнения: показать два случайных ответа на промпт, отметить лучший (A/B). Повторить 100 раз (потребуется около 20 минут ручной работы).
  3. Сохранить результаты в CSV (prompt, answer_a, answer_b, winner, tie).
  4. Обучить reward model: взять предобученный LM (например, GPT-2) + линейный слой binary classifier на head. Использовать pairwise loss.
  5. Валидация: проверить, что reward model на удержанных парах предсказывает выбор асессора с accuracy > 70%.

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

  • Получен датасет с 100+ предпочтениями.
  • Reward model с cadlag-кривой обучения (loss снижается).
  • Скрипт, который может быть расширен до настоящего RLHF-пайплайна с PPO.

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

ВопросТема
333. Как работает RLHFПолный цикл RLHF (reward model → PPO) — предшествует сбору preference data как вход

Навигация

  • Предыдущий: 982
  • Следующий: 984
  • Индекс: 00. Индекс разборов