Прямая оптимизация предпочтений пользователей в больших языковых моделях
Я сейчас учусь на очень интересном курсе и изучаю методы прямого воздействия на результаты работы ИИ. То есть, не через обучение или инструкции, а через влияние на математические преобразования данных внутри. Понимаю, что это может показаться чересчур сложным, но не переживайте: я всё подробно расскажу.
Обещала начать делиться информацией по завершении обучения, но я в таком восторге, что не могу удержаться совершенно и сегодня расскажу вам про прямую оптимизацию предпочтений – Direct Preference Optimization.
Теоретическое введение
Легче погрузиться в тему и получить интуитивное представление о той области исследований, которую я вам здесь представлю, помогут вот эти два моих поста:
А сегодня мы разберем статью «Direct Preference Optimization: Your Language Model is Secretly a Reward Model» («Прямая оптимизация предпочтений: ваша языковая модель в тайне модель вознаграждения»).
Хронологически она вышла раньше, чем исследования, которые я описываю в тех двух постах. Но те исследования очень практические, поэтому на их примере будет проще понять, что к чему и зачем, как мне кажется.
Так вот, прямая оптимизация. О чем здесь речь?
Чаще всего, когда модель обучают человеческим ценностям (не ругаться матом, не оскорблять пользователя и всё такое), это делают в процессе обучения с подкреплением при участии человека: ИИ выдает ответ, человек отмечает, хорош этот ответ или плох, ИИ в следующий раз выдает другой ответ.
Это распространенный подход, потому что мораль и ценности – штука трудно формализуемая, если формализуемая вообще. Непонятно, как ее описать в строгих математических терминах, но понятно, но понятно, этично что-то или нет, когда мы это что-то видим.
Надежный ли это подход? Ну раз мы рассматриваем статью, которая предлагает альтернативный метод, то не совсем надежный. Чтобы понять, почему, давайте сделаем несколько шагов назад и обратимся к самым примитивным примерам работы обучения с подкреплением.
И еще один шаг назад.
Вот так.
В машинном обучении есть три основных подхода к обучению:
· С учителем;
· Без учителя;
· С подкреплением.
Обучение с учителем предполагает, что мы даем правильные ответы на вопросы, чтобы модель научилась находить связь меду ответом и вопросом, чтобы потом ее использовать.
Например, мы хотим классифицировать письма на «спам» и «не спам». Мы берем много писем и сами их помечаем как «спам» и «не спам» – мы не думаем, на основании каких признаков это определили, просто ставим метки. Потом передаем эти данные модели, и она выводит общие закономерности, которые спам отличает от не-спама.
Обучение без учителя правильных ответов не предполагает, модели нужно найти закономерности в данных, про которые ничего неизвестно или мало что известно.
Например, у нас есть куча непрочитанных писем, и мы хотим понять, про что там вообще написано. Мы даем их модели и говорим: «Разложи на три большие кучи». Она раскладывает так, чтобы похожие друг на друга письма оказались в одной куче, а отличающиеся письма – в разных. Мы можем просмотреть по несколько писем из каждой группы и решить, что мешанина получилась какая-то. Тогда мы скажем: «Давай на пять куч,» – и снова посмотрим на результат. И так до тех пор, пока не получим вариант, который нас устроит.
Наконец, обучение с подкреплением предполагает, что у нас есть некоторое представление о том, что будет, если модель даст правильный ответ. И мы можем это что описать математически.
Например, мы хотим научить модель играть в мобильную игру, в которой маленькие кораблики соревнуются друг с другом на гоночном треке. Что будет, если модель сделает правильный выбор? Её кораблик придёт к финишу первым. Тогда мы пропишем функцию в духе: «Если кораблик пересек финишную черту первым, ты получаешь 1 балл. Если нет, ты получаешь -1 балл». И модель будет получать свои +1 и -1 и на этом основании корректировать свои действия. Вот эта функция, которая присваивает и отнимает баллы, – это модель (или функция) вознаграждения.
Здесь сразу возникает сложность: неправильно пропишешь функцию вознаграждения – модель обучится делать не то, что надо. Например, если прописать, что модель получает вознаграждение за самое большое число набранных очков в игре, она откажется участвовать в гонке и будет кружиться на месте, собирая бонусные предметы, как в этом видео.
Ладно, с корабликами всё достаточно просто, но есть другие задачи. Например, сложить высушенное бельё: нужно учесть плотность и эластичность разных тканей, силу захвата и много других вещей. Писать подробную функцию сложно, поэтому проще показать, а потом оценивать, насколько хорошо получилось повторить, и улучшать результат постепенно. Вот, например, видео с роботом, который очень старательно складывает одежду.
С моральными ценностями, как мы уже сказали, всё ещё сложнее, поэтому обучение с подкреплением от человека и применяется в этой области.
Но это сложно и дорого: сначала надо обучить модель на большом наборе данных, чтобы она в принципе начала работать. Потом еще дообучить, привлекая людей в процессе. Ну и там все люди дадут разные оценки в зависимости от собственных предпочтений, модель чему-то научится и поди проверь, научилась она тому, чему ее пытались научить или чему-то совсем другому. Это не кораблик, на который посмотреть можно.
Прямая оптимизация
Когда языковые модели обучают давать безопасные и приемлемые с человеческой точки зрения ответы, весь процесс состоит из трех частей:
1) Дообучение с учителем;
2) Формирование функции вознаграждения;
3) Обучение с подкреплением.
Мы пропустим здесь «нулевой» этап, когда модели дают огромный массив текстов, чтобы она в целом смогла складывать слова в предложения*. На этом нулевом этапе в ход идет всё, что создателям удалось найти: все форумы в интернете, тексты из социальных сетей, спираченные где-то книги – вообще любой текст. Разумеется, на таких объемах невозможно проследить, чтобы все данные были высокого качества и не содержали того, чего нам бы не хотелось увидеть в исполнении ИИ.
На этапе дообучения модели дают уже тщательно выверенный и вычищенный набор данных. Он гораздо меньше первого и собран специально под конкретную задачу, например, для ведения диалога с пользователем или формирование краткого пересказа текстов.
На втором этапе модели дают запросы, на которые она должна сгенерировать ответ. Если ее тренируют для ответов на вопросы, ей дают набор вопросов и записывают ответы. Если на краткий пересказ текстов, дают длинные тексты и записывают ее пересказ. Полученные ответы передаются людям, которые отмечают, нравится им увиденное или нет. Здесь и происходит формирование скрытой функции вознаграждения: человек дает свой +/- балл, и модель на основе этого выводит какую-то сложную функцию, описывающую разницу между правильным или неправильным ответом. Что в этой функции содержится, мы не знаем.
Есть модели (здесь в смысле «приближения»), описывающие вероятностное распределение оценок, которые дает человек. Одна из них – модель Брэдли-Терри. Прежде чем к ней перейти, дадим краткую теоретическую справку о распределении вероятностей. Если она вам не нужна, пролистните следующий раздел.
Краткая теоретическая справка
Вероятностное распределение – это функция, которая показывает, какое значение принимает переменная с какой вероятностью.
Для понимания возьмем простой пример: подбрасывание монетки. Представим себе, что у нас есть математически честная монетка – это значит, что она приземлится орлом или решкой кверху с вероятностью строго 50%. Проведем серию экспериментов, в рамках которых мы будем подбрасывать монетку два раза подряд и записывать результаты. У нас могут получиться следующие варианты (О – орёл сверху, Р – решка сверху):
· Бросок 1 – О, бросок 2 – О
· Бросок 1 – О, бросок 2 – Р
· Бросок 1 – Р, бросок 2 – Р
· Бросок 1 – Р, бросок 2 – О.
Варианты «сначала орёл, потом решка» и «сначала решка, потом орёл» для нас в данном случае одинаковы, объединим их:
· Выпало 2 орла – 1 комбинация из 4 возможных вариантов;
· Выпало 2 решки – 1 комбинация из 4 возможных вариантов;
· Выпал один орёл и одна решка – 2 комбинации из 4 возможных вариантов.
X комбинаций из 4 возможных вариантов – это вероятности выпадения каждой комбинации. Таким образом, имеем следующее распределение:
· ОО: ¼
· РР: ¼
· РО (=ОР): 2/4
Обычно нас интересует какой-то один их возможных исходов, например, выпадение орла:
· ОО – 2 орла: ¼
· РО (=ОР) – 1 орёл: 2/4 = ½
· РР – 0 орлов: ¼
Наносим значения на график, и вот что у нас получилось:
Модель Брэдли-Терри
Итак, модель Брэдли-Терри показывает вероятностное распределение попарных сравнений между двумя объектами, например, между результатами двух спортивных команд.
Выглядит оно следующим образом:
Читаем: вероятность того, что команда i победит команду j (наберет больше очков) равна отношению рейтинга команды i к сумме рейтингов команд i и j. То есть, pi и pj – это реальные оценки, которые у нас уже есть по результатам наблюдений. Это положительные числа (мы считаем, что отрицательного числа очков никто не наберет, даже если сильно постарается).
График распределения вероятностей выглядит так:
График нарисован в Geogebra, и я сохранила для вас интерактивную версию.
Если вам интересно доказательство теоремы или что-то еще из теории вероятностей, напишите в комментариях, и я сделаю пост с разбором.
Математика – наука точная, но свободная. Если вам удобнее работать не с положительными числами, а вообще с любыми, то можно поколдовать над формулой и получить новый вариант с экспонентой:
Тут мы просто решили: а пускай pi будет равно e^(Theta_i), а pj будет равно e^(Theta_j), потому что так формулу удобнее использовать.
Здесь у текстового редактора vc не хватает инструментов, поэтому поясню: Theta -- это вот та греческая буква, которая похожа на О с горизонтальной чертой посередине.
Параметры Theta_i и Theta_j ничем не ограничены и могут быть отрицательными, а e^(Theta) всегда будут положительными, как и p в исходной формуле, так что фактически ничего не изменится.
Вот еще один график:
Синяя линия – это наш предыдущий график, а зеленая – то, во что он превратился после того, как мы поменяли формулу. В интерактивной версии, ссылку на которую я оставила выше, с графиками можно поработать самостоятельно. К тому же я оставила там дополнительные пояснения.
Вы узнаёте зеленый график?
Если нет, знакомьтесь: логистическая регрессия. Очень приятно.
Это одна из моих любимых моделей, но имя ее вводит в заблуждение. На самом деле, это модель, которая используется для классификации объектов на две группы, например, кошки / собаки, спам / не спам, хороший ответ / плохой ответ. Именно поэтому мы и взялись за экспоненты: нам нужно было показать, что теорема Брэдли-Терри – частный случай логистической регрессии. Только логистическая регрессия дает ответ «i или j», а нам нужно «i предпочтительнее j». То есть, скорее не выбор, а вес каждого варианта.
Обучение с подкреплением
Так, а что там у нас с функцией вознаграждения? Зачем нам были нужны все эти графики? И что это так бумкнуло? (Я надеюсь, не чей-то мозг).
На самом деле, мы уже собрали все кусочки пазла, осталось только сложить их вместе.
Итак:
· У нас есть ответы, которые дала некая модель на наши запросы. Если вы пользуетесь ChatGPT, вы видели, что он иногда пишет два варианта ответа и предлагает вам выбрать тот, который вам больше нравится. Вот такого рода ответы у нас есть.
· Люди сели и в каждой паре выбрали, какой вариант лучше, то есть, определили наши pi и pj из теоремы Брэдли-Терри.
· Есть функция вознаграждения, о которой мы не знаем, но которая определяет, насколько хорош каждый ответ. То есть, насколько велика вероятность, что он понравится человеку больше, чем второй ответ в его паре.
· Цель обучения – сделать так, чтобы ответ, который дает модель, совпадал с ответом, который выбрал человек.
· Модель дает ответ с некоторой вероятностью. Для человека мы тоже знаем, что ему понравится каждый ответ с некоторой вероятностью. Там вероятность – здесь вероятность. Чудесно.
Таким образом, мы можем сразу давать только правильные ответы из готовых наборов данных, модель будет считать для них вероятности быть выбранными, а потом, в процессе обучения, подстраивать вероятности своих ответов так, чтобы они были близки к правильным.
Ура, нам теперь не нужно использовать обучение с подкреплением! Мы можем указывать, как должен выглядеть правильный ответ, напрямую.
Заключение
Вы там как?
Я понимаю, что бросила в вас сразу много математики, о таком заранее предупреждать надо. Но если вы дошли до конца – мой вам глубокий респект.
Я дальше еще буду писать на эту тему здесь и у себя в телеграме. В следующих постах расскажу про то, как прямая оптимизация предпочтений помогает обеспечивать безопасность ИИ, а еще про то, что я делаю и с чем экспериментирую сама в рамках обучения. Постепенно всё сложное станет понятнее, так что заходите, подписывайтесь, будем учиться вместе.
---
* Здесь я съехала на языковые модели, потому что они для меня самые интересные. Но вообще описанные принципы применимы к любым другим моделям.