View in Telegram
Повторенье - мать ученья. Или почему DPO, а не reward+ppo. Крч, на днях, дядя обнаружил, что запамятовал суть DPO, да и наркоз стал отпускать. Самое время пойти на архив в папир. Знаете, PPO в RLHF - это как подростковый секс, все о нем говорят, что завели и все круто летит, но мало кто знает и умеет. Так вот - DPO, шкет, это твое спасение на пути в RLHF. Оказывается от этих 4ех буков, останется ток две последние, и то из human feedback оно превращается в preferences tuning без всякого RL. Как это происходит? Давай вспомним, как заводят первый роман PPO: 1. Сначало собирают предпочтения кожаных мешков на генерациях с LLM. 2. Далее размечают попарно какие генерации лучше какие хуже для одной и той же затравки. 3. Потом учат reward модельку этому ранжированию, те проксируют предпочтения человеков, через модельку. Для этого, важно, юзают loss = -E{log(sigmoid[ rank(yi/x) -rank(yj/x)]))} , yi - предпочитаемая yj-му генерация для каждого промпта из x. И вот тут - стоп. Далее не пойдем. Там будет после обучения процедура PPO, а ты еще молодой, у тебя вся жизнь впереди, не надо оно тебе Там эта модель награды используется для получения оценок генерации, мы максимизируем мат ожидание оценок на батче и прочий нестабильный изврат. Вот тут на сцену выйдет DPO. Челики авторы умные сели подумали, а зачем нам эти прокси модельки награды, нестабильный РРО. Когда можно сразу в этап файнтюна закинуть предпочтения как +1ый шаг и главное дифференцируемое е2е. Следим за руками, объясняю на пальцах: вот у нас есть P(x)-вероятность следующего токена порождаемое моделью LLM при промпте Х. И мы хотим, чтобы при генерации у нас было максимальное правдопобие P(yi/x). Те мы хотим, чтобы вероятнее был токен Yi, чем Yj. Значит, мы просто хотим напрямую от модели выполнить адаптацию к нашим предпочтениям. А как это можно сделать без этих наград и тп, но с оглядкой на хинты PPO и reward? Да просто, давайте, возьмём loss такой, что он будет давать предпочтение распределению вероятостей над Yi по отношению к Yj. Как это сделать? Да также как с рангами оценки в reward. Так мы получим loss=-E log(sigmoid[P(yi/x) - P(yj/x)]), но нам чет не хватает. В процедуре РРО для RLHF еще была важная фича. Это регуляризация на reference модель, т.е. на поведение предка (LLM на предыдущем шаге обучения). И выглядело это как вот такая компонента в лоссе: lambda*KLD(P/Pref). Ну один момент, давайте тоже красиво это вставим в промежуточный лосс DPO: Loss=-E log(sigm[Betta*log(Pi/Pi-ref)-Betta*log(Pj/Pj-ref)]), где Pi, j-ref это это вероятности токенов i,j для референсной модели при промпте X. Всë, мы получили искомый DPO лось, с штрафом/оглядкой на поведение референс модели и даже коэфициентик переняли. Зачем нам это? Для того, чтобы наследовать поведение модели предка в некоторой доле по связности изложения, знаниям и тп. Почему для обеих компонент лосса, так это ж оценка на одной и тойже модели, значит и штраф в обоих случаях. Конечно, это пояснение на пальцах, в статье есть целая выкладка в аппендиксе, которая доказывает, что такая функция ошибок действительно является дифференцируемой аппроксимацией над предпочтениями и вообще эквивалентна тому же что и в PPO+reward. Но это вы уже сами почитаете.
Telegram Center
Telegram Center
Channel