Прямая оптимизация предпочтений пользователей в больших языковых моделях

Я сейчас учусь на очень интересном курсе и изучаю методы прямого воздействия на результаты работы ИИ. То есть, не через обучение или инструкции, а через влияние на математические преобразования данных внутри. Понимаю, что это может показаться чересчур сложным, но не переживайте: я всё подробно расскажу.

Обещала начать делиться информацией по завершении обучения, но я в таком восторге, что не могу удержаться совершенно и сегодня расскажу вам про прямую оптимизацию предпочтений – 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>График построен в MS Excel</i>
График построен в MS Excel

Модель Брэдли-Терри

Итак, модель Брэдли-Терри показывает вероятностное распределение попарных сравнений между двумя объектами, например, между результатами двух спортивных команд.

Выглядит оно следующим образом:

Прямая оптимизация предпочтений пользователей в больших языковых моделях

Читаем: вероятность того, что команда 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 из теоремы Брэдли-Терри.

· Есть функция вознаграждения, о которой мы не знаем, но которая определяет, насколько хорош каждый ответ. То есть, насколько велика вероятность, что он понравится человеку больше, чем второй ответ в его паре.

· Цель обучения – сделать так, чтобы ответ, который дает модель, совпадал с ответом, который выбрал человек.

· Модель дает ответ с некоторой вероятностью. Для человека мы тоже знаем, что ему понравится каждый ответ с некоторой вероятностью. Там вероятность – здесь вероятность. Чудесно.

Таким образом, мы можем сразу давать только правильные ответы из готовых наборов данных, модель будет считать для них вероятности быть выбранными, а потом, в процессе обучения, подстраивать вероятности своих ответов так, чтобы они были близки к правильным.

Ура, нам теперь не нужно использовать обучение с подкреплением! Мы можем указывать, как должен выглядеть правильный ответ, напрямую.

Заключение

Вы там как?

Я понимаю, что бросила в вас сразу много математики, о таком заранее предупреждать надо. Но если вы дошли до конца – мой вам глубокий респект.

Я дальше еще буду писать на эту тему здесь и у себя в телеграме. В следующих постах расскажу про то, как прямая оптимизация предпочтений помогает обеспечивать безопасность ИИ, а еще про то, что я делаю и с чем экспериментирую сама в рамках обучения. Постепенно всё сложное станет понятнее, так что заходите, подписывайтесь, будем учиться вместе.

---

* Здесь я съехала на языковые модели, потому что они для меня самые интересные. Но вообще описанные принципы применимы к любым другим моделям.

1
Начать дискуссию