Post content
В посте про OpenChat я упомянул новый метод тюнинга, предложенный авторами, под названием C-RLFT. Недавно вышла другая мощная модель — Starling-7B, в которой также использовался этот метод. Пришло время разобраться в принципе работы. Алгоритм находится в ряду PPO/DPO, то есть на последней стадии тюнинга модели, когда стоит задача сделать модель максимально полезной для человека. Идея заключается в использовании уже готовых данных, но различного качества. В изначальной работе источника два: GPT-4 (expert) и GPT-3.5 (sub-optimal). Таких данных мы можем собрать очень много. Для начала введем 2 вещи: 1. Пусть x — вопрос, y — ответ из источника. В итоговый датасет добавим информацию об этом источнике c, из которого была получена генерация, то есть вместо пар (x, y) будем хранить (x, y, c). Также в нашей модели, которая генерирует y по x добавим дополнительное условие по c, то есть pi(y|x) → pi(y|x, c). Условие по c добавляется просто через изначальный промпт (см. картинку). 2. Награду для пары (x_i, y_i) определим константой, зависящей только от источника (см. картинку). Функция для максимизации записывается в стандартном для RLHF виде: хотим максимизировать награду (то есть генерировать ответы, похожие на expert), не уходя далеко от изначальной модели с условием на класс c (для этого обычно используется KL дивергенция). Далее идет череда математических выкладок и показывается, что итоговый функционал максимизации может быть записан в виде довольно простого выражения (см. картинку). Дополнительно получаем, что нам не нужна Reward Model + не надо хранить изначальную pi_0 модель для подсчета KL дивергенции из классической постановки RLHF. Интересно, насколько этот метод приживется и будет появляться далее (как, например, очень популярный сейчас DPO)