Модели и платформы ИИ
Прямая Оптимизация Предпочтений: Полное Руководство
Совместимость больших языковых моделей (LLM) с человеческими ценностями и предпочтениями является сложной задачей. Традиционные методы, такие как Обучение с помощью человеческой обратной связи (RLHF), проложили путь, интегрируя человеческие входные данные для уточнения выходных данных модели. Однако RLHF может быть сложным и требовательным к ресурсам, требуя значительной вычислительной мощности и обработки данных. Прямая Оптимизация Предпочтений (DPO) представляет собой новый и более упрощенный подход, предлагающий эффективную альтернативу традиционным методам. Упрощая процесс оптимизации, DPO не только снижает вычислительную нагрузку, но также повышает способность модели быстро адаптироваться к человеческим предпочтениям.
В этом руководстве мы глубоко изучим DPO, исследуя его основы, реализацию и практические применения.
Необходимость Совместимости Предпочтений
Чтобы понять DPO, важно понять, почему совместимость LLM с человеческими предпочтениями так важна. Несмотря на их впечатляющие возможности, LLM, обученные на огромных наборах данных, иногда могут производить выходные данные, которые являются несоответствующими, предвзятыми или несовместимыми с человеческими ценностями. Это несоответствие может проявляться различными способами:
- Генерация опасного или вредного контента
- Предоставление неточной или вводящей в заблуждение информации
- Проявление предвзятости, присутствующей в обучающих данных
Чтобы решить эти проблемы, исследователи разработали методы для тонкой настройки LLM с помощью человеческой обратной связи. Наиболее заметным из этих подходов является RLHF.
Понимание RLHF: Предшественник DPO
Обучение с помощью человеческой обратной связи (RLHF) было основным методом для совместимости LLM с человеческими предпочтениями. Давайте разберем процесс RLHF, чтобы понять его сложности:
а) Надзорная тонкая настройка (SFT): Процесс начинается с тонкой настройки предварительно обученной LLM на наборе данных высококачественных ответов. Этот шаг помогает модели генерировать более релевантные и связные выходные данные для целевой задачи.
б) Моделирование награды: Отдельная модель награды обучается для предсказания человеческих предпочтений. Это включает:
- Генерация пар ответов для заданных подсказок
- Получение оценок от людей, которые предпочитают какой ответ
- Обучение модели для предсказания этих предпочтений
в) Обучение с помощью подкрепления: Тонко настроенная LLM затем进一步 оптимизируется с помощью обучения с помощью подкрепления. Модель награды предоставляет обратную связь, направляя LLM для генерации ответов, которые соответствуют человеческим предпочтениям.
Вот упрощенный псевдокод на Python, иллюстрирующий процесс RLHF:
Хотя эффективен, RLHF имеет несколько недостатков:
- Требуется обучение и поддержка нескольких моделей (SFT, модель награды и модель, оптимизированная с помощью RL)
- Процесс RL может быть нестабильным и чувствительным к гиперпараметрам
- Это вычислительно дорого, требуя многих прямых и обратных проходов через модели
Эти ограничения привели к поиску более простых и эффективных альтернатив, что привело к разработке DPO.
Прямая Оптимизация Предпочтений: Основные Концепции
Этот образ контрастирует два различных подхода к совместимости выходных данных LLM с человеческими предпочтениями: Обучение с помощью человеческой обратной связи (RLHF) и Прямая Оптимизация Предпочтений (DPO). RLHF полагается на модель награды для направления политики языковой модели через итеративные циклы обратной связи, в то время как DPO直接 оптимизирует выходные данные модели для соответствия человеческим предпочтениям с помощью данных о предпочтениях. Этот сравнение подчеркивает сильные стороны и потенциальные применения каждого метода, предоставляя информацию о том, как будущие LLM могут быть обучены для лучшей совместимости с человеческими ожиданиями.
Ключевые идеи за DPO:
а) Неявная модель награды: DPO устраняет необходимость в отдельной модели награды, рассматривая саму языковую модель как неявную функцию награды.
б) Формулировка на основе политики: Вместо оптимизации функции награды DPO直接 оптимизирует политику (языковую модель) для максимизации вероятности предпочитаемых ответов.
в) Замкнутый решение: DPO использует математический инсайт, который позволяет получить замкнутое решение для оптимальной политики, избегая необходимости итеративных обновлений RL.
Реализация DPO: Практический Код
Ниже приведен образец кода, реализующего функцию потерь DPO с помощью PyTorch. Эта функция играет решающую роль в уточнении того, как языковые модели отдают приоритет выходным данным на основе человеческих предпочтений. Вот разбор ключевых компонентов:
- Сигнатура функции: Функция
dpo_lossпринимает несколько параметров, включая логарифмические вероятности политики (pi_logps), логарифмические вероятности модели-эталона (ref_logps) и индексы, представляющие предпочитаемые и непредпочитаемые завершения (yw_idxs,yl_idxs). Кроме того, параметрbetaконтролирует силу штрафа KL. - Извлечение логарифмических вероятностей: Код извлекает логарифмические вероятности для предпочитаемых и непредпочитаемых завершений из обоих политик и моделей-эталонов.
- Расчет логарифмического отношения: Разница между логарифмическими вероятностями для предпочитаемых и непредпочитаемых завершений вычисляется для обоих политик и моделей-эталонов. Это отношение является решающим для определения направления и величины оптимизации.
- Расчет потерь и наград: Потери вычисляются с помощью функции
logsigmoid, в то время как награды определяются путем масштабирования разницы между логарифмическими вероятностями политики и модели-эталона наbeta.
Давайте глубже изучим математику за DPO, чтобы понять, как оно достигает этих целей.
Математика DPO
DPO является умной переформулировкой проблемы обучения предпочтений. Вот пошаговый разбор:
а) Начальная точка: Максимизация награды с ограничением KL
Оригинальная цель RLHF может быть выражена как:
- πθ является политикой (языковой моделью), которую мы оптимизируем
- r(x,y) является функцией награды
- πref является моделью-эталоном (обычно исходной моделью SFT)
- β контролирует силу ограничения разnicения KL
б) Оптимальная форма политики: Можно показать, что оптимальная политика для этой цели имеет вид:
π_r(y|x) = 1/Z(x) * πref(y|x) * exp(1/β * r(x,y))Где Z(x) является нормализующей константой.
в) Дуальность награды и политики: Ключевым инсайтом DPO является выражение функции награды через оптимальную политику:
r(x,y) = β * log(π_r(y|x) / πref(y|x)) + β * log(Z(x))г) Предположение о модели предпочтений, предполагая, что предпочтения следуют модели Брэдли-Терри, мы можем выразить вероятность предпочтения y1 над y2 как:
p*(y1 ≻ y2 | x) = σ(r*(x,y1) - r*(x,y2))Где σ является логистической функцией.
е) Цель DPO Подставив дуальность награды и политики в модель предпочтений, мы получаем цель DPO:
L_DPO(πθ; πref) = -E_(x,y_w,y_l)~D [log σ(β * log(πθ(y_w|x) / πref(y_w|x)) - β * log(πθ(y_l|x) / πref(y_l|x)))]Эта цель может быть оптимизирована с помощью стандартных методов градиентного спуска, без необходимости в алгоритмах RL.
Реализация DPO
Теперь, когда мы понимаем теорию за DPO, давайте посмотрим, как реализовать ее на практике. Мы будем использовать Python и PyTorch для этого примера:
import torch
import torch.nn.functional as F
<p>class DPOTrainer:
def __init__(self, model, ref_model, beta=0.1, lr=1e-5):
self.model = model
self.ref_model = ref_model
self.beta = beta
self.optimizer = torch.optim.AdamW(self.model.parameters(), lr=lr)</p>
<p>def compute_loss(self, pi_logps, ref_logps, yw_idxs, yl_idxs):
"""
pi_logps: логарифмические вероятности политики, форма (B,)
ref_logps: логарифмические вероятности модели-эталона, форма (B,)
yw_idxs: индексы предпочитаемых завершений в [0, B-1], форма (T,)
yl_idxs: индексы непредпочитаемых завершений в [0, B-1], форма (T,)
beta: температура, контролирующая силу штрафа KL</p>
<p>Каждая пара (yw_idxs[i], yl_idxs[i]) представляет индексы одной пары предпочтений.
"""</p>
<p># Извлечение логарифмических вероятностей для предпочитаемых и непредпочитаемых завершений
pi_yw_logps, pi_yl_logps = pi_logps[yw_idxs], pi_logps[yl_idxs]
ref_yw_logps, ref_yl_logps = ref_logps[yw_idxs], ref_logps[yl_idxs]</p>
<p># Расчет логарифмических отношений
pi_logratios = pi_yw_logps - pi_yl_logps
ref_logratios = ref_yw_logps - ref_yl_logps</p>
<p># Расчет потерь DPO
losses = -F.logsigmoid(self.beta * (pi_logratios - ref_logratios))
rewards = self.beta * (pi_logps - ref_logps).detach()</p>
return losses.mean(), rewards
<p>def train_step(self, batch):
x, yw_idxs, yl_idxs = batch
self.optimizer.zero_grad()</p>
<p># Расчет логарифмических вероятностей для модели и модели-эталона
pi_logps = self.model(x).log_softmax(-1)
ref_logps = self.ref_model(x).log_softmax(-1)</p>
<p># Расчет потерь
loss, _ = self.compute_loss(pi_logps, ref_logps, yw_idxs, yl_idxs)
loss.backward()
self.optimizer.step()</p>
return loss.item()
<p># Использование
model = YourLanguageModel() # Инициализация вашей модели
ref_model = YourLanguageModel() # Загрузка предварительно обученной модели-эталона
trainer = DPOTrainer(model, ref_model)</p>
<p>for batch in dataloader:
loss = trainer.train_step(batch)
print(f"Потери: {loss}")
Проблемы и Будущие Направления
Хотя DPO предлагает значительные преимущества над традиционными подходами RLHF, все еще существуют проблемы и области для дальнейших исследований:
а) Масштабируемость до Больших Моделей:
Когда языковые модели продолжают расти в размере, эффективное применение DPO к моделям с сотнями миллиардовов параметров остается открытой проблемой. Исследователи изучают методы, такие как:
- Эффективные методы тонкой настройки (например, LoRA, префиксная настройка)
- Оптимизации распределенного обучения
- Градиентное чекпоинтинг и обучение с смешанной точностью
Пример использования LoRA с DPO:
<p>from peft import LoraConfig, get_peft_model</p> <p>class DPOTrainerWithLoRA(DPOTrainer): def __init__(self, model, ref_model, beta=0.1, lr=1e-5, lora_rank=8): lora_config = LoraConfig( r=lora_rank, lora_alpha=32, target_modules=["q_proj", "v_proj"], lora_dropout=0.05, bias="none", task_type="CAUSAL_LM" ) self.model = get_peft_model(model, lora_config) self.ref_model = ref_model self.beta = beta self.optimizer = torch.optim.AdamW(self.model.parameters(), lr=lr)</p> <p># Использование base_model = YourLargeLanguageModel() dpo_trainer = DPOTrainerWithLoRA(base_model, ref_model)
б) Мультитасковая и Адаптация с Немногими Выстрелами:
Разработка методов DPO, которые могут эффективно адаптироваться к новым задачам или областям с ограниченными данными о предпочтениях, является активной областью исследований. Подходы, которые изучаются, включают:
- Мета-обучение для быстрой адаптации
- Настройка на основе подсказок для DPO
- Перенос обучения из общих моделей предпочтений в конкретные области
в) Обработка Неоднозначных или Противоречивых Предпочтений:
Реальные данные о предпочтениях часто содержат неоднозначности или противоречия. Улучшение устойчивости DPO к таким данным является важным. Потенциальные решения включают:
- Вероятностное моделирование предпочтений
- Активное обучение для разрешения неоднозначностей
- Агрегация предпочтений с помощью нескольких агентов
Пример вероятностного моделирования предпочтений:
<p>class ProbabilisticDPOTrainer(DPOTrainer): def compute_loss(self, pi_logps, ref_logps, yw_idxs, yl_idxs, preference_prob): # Расчет логарифмических отношений pi_yw_logps, pi_yl_logps = pi_logps[yw_idxs], pi_logps[yl_idxs] ref_yw_logps, ref_yl_logps = ref_logps[yw_idxs], ref_logps[yl_idxs]</p> <p>log_ratio_diff = pi_yw_logps.sum(-1) - pi_yl_logps.sum(-1) loss = -(preference_prob * F.logsigmoid(self.beta * log_ratio_diff) + (1 - preference_prob) * F.logsigmoid(-self.beta * log_ratio_diff)) return loss.mean()</p> <p># Использование trainer = ProbabilisticDPOTrainer(model, ref_model) loss = trainer.compute_loss(pi_logps, ref_logps, yw_idxs, yl_idxs, preference_prob=0.8) # 80% уверенность в предпочтении
г) Комбинирование DPO с Другими Методами Совместимости:
Интеграция DPO с другими методами совместимости может привести к более устойчивым и способным системам:
- Принципы Конституционной ИИ для явного удовлетворения ограничений
- Дебаты и рекурсивное моделирование наград для сложного выявления предпочтений
- Обратное обучение с помощью подкрепления для вывода лежащих в основе функций награды
Пример комбинирования DPO с Конституционной ИИ:
<p>class ConstitutionalDPOTrainer(DPOTrainer): def __init__(self, model, ref_model, beta=0.1, lr=1e-5, constraints=None): super().__init__(model, ref_model, beta, lr) self.constraints = constraints or []</p> <p>def compute_loss(self, pi_logps, ref_logps, yw_idxs, yl_idxs): base_loss = super().compute_loss(pi_logps, ref_logps, yw_idxs, yl_idxs)</p> <p>constraint_loss = 0 for constraint in self.constraints: constraint_loss += constraint(self.model, pi_logps, ref_logps, yw_idxs, yl_idxs)</p> return base_loss + constraint_loss <p># Использование def safety_constraint(model, pi_logps, ref_logps, yw_idxs, yl_idxs): # Реализация логики проверки безопасности unsafe_score = compute_unsafe_score(model, pi_logps, ref_logps) return torch.relu(unsafe_score - 0.5) # Штраф, если оценка безопасности > 0.5</p> <p>constraints = [safety_constraint] trainer = ConstitutionalDPOTrainer(model, ref_model, constraints=constraints)</p>
Практические Рассмотрения и Лучшие Практики
Когда вы реализуете DPO для реальных приложений, учитывайте следующие советы:
а) Качество данных: Качество ваших данных о предпочтениях имеет решающее значение. Убедитесь, что ваш набор данных:
- Покрывает широкий спектр входных данных и желаемого поведения
- Имеет последовательные и надежные аннотации предпочтений
- Балансирует разные типы предпочтений (например, фактичность, безопасность, стиль)
б) Настройка гиперпараметров: Хотя DPO имеет меньше гиперпараметров, чем RLHF, настройка все еще важна:
- β (бета): Контролирует компромисс между удовлетворением предпочтений и отклонением от модели-эталона. Начните с значений около 0.1-0.5.
- Скорость обучения: Используйте более низкую скорость обучения, чем при стандартной тонкой настройке, обычно в диапазоне 1e-6 до 1e-5.
- Размер партии: Более крупные размеры партии (32-128) часто работают хорошо для обучения предпочтений.
в) Итеративное Уточнение: DPO можно применять итеративно:
- Обучите начальную модель с помощью DPO
- Сгенерируйте новые ответы с помощью обученной модели
- Соберите новые данные о предпочтениях на этих ответах
- Переобучите с помощью расширенного набора данных
Этот образ показывает производительность LLM, таких как GPT-4, по сравнению с человеческими суждениями на различных тренировочных методах, включая Прямую Оптимизацию Предпочтений (DPO), Надзорную Тонкую Настройку (SFT) и Проксимальную Оптимизацию Политики (PPO). Таблица показывает, что выходные данные GPT-4 все больше соответствуют человеческим предпочтениям, особенно в задачах суммаризации. Уровень согласия между GPT-4 и человеческими рецензентами демонстрирует способность модели генерировать контент, который резонирует с человеческими оценщиками, почти так же тесно, как и контент, сгенерированный человеком.
Кейсы и Применения
Чтобы проиллюстрировать эффективность DPO, давайте рассмотрим некоторые реальные применения и его варианты:
- Итеративная DPO: Разработанная Snorkel (2023), этот вариант объединяет выборочную выборку с DPO, позволяя более тонкий процесс выбора данных для обучения. Итерируя над несколькими раундами выборки предпочтений, модель лучше обобщается и избегает переобучения на шумные или предвзятые предпочтения.
- IPO (Итеративная Оптимизация Предпочтений): Введенная Azar et al. (2023), IPO добавляет член регуляризации для предотвращения переобучения, что является распространенной проблемой в оптимизации на основе предпочтений. Это расширение позволяет моделям сохранять баланс между удовлетворением предпочтений и сохранением способности обобщения.
- KTO (Оптимизация Переноса Знаний): Более недавний вариант от Ethayarajh et al. (2023), KTO отказывается от бинарных предпочтений вообще. Вместо этого он фокусируется на переносе знаний из модели-эталона в модель политики, оптимизируя для более плавного и последовательного соответствия человеческим ценностям.
- Мультимодальная DPO для Кросс-Доменного Обучения от Xu et al. (2024): Подход, в котором DPO применяется к различным модальностям – тексту, изображению и аудио – демонстрируя его универсальность в соответствия моделей человеческим предпочтениям на различных типах данных. Это исследование подчеркивает потенциал DPO в создании более комплексных ИИ-систем, способных обрабатывать сложные, мультимодальные задачи.
















