Токен за токеном - SeNS Boston
В среду 30 ноября 2022 года, около десяти часов утра по нью-йоркскому времени, на веб-сайте OpenAI появилась новая страница. Она называлась chat.openai.com и выглядела очень просто: белый экран, посередине окошко для ввода текста, под ним кнопка «Submit». Никакого приветствия, никакого вводного видео, никакой регистрации с подтверждением через смс. Чтобы попробовать, достаточно было создать бесплатный аккаунт.
В тот же день в твиттере OpenAI и лично Сэма Альтмана появилось краткое объявление. В переводе с английского оно звучало так: сегодня мы запустили ChatGPT, попробуйте поговорить с ним. Внизу была ссылка на сайт. Никаких пресс-релизов, никаких пафосных видео, никаких журналистских превью. Просто публикация в социальной сети, такая, какие делают разработчики маленьких приложений, когда выкладывают свой первый прототип.
Во внутренней переписке OpenAI этот запуск называли low-key research preview, «тихая исследовательская превью-версия». Расчёт был такой: пусть несколько тысяч энтузиастов попробуют, расскажут о своих впечатлениях, OpenAI соберёт ценные данные о том, как люди реально общаются с языковой моделью, и через несколько месяцев на основе этих данных подготовит более серьёзный продукт. Никто не ожидал бури.
За первые пять дней работы chat.openai.com у платформы набралось миллион пользователей. За следующие два месяца — сто миллионов. К концу первого года — двести миллионов. К концу 2024 года — больше трёхсот миллионов еженедельно активных пользователей и больше миллиарда людей, попробовавших сервис хотя бы один раз.
Никакое потребительское приложение в истории человечества не достигало ста миллионов пользователей быстрее. Не Facebook, не Instagram, не TikTok. ChatGPT обогнал их всех в несколько раз.
Что было такого в этом простом белом окошке, что заставило четверть человечества за два года попробовать им воспользоваться? Чтобы ответить на этот вопрос, нужно вернуться немного назад и рассказать о двух технических идеях, без которых ChatGPT не работал бы. Эти идеи назывались InstructGPT и RLHF.
Проблема, которой не было у GPT-3
Когда в 2020 году вышел GPT-3, у него была проблема, которую внутри OpenAI обсуждали активно, но снаружи мало кто заметил.
GPT-3 был обучен предсказывать следующий токен в тексте. В этом он добился потрясающих результатов. Но «предсказание следующего токена» — это не то же самое, что «выполнение инструкции пользователя». Если пользователь писал в API запрос вроде напиши электронное письмо коллеге с просьбой перенести встречу на пятницу, модель не обязательно делала то, что от неё хотели. Она могла, например, продолжить запрос, написав: напиши электронное письмо коллеге с просьбой перенести встречу на пятницу. Если на пятницу не получится, попроси перенести на четверг. Эту задачу можно автоматизировать с помощью Outlook. Технически — продолжение текста, статистически правдоподобное. Но не то, чего хотел пользователь.
GPT-3, обученный на огромном массиве обычного текста, моделировал, в сущности, типичный интернет: статьи в Википедии, форумные обсуждения, отзывы на Amazon, фрагменты кода с GitHub. В этом интернете запросы вроде «напиши письмо» обычно были не инструкциями, а заголовками статей или фрагментами обсуждений. Модель училась продолжать такие заголовки естественным для интернета способом. Прямого выполнения инструкции она не умела.
Чтобы исправить это, в OpenAI начали в 2021 году серию работ под общим названием alignment, согласование. Идея: научить модель не просто предсказывать следующий токен, но выполнять то, что от неё хочет пользователь. Делать то, что для языковых моделей не предусмотрено архитектурой.
RLHF и Пол Кристиано
Пол Кристиано, NIST
Главным техническим инструментом, который для этого пригодился, оказался метод, известный под аббревиатурой RLHF: Reinforcement Learning from Human Feedback, обучение с подкреплением на основе обратной связи от людей.
Идея метода восходит к работе 2017 года, которую опубликовал Пол Кристиано, тогда исследователь OpenAI (позже он перейдёт в Anthropic, потом учредит свой исследовательский институт). В оригинальной статье Кристиано показал, что можно обучать агента (например, нейросетевого игрока в видеоигру) не на заранее заданной функции награды, а на оценках реальных людей: пусть люди смотрят пары роликов и говорят, какой из двух больше нравится. По этим оценкам можно построить функцию, аппроксимирующую человеческие предпочтения, и обучать агента максимизировать её.
В 2021 году в OpenAI команда под руководством Лонга Уянга начала применять эту идею к языковым моделям. Процесс выглядел так. Берём GPT-3. Запускаем её на множестве тестовых промптов. Получаем для каждого промпта по несколько разных ответов. Показываем эти ответы группе наёмных оценщиков и просим ранжировать: какой ответ лучше, какой хуже. Собираем десятки тысяч таких сравнений. По ним обучаем отдельную небольшую модель, которая предсказывает, какой из двух ответов человек оценит выше. Эту модель называем «модель награды». Дальше используем модель награды как сигнал для тонкого дообучения GPT-3 методами обучения с подкреплением: модель должна давать ответы, на которых модель награды показывает высокий балл.
В январе 2022 года команда Уянга опубликовала статью под названием Training language models to follow instructions with human feedback. Модель, полученная этим способом, назвали InstructGPT. По сравнению с обычным GPT-3, она показывала разительно более полезное поведение: лучше следовала инструкциям, реже выдавала нерелевантные продолжения, точнее отвечала на конкретные вопросы.
InstructGPT была доступна через API OpenAI, и в течение 2022 года стала вытеснять обычную GPT-3 у разработчиков. Но она оставалась инструментом для разработчиков; широкая публика её не пробовала. Никакого общедоступного интерфейса у неё не было.
Идея чата
Кому именно в OpenAI принадлежит идея сделать из InstructGPT простой чат-интерфейс для широкой публики, в точности неизвестно. По одним свидетельствам, идея витала в воздухе и обсуждалась несколькими сотрудниками одновременно с лета 2022 года. По другим, ключевую роль сыграл сам Альтман, который в какой-то момент сказал: давайте сделаем что-то, что просто работает без программирования; пусть любой человек может с этим поиграть.
В сентябре 2022 года несколько инженеров под руководством Джона Шульмана начали готовить специальную версию модели, дополнительно подкрученную для удержания контекста длинного диалога. Им нужно было решить несколько задач, которые в чисто инструктивных моделях не возникали. Во-первых, помнить предыдущие реплики разговора. Во-вторых, корректно обрабатывать длинные многоходовые задачи (когда пользователь, скажем, начинает с вопроса, потом уточняет, потом снова уточняет). В-третьих, по возможности отказываться от выполнения вредных или неуместных запросов.
Модель, которая получилась, внутри OpenAI называли GPT-3.5. По размеру она была близка к оригинальной GPT-3 (хотя точные параметры компания никогда не раскрывала). По способностям, благодаря дополнительному RLHF и тренировке на диалогах, она была заметно лучше.
В ноябре 2022 года команда обсудила: что с этим делать? Опубликовать статью? Запустить как платный API для разработчиков? Дождаться следующего поколения, GPT-4, которое уже было в