Direct Preference Optimization
Proximal Policy Optimization работает хорошо, но необходимость собирать фидбэк, обучать на нем модель наград и тюнить дальнейший RL оказывается довольно ресурсоемкой задачей, вместо которой можно напрямую оптимизировать нашу политику (LLM) по парам предпочтений пользователей. Имея промпт и пару ответов chosen/rejected, мы можем вместо их абсолютных значений награды требовать, чтобы вероятность генерации одного была выше, чем у второго. Как и в PPO, метод имеет свойство сильно ухудшать другие качества модели, из-за чего нужно добавлять ограничивающий член в лосс, который будет сохранять общее распределение предсказаний похожим на начальную модель.
Плюсы метода:
Не требует обучения и хранения в памяти ревард модели, в том числе не подвержен ее собственным искажениям. Проще контролировать, чем PPO.
Можно попробовать использовать вместо исходной модели предполагать равномерное распределение предсказаний, чтобы ограничить затраты по памяти.
Есть модификации, которые используют отранжированные списки ответов для улучшения качества обучения.
Минусы метода:
Некоторые исследования показывают, что модель после DPO перформит еще хуже, чем до него.
Все еще довольно неэффективный по памяти, так как нужно хранить не только саму модель, но и ее начальное состояние, что даже с шарингом некоторых слоев оказывается затратным.
Все еще оверфиттится под датасет. Кроме того, мы не можем использовать многие методы расширения датасета, так как ожидаем, что все ответы сгенерированы одной и той же политикой. То есть, можем наказать модель за то, чего она не делала.
В отличие от более свежих методов, требует больше времени на обучение.