group-telegram.com/buckwheat_thoughts/104
Last Update:
Про магию Deepseek, RL и GRPO
Когда-то, давным давно, никто не занимался глупостями, и не использовал RL в обучении языковых моделей. Был unsupervised претрейнинг, был SFT для обучения моделей следования инструкциям, были какие-то энкодер специфичные лоссы, которые никак не были связаны с генерацией текста, ну и, в общем то, всё.
Потом наступили времена GPT-3.5 и соответствующей статьи опенаи. Авторы добавили третий шаг после претрейна и сфт — RLHF в виде PPO. Работало это так: африканцы, работающие за копейки (по меркам западного мира, по меркам их родных стран получали они вполне неплохо), размечали диалоговые данные на предмет соответствия заданным в ТЗ требованиям, на этих разметках обучался текстовый классификатор, который использовался в лоссе при обучении. Чтобы модель не ломалась и не начинала генерить, например, пустые предсказания (потому что если промолчать, то сойдёшь за умного), дополнительно накладывался KLD-штраф на слишком большой отход от генераций референс моделью. В итоге, постепенно, модель начинала генерить текст, который лучше рейтился классификатором -- и при условии соответствия классификатора human reference'ам, модель переставала быть токсичной, рассказывать про изготовление бомб и крэка и так далее.
Одним из больших плюсов такого подхода было то, что при наличии ревард-модели (классификатора), обучать модель генерациям можно на неразмеченных данных. По сути, ревард модель на лету их размечает, а нам надо только следить за падающим лоссом. С другой стороны, PPO — это штука сложная, нестабильная и требовательная к качеству ревард модели. Если её слишком сложно обмануть, то начнётся reward hacking и модель испортится. Плюс мб это skill issue, но сколько бы я не пробовал применять PPO, у меня всегда взрывался KLD и итоговая модель ломалась. Судя по моим консультациям с коллегами, у них было то же самое — и единственным способом с этим бороться было делать чекпоинты почаще и откатываться на последний рабочий чекпоинт в случае взрыва.
Было ясно, что надо как-то всё упростить, и следующим шагом стал DPO. В нём полностью избавились от отдельной ревард модели, используя саму обучаемую модель для оценки генераций. Если на пальцах — мы берём датасет, где ответы на промпты размечены на chosen и rejected, потом считаем логпробы обучаемой и референсной модели при генерации обоих вариантов ответа, нормируем ответы референсной и обучаемой модели друг на друга и потом оптимизируем сигмоиду от взвешенной разности между этими логпробами.
Это, по сути, стало стандартом для преференс-тюнинга моделей. При наличии даже небольшого размеченного датасета можно было быстро и дёшево обучить инстракт модель тому или иному стилю или добавить в её ответы какие-то свойства. К примеру, авторы моделей через DPO делали их цензурирование, а потом деятели коммьюнити через тот же DPO пытались модели расцензурить. Вариаций на тему этого лосса был миллион, все они отличаются какими-то небольшими изменениями оригинальной формулы и время от времени с ноги влетают на нипс.
А потом, в феврале 2024 года — почти год назад — появилась статья про модель DeepSeek Math, где авторы предложили тот самый GRPO, который используется в так хайпующем сейчас R1. Там они тоже решили отталкиваться от PPO как от базового лосса, но решили пойти чуть в другую сторону. Вместо per-prompt оптимизации, в GRPO сначала семплится батч из промптов, потом для каждого ответа считается ревард, потом из каждого реварда вычитается среднее по всем ревардам в батче и нормируется на std, так получаем advantage. Дальше мы считаем частное между предсказаниями новой и старой моделей и вычитаем KLD, чтобы модель не сильно уходила от изначальных ответов.
В итоге, DeepSeek Math с небольшим сфт колдстартом и GRPO била гораздо большие по размеру модели на основных бенчмарках по матеше. Потом тот же подход повторили Qwen Team — в Qwen 2 Math они тоже использовали GRPO для обучения, а в Qwen-2.5-Math доразметили датасет через Qwen-2-Math и получили ещё более качественную модель.
BY Гречневые мысли

Share with your friend now:
group-telegram.com/buckwheat_thoughts/104