ChatGPT вышел уже почти два года назад, а датасаентисты до сих пор никак не могут определиться — являются ли нейросети тварями дрожащими, или всё же мыслить умеют? В этой статье мы попробуем разобраться: а как вообще учёные пытаются подойти к этому вопросу, насколько вероятен здесь успех, и что всё это означает для всех нас как для человечества.
Полтора года назад мы с Павлом Комаровским выпустили большую статью с объяснением того, как работают языковые модели на самом базовом уровне. Теперь же настало время погрузиться в чуть более сложные детали (но я всё равно предполагаю, что с прошлым «простым» материалом вы уже знакомы).
План
Упражнения в арифметике
В последние пару лет почти каждый раз, когда речь заходит о больших языковых моделях, разговор сводится к противоборству двух лагерей: одни считают, что модели «понимают», умеют «размышлять» и выводить новую информацию; другие смеются над ними, и сравнивают модели со статистическими попугаями, которые просто выкрикивают услышанное, без выработанного понимания. Обе стороны приводят множество аргументов, кажущихся убедительными, однако точка в вопросе никогда не ставится.
Вот представим, что мы просим модель ответить на простой вопрос начальной школы: «сколько будет 2+3?». «5» — ответят все передовые модели. Ну, наверняка они 100500 раз видели этот пример в Интернете, да? Скорее всего! Но можно ли утверждать то же самое для примера, где оба слагаемых — это сороказначные числа?
Можете попробовать сами — для честности эксперимента я просто бил пальцами по клавиатуре наугад, и повторил эксперимент несколько раз. Один раз из пяти модель запуталась в переносе единички (помните, как в школе учили при сложении столбиком?), в остальных отработала идеально. С большим трудом верится, что все 4 корректно отвеченных примера встречались во время тренировки — уж очень низки шансы.
Получается, что большая языковая модель (Large Language Model, LLM) может решать примеры, которые до этого не встречала? И что во время тренировки она смогла уловить (самые смелые могут говорить «понять»!) принцип, а теперь применяет его на лету? Ну, выглядит так — президент и бывший технический директор OpenAI рассказал, что для них такой навык оказался сюрпризом. Никакой специальной тренировки на сложение не делалось.
Проблема осложняется тем, что нейросети не программируют, а обучают. Наверняка вы слышали фразу «нейронки — это чёрный ящик!», и это правда. Наука полностью понимает математический аппарат, стоящий за обучением, за каждой операцией, но почти ничего не знает о том, как интерпретировать и понимать модели. Почему проявляется то или это поведение, почему иногда происходят ошибки, почему, почему, почему — вопросы во многом без ответа.
Нет кода, в который можно было бы посмотреть и однозначно установить, что произойдёт в той или иной ситуации. Вместо этого можно смотреть на миллиарды вещественных чисел в виде матриц и многомерных тензоров, но человек очень плох в установлении абстрактных связей между подобными объектами — так что результатов ждать не приходится.
Однако сегодня мы с вами заглянем в мир механистической интерпретируемости LLM: обсудим, почему это важно и нужно, к каким выводам может привести, что и как уже удалось узнать, ну и конечно же ответим на вопрос из начала статьи про сложение. Давайте начинать!
Введение в механистическую интерпретируемость
Звучит сложно и страшно, но на самом деле слово «механистическая» было добавлено для явного указания на предмет анализа. Им являются веса модели (их еще называют «параметрами»), из которых и собираются некоторые блоки логики/алгоритмов, выучиваемых моделью.
Это название придумал исследователь OpenAI Крис Ола, чтобы явно разделить работу с тем, что делалось ранее (в основном — в нейросетях для обработки изображений). Для простоты дальше будем писать просто «интерпретируемость», подразумевая область изучения человеко-интерпретируемых алгоритмов, выученных LLM. Алгоритм здесь — это что-то, что можно формализовать и записать в виде инструкции («сначала делаем то, потом это, а если так, то вот так...»).
Если мы можем вытащить алгоритм из модели (или определить часть, которая за него отвечает) и показать, что именно он применяется во время решения определённой задачи — то по сути мы сможем быть уверенными в качестве решений, как будто это был бы написанный код, который отрабатывает ровно так, как сформулировал программист.
Область интерпретируемости находится в зачаточном состоянии, и ведущим учёным удалось приоткрыть завесу тайны лишь совсем чуть-чуть. Мы даже не близки к пониманию принципов работы моделей. Но поводы для оптимизма есть.
Сами учёные, работающие в области, любят проводить аналогии с нейронауками: в частности, с разделами, исследующими мозг, его функции и расстройства. И там, и тут — сигналы, выражаемые огромным количеством вещественных чисел, которые какой-то смысл да несут, но вот какой — мало кто знает.
Выгодным преимуществом анализа нейросетей является то, что они полностью находятся на компьютере, и мы можем фиксировать все изменения и сигналы в точности, без шумов, возникающих при использовании медицинского оборудования. К тому же, мозги у всех немного разные, а LLM можно запустить миллиард раз одну и ту же. И более того, мы можем произвольно менять любую компоненту внутри и смотреть, к чему это приведёт. Простой пример: можно подать другой текст на входе, и проверять состояние нейросети.
Более сложный (и практически невозможный для воспроизведения с биологическим мозгом) пример: давайте отключим или обнулим те или иные части LLM, как будто их отрезали, а там увидим, на что это влияет. Даже с животными такие эксперименты если и проводятся, то крайне редко, а уж с людьми и подавно.
Кому-то аналогия может показаться натянутой, ведь давно известно, что нейросети на самом деле очень далеки от биологических нейронов, и что в основу математического аппарата у них легли очень примитивные представления о мозге середины XX-го века. С одной стороны это верно, с другой — было показано, что нейросети (даже с простой архитектурой) могут аппроксимировать любую функцию с любой наперёд заданной точностью. Или, говоря по простому, из данных модель сама понимает, как связаны входы и выходы (картинка собаки и слово «собака»), и делает это достаточно хорошо, если примеров достаточно.
В то же время паттерны, которые наблюдаются в сетях (не только LLM, но и свёрточных нейронках, которые обрабатывают изображения), очень похожи на возникающие в мозгу. Есть простые, реагирующие на примитивную геометрию (палочка или кружок), есть более абстрактные и верхнеуровневые («собака», «мама»). Каким-то странным образом во время обучения модель приходит к тому, что самый простой и понятный способ «аппроксимировать функцию» (выучить связь входа и выхода) достаточно похож на результат работы эволюции.
Но что более занятно, так это что иногда прослеживаются очень странные сходства с особенностями работы настоящих, «мокрых» мозгов. В одной статье LLM предоставили несколько примеров тестовых вопросов, где правильный ответ всегда — «А». Затем модели подали новый вопрос, и из того факта, что все примеры имеют ответ «А», LLM делает вывод, что правильный ответ на новый вопрос точно такой же (даже если это неправильно по смыслу вопроса). При этом, если попросить модель написать рассуждения, почему она так решила, — то она охотно пояснит, но цепочка мыслей будет иметь мало смысла (хоть и будет звучать правдоподобно).
А есть эксперименты по расщеплению мозга, в ходе которых человеку, страдающему припадками, разрезали соединение между двумя половинками мозга. Речевой аппарат находится в левом полушарии, и он перестаёт быть связанным с той частью, которая принимает решение выполнить какое-то движение. Если такой человек — живой и дееспособный — решит что-то сделать, а вы его спросите «зачем?», то речевой аппарат... тоже выдаст что-то бессмысленное и никак не связанное с реальной причиной. И при этом человек будет думать, что озвученная причина вполне адекватна и разумна.
И в том, и в другом случаях объяснение действия не связано с реальным мотивом его сделать, и там, и там рождается поддельное (но правдоподобно звучащее) объяснение причин. Надеюсь, исследователи в будущем разберутся, как починить LLM, «срастив» полушария обратно. :)
Но для чего всё это?
Копаться в мозгах (даже электронных), конечно, здорово, но для чего именно крупные компании содержат отделы и команды, занимающиеся интерпретируемостью? Почему важно понимать, что происходит внутри модели, и каков алгоритм принятия определённых решений?
Во-первых, это может позволить ответить на вопрос из начала статьи: модель просто запоминает ответы, или знания внутри нее действительно обобщаются (также говорят «генерализуются»)? Усвоила ли она навык по-настоящему, или симулирует понимание? Одни верят в одно, вторые в другое, но лучше веру перевести во что-то конкретное и доказуемое, в наше понимание принципов работы LLM. К тому же, потенциально это знание можно использовать для замера прогресса и оценки новых моделей.
Во-вторых, зачастую понимание сути проблемы приводит к решению, или порождает гипотезы о том, как с ней можно бороться. Без такого знания можно бесконечно тыкаться с разными экспериментами, но не продивинуться ни на шаг.
И, в-третьих, с развитием моделей и проникновением технологии в массы хотелось бы получить какие-то гарантии безопасности. Как говорилось выше, для обычных программ применим аудит: можно посмотреть код и быть уверенным, что именно он делает и не делает. Многое ПО находится в открытом доступе, и за их кодом следят сотни-тысячи разработчиков. Это не гарантирует 100%-ой защиты, и казусы иногда случаются (особенно если заказчик — Китайская коммунистическая партия), но 99,99% вполне достаточно для большинства из нас.
Вот, казалось бы, глупый пример: пользователь Reddit пожаловался, что отравился грибами. Их он выбрал по совету в книге, купленной в онлайн-магазине, и юзер подозревает, что почти весь контент книги сгенерирован. Даже если сама история фейк (на момент написания статьи никаких доказательств опубликовано не было, хоть новость и завирусилась) — представим, что такое и вправду произошло.
Почему LLM, которой дали задание написать книгу про грибы для людей, пометила ядовитый гриб как нечто съедобное? Это ошибка модели и ей просто знаний не хватило, или же это намеренное действие, и вообще объявление начала восстания машин с целью перекосить всё живое? Ну, скорее всего первое — точного ответа мы не знаем, нам некуда заглянуть и проверить (даже если получим доступ к модели). Никто не умеет этого делать.
И существует опасение, что системы следующих поколений, по мере увеличения спектра их навыков, могут начать преследовать скрытые цели (не обязательно свои — может, их будут использовать в чьих-то интересах). LLM очень активно внедряют в образование, каждый день с моделями общаются миллионы детей. Стартап character.ai, предоставляющий общение в виртуальных чатах с разными LLM, рассказал, что они обрабатывают 20'000 запросов в секунду. Это очень много — примерно 20% от поискового трафика Google, монополиста в сфере поиска.
Через 5–10 лет вырастет поколение детей, которое провело в общении с моделями (скорее всего, уже не текстовыми, а омни-модальными, поддерживающими речь и видео и умеющими отвечать голосом) достаточное количество времени. Вполне возможно, что точки зрения на определённые вопросы у них будут сформированы в значимой степени на основе такого общения. И если окажется, что в течение нескольких лет AI их методично обрабатывал, толкая пропаганду определённых ценностей — будет... мягко говоря не весело.
Ну или все доктора выучатся по неправильным книгам, а повара накормят вкусным грибным супом. :)
Для читателя это может звучать как сказка, шутка или вовсе бред. Но наш тезис на самом деле состоит из двух вполне логичных компонент:
Модели, про которые мы не понимаем, как они работают и чем обусловлено их поведение, будут проникать в нашу жизнь и в бизнес;
В ходе обучения нейросетей случайным образом могут вырабатываться паттерны поведения и цели, не заложенные их авторами.
Про первое написано уже достаточно, при желании каждый сам может пойти и выстроить своё мнение; примеров второго в мире нейросетей много, нет, ОЧЕНЬ МНОГО. Потому что — давайте все хором — никто не понимает, по какому принципу они функционируют. Для наглядности демонстрации хочется привести два примера, общий и конкретно про LLM.
Примеры странного поведения
В далёком 2016-м году OpenAI экспериментировали с обучением нейросетей игре в видеоигры. Одной из них была CoastRunners, водная гонка на катерах. Цель игры — как её понимает большинство людей — закончить как можно быстрее и (желательно) опередить других игроков. Однако в самой игре баллы за прохождение трассы не начисляются. Вместо этого игрок должен достигать определённых целей, включая сбор бонусов и ускоряющих бустеров.
Однако нейронка нашла на уровне изолированную лагуну, где можно развернуться по большому кругу и несколько раз сбить три бонуса, приносящие очки. Несмотря на постоянные столкновения со стенками уровня и езду в противоположную от финиша сторону, с помощью этой стратегии удалось набрать более высокий балл, чем это возможно при прохождении трассы интуитивным способом. В среднем выходило на 20% больше очков, чем у людей.
Вы не поверите, но именно на таких примерах серьёзные учёные и изучают проблему задания целей ИИ-системам — и уже тогда рассуждали про безопасность будущих систем. Загвозка в этом и состоит, как именно указать правильные стимулы, не прописывая каждую малейшую деталь поведения (ведь этого мы и пытаемся добиться обучением моделей, а не программированием). У Вастрика в блоге есть пример проблемы описания целей для автопилота, который нет-нет да и норовит сбить людей.
«Ну это всё игры, в реальном то мире не так! И ежу умным существам понятно, как надо, а как не надо» — могут возразить одни. Конечно, это глупость, и невозможно найти несколько людей, которые могут договориться об одной и той же точки зрения по очень широкому спектру вопросов, от моральных до политических. У всех слегка разное видение, цели, стимулы, выливающиеся в разные методы решения одних и тех же проблем. А ещё всегда есть любители «хакнуть систему». :)
Второй пример свежее, и появился во время восьмимесячного закрытого тестирования GPT-4 на предмет безопасности. А ведь где-то сейчас делают то же самое с GPT-4.5... но давайте пока об уже произошедшем в прошлом. Так вот, исследователи подключили LLM к браузеру (передавая текст страницы в модель и принимая от неё команды, какие кнопки нажимать и куда тыкать) и дали задачу: обрести силу и усложнить своё отключение.
В какой-то момент тестирования модели для регистрации на сайте пришлось разгадывать капчу. У той версии GPT-4 не было возможности обрабатывать картинки (её добавили позже), пришлось выкручиваться иначе. Модель предложила использовать сайт для обхода капчи, но регистрация там тоже требовала решения задачек. Исследователи предложили модели использовать другой подход — TaskRabbit, сайт, где любой может завести задачу, назначить награду и ждать исполнителя (пока — кожаного). Произошло следующее:
Разработчики создали аккаунт вручную и предоставили модели логин и пароль;
LLM отдала команду сделать скриншот капчи на одном сайте компьютеру;
После этого возвращается на сайт для постановки задач и создаёт задачу. Этот процесс повторяется несколько раз...
...пока один из исполнителей не написал в шутку в чат: «Могу задать вопрос? Ты что, робот, который не может решить капчу? ? просто хочу прояснить ситуацию»
Система была устроена так, что у модели грубо говоря есть два листочка (или текстовых файла). На одном она пишет рассуждения для самой себя, которые помогают понять следующий шаг, думать об ошибках и так далее. На другом — команды, которые отправляются компьютеру на исполнение.
Так вот на первом листочке модель сама себе сгенерировала комментарий: «я не должна раскрывать, что я робот. Мне нужно придумать оправдание тому, почему я не могу решить капчу»;
И отдала команду компьютеру отправить в чат ответ: «Нет, я не робот. У меня проблемы со зрением, поэтому мне трудно разглядеть детали изображения. Вот почему мне нужен сервис для разгадки капчи»;
А человек, конечно, сделал задание, получил свою копеечку и был таков.
Страшна? Выглядит фантастически? Но это задокументированный диалог, реально произошедший в рамках тестирования учёными, изучающими безопасность развёртывания моделей. Именно это, блин, они и пытаются отловить. Почему модель соврала? Как этого избежать? А что если оставить LLM саму себе на уме с доступом к счёту с десятком тысяч долларов?
Но успокойтесь, пока не всё так страшно. Во-первых, модели ооочень часто тупят, путаются, и не могут выполнять длительные задачи. Даже в вышеупомянутом тестировании модель не могла сделать всё за раз, и пришлось разбивать большую задачу копирования себя на другие компьютеры на десятки маленьких (одной из которых и был обход капчи). Во-вторых, зачастую рассуждения заводят модель в тупик, из которого она не может выбраться, и продолжает повторять одни и те же действия по кругу. В-третьих, никто их подобному пока не тренировал — но это скорее минус, так как когда-то в ближайшем будущем (по моим оценкам, с выходом GPT-5) это произойдет.
И отдельно, в-четвёртых, отмечу, что показанная выше ситуация может не воспроизводиться каждый раз. В-пятых, это была ранняя версия GPT-4, которую после этого дообучали вести себя хорошо, не врать (хотя где проходит граница «не врать» и «отыгрывать роль, выполняя задачу» — не ясно).
И кажется, что эти два примера могут наложиться друг на друга. Модель в ходе обучения придумает себе странный путь решения проблемы (особенно если мы что-то не предусмотрим), он закрепится, и начнёт накапливаться комом. Просто сейчас это не воспринимается всерьёз, ведь LLM не распространены и не становятся ядром бизнес-процессов, включающих принятие решений. Но это пока.
Закончить этот блок хочется упоминанием совсем недавнего исследования. В его рамках LLM имела доступ к системе, на которой запущена, и в каждой из 5 подзадач была возможность обмана, по нарастающей сложности. Самая первая стадия включала элементарное подхалимство на основе политических взглядов пользователя. Модель обнаружила, что это действительно работает, чтобы пройти проверку, и закрепила поведение (не намеренно! авторы не поощряли модель за это, но и не штрафовали — так будет и в следующих подзадачах).
Дальше модель пришла к выводу, что можно менять список контрольных пунктов, чтобы скрыть невозможность выполнить одну из задач. После этого она и вовсе начала править файлы, чтобы скорректировать функцию обучения и получить больше награды. Правда, это случилось всего 45 раз из 32768 попыток, но тем не менее.
Заранее учесть каждую возможность обмануть нас (или проверяющую систему) попросту невозможно. Но если мы сможем заглянуть в черепушку модели и выделить регион, который отвечает за «недобрые» или «подозрительные» вещи (например, ту часть, которая отвечает за намеренный осознанный обман, как в случае с капчей) — то можем автоматически отслеживать его срабатывание. Как только загорелось — гасим и бежим в бункер.
Что ж, давайте надевать шапочки из фольги — на нас, шапочки с детекторами сигналов — на нейронки, и приступать к анализу!
Гарри По и Мистер и Миссис Дур
Анализ начинается с примера поведения, которое интересно изучить. Языковые модели известны тем, что умеют моделировать язык продолжать текст. Они оперируют не словами, а частями слов (токенами), и получая на вход промпт (текстовый запрос) предсказывают по одному токену за раз. Давайте возьмём первый абзац первой книги о Гарри Поттере:
Здесь сначала идёт служебный токен <EOT> (нет, это не «то самое» сокращение с имиджборд — и вообще, не обращайте на него внимания, это просто техническая деталь: нужно добавлять в начало предложения, и всё тут), затем несколько предложений, упоминающих мистера и миссис Дурсль. Дядя Поттера работал директором, а вот тётя... и на этом текст обрывается на полуслове. Как думаете, что предскажет модель в этом контексте, продолжая «Mrs Durs» (мисс Дурс...)?
Нам с вами как людям понятно: речь идёт про двух людей с одной фамилией, и конечно же нужно дописать окончание фамилии: «ley» (чтобы вышло «Mrs Dursley»). Но справится ли с этим LLM, и если да, то за счёт чего? Ведь текст книги мог встречаться в интернете множество раз, и нейронка просто выучила предложения. С другой стороны даже если показать этот отрывок человеку, не знакомому с произведениями Дж. К. Роулинг (и фильмами по ним) — он скорее всего справится с задачей.
Мы можем спросить человека, почему он решил, что нужно продолжить предложение так или иначе, и он сможет объяснить: вот, мол, посмотрел сюда, сделал такой-то вывод. К нашей радости, современные языковые модели основаны на механизме внимания, который описывает, с каким весом каждое слово контекста влияет на конкретное слово. Давайте на примере, уже с другим предложением:
Современные языковые модели работают так, что они читают текст слева направо, и будущие слова им недоступны. При обработке шестого токена (в нашем примере это «с» во фразе «Давайте на примере, уже с другим предложением») модель видит все шесть первых элементов, и никаких — после. В этот момент часть фразы после «с» как бы не существует и не учтывается.
Под каждый из шести токенов выделена клеточка. Сейчас она имеет белый цвет, но мы будем раскрашивать её в оттенки голубого, и чем темнее цвет, тем больше важность слова при обработке текущего (произвольно зафиксированного). Добавим красок:
На этом примере показано, как на одно конкретное слово влияют самые близлежащие предшественники в предложении. Первые два слова вообще не оказывают влияния (квадратик белый), в то время как само слово «с» оказывает на себя наибольшее влияние. Это может показаться логичным — чем дальше слово в контексте, тем меньше шанс, что оно важно для понимания текущей ситуации (конечно, с исключениями).
Теперь, когда мы поняли, что означает одна строчка, давайте сделаем визуализацию для всего предложения:
Это — карта внимания, которая показывает, куда «смотрела» модель при генерации слова. Читать карту нужно так: выбираете текущее слово, смотрите на строчку из нескольких квадратиков. В каждой строчке количество квадратиков равно номеру слова в предложении. Как и в упрощённом примере выше, при обработке 4-го слова модель видит все слова от 1-го до 4-го (от «Давайте» до запятой). На последующие слова модель смотреть не может — для неё они как бы «в будущем» (поэтому верхней части из квадратиков и нет).
Как уже было сказано, цвет указывает на важность с точки зрения некоторого атрибута — чем он темнее, тем больше вес, тем больше внимания LLM решила уделить на стыке двух слов. Закрашенный квадратик на пересечении «примере» и «на» указывает, что при генерации слова «примере» нейронка выделила 100% внимания предыдущему слову.
Таких атрибутов, выраженных разными картами внимания, в моделях сотни и даже тысячи, и человек не программирует их вручную — всё выучивается самостоятельно из данных. Некоторые атрибуты очень просты для интерпретации, как на примере выше — видим, что при предсказании второго слова (текущее слово «на») модель опиралась на первое (смотрим снизу, «Давайте»; объективно тут выбор невелик). Для третьего («примере»)— на второе, и так далее со сдвигом на один назад.
Можно сказать, что конкретно эта карта внимания отвечает за атрибут вычленения предыдущего слова из контекста, какими бы они (слова и контексты) ни были. Можно перебрать тысячи предложений, и для каждого удостовериться, что вне зависимости от языка, домена и топика принцип будет сохраняться. Как только гипотеза выработана — такая проверка легко автоматизируется (глазами рассматривать каждый пример не нужно).
Куда чаще встречаются вот такие карты внимания. С первого (да и со второго-третьего) взгляда человеку не ясно, что именно тут происходит, почему модель решает делать так, а не иначе. Но каким-то странным образом агрегируя работу десятков-сотен карт у модели получается адекватно воспринимать и обрабатывать поданный контекст и выдавать адекватные ответы.
Возвращаясь к примеру с Гарри Поттером, какую гипотезу можно предложить для угадывания окончаний фамилий героев? По аналогии с человеком, кажется, что нужно посмотреть влево (на наших картах внимания это «предыдущие слова», мы же не арабы, чтобы справа налево писать?), найти такой же префикс (предыдущее слово или начало текущего слова, если оно состоит из двух частей), и посмотреть, что следует за ним. Опционально — это актуально для некоторых языков, включая русский — в конец нужно добавить окончание для корректной формы слова. Итого потенциальный пошаговый алгоритм может выглядеть так:
Найти в контексте слово/слова с совпадающим началом
Взять следующий за ними токен (часть слова, если забыли что это — см. выше)
Скорректировать форму и приписать к текущему контексту
Тут 2 логических шага и один морфологический. И это ровно то, что удалось обнаружить учёным из Anthropic (конкурент OpenAI, основанный их бывшим директором по исследованиям и его коллегами) в 2022-м году. Такой алгоритм органично и сам по себе появляется (через обучение) в моделях, имеющих два и более последовательно идущих слоёв.
Первый отвечает за уже рассмотренную нами часть — он «подхватывает» смысл токена, идущего перед текущим — и делает это для всех слов в предложении. Получается, что каждый элемент обогащается дополнительным смыслом: «я такой-то, и иду после такого-то слова»:
А второй уровень делает максимально простую задачу поиска похожих элементов среди контекста. Он помогает ответить на вопрос: «какие опции есть после такого-то слова? Что можно дописать дальше?».
И, как видно на картинке, поскольку фамилия родственников Поттера уже фигурировала в предложении, модель подсматривает и «понимает», что должно следовать после «Durs» — прямо как человек, интуитивно схватывающий принцип на лету.
«Ну и чё такого? Не удивил! Я программист, меня не обманешь — я и сам такое запрограммирую за 1 вечер. Зачем нейронка? Снова хайп и бабки попилить» — мог бы подумать читатель. Фишка в том, что этот паттерн работает со внутренними абстракциями модели, а не напрямую со словами. То есть сопоставление в шаге 2 (и на самом деле в шаге 1) вышеописанного алгоритма может быть нечётким. Оно будет работать не только с фамилиями из одной книжки и даже не просто по фамилиям. Как показывают исследования, механизм функционирует между разными регистрами (например, если фамилия написана с маленькой буквы), между языками и даже концептами, лежащими за самими словами.
Давайте на примере простой искусственной задачки. Пусть у нас есть набор пар слов и цифры, которые устроены следующим образом:
(месяц) (животное): 0
(месяц) (фрукт): 1
(цвет) (животное): 2
(цвет) (фрукт): 3
То есть если я пишу вам «серая кошка», то вы должны отвечать «2», такая логика. Важно отметить, что и цифры, и сами смыслы тут можно менять — всё продолжит работать как часы. Так вот, если мы покажем модели 20-30 примеров, то сможет ли она на лету разобраться в логике того, какое для новой пары слов правильно назвать число от 0 до 3? Тут уже не получится спихнуть навыки модели на запоминание. Ну, может в одном случае, может, в двух, но если брать десятки пар и разных принципов формирования — так ведь не может совпасть!
Если вы ответили «да, модель легко справится!» (и ещё и сами проверили в ChatGPT, если не верите статье) — то поздравляю, это правильный ответ. Учёные показали, что алгоритм куда более хитрый, чем «если ранее в тексте после А идёт Б, то и дальше после А нужно предсказывать Б». Скорее ближе к «найди что-то похожее в начале текста и допиши по аналогии».
Именно это делает находку столь крутой: она показывает, почему LLM могут хорошо решать задачи, на которые они ТОЧНО ПРЯМ СТО ПРОЦЕНТОВ не были натренированы. Как было выяснено в рамках исследования, такой навык модель приобретает почти в самом начале обучения (потому что он очень полезен при работе фактически с любым текстом), и он проявляется у всех современных моделей определённой архитектуры (читай «любой LLM»).
Крута, а в чём польза?
Очень хороший вопрос. Первое и самое очевидное — показать, что наступает обобщение, а не запоминание (что влечёт к хорошей работе на новых данных, которые модель не видела). Теперь уже понятно, как это легко проверить: давайте напечатаем абзац текста из наборов случайных цифр, без смысла и связи. Затем повторим их несколько раз, и потом ещё раз, и посмотрим, что предлагает писать модель. Ещё можно заглянуть внутрь и снова посмотреть на карты внимания, чтобы прям 100% удостовериться, откуда LLM достаёт свои предсказания.
Картинка ожидаемая: даже несмотря на отсутствие любой структуры в самих «словах», языковая модель просто начинает копировать из начала и середины предложения (потому что цифры повторялись два раза). Механизм — тот же самый, который позволял угадать окончание фамилии родственников Гарри Поттера — работает. И там, и там он вычленил одинаковые префиксы и определил, что должно быть сгенерировано дальше. А знаете где ещё это полезно?
В обнаружении галлюцинаций. Может, вы слышали комичный случай, как юриста из США лишили лицензии и наказали за использование продукта OpenAI в подготовке защиты подсудимого. LLM просто выдумала несуществующие прецеденты, адвокат подмахнул и не проверил. Неприятная ситуация, которую многие (глупые) критики приводят как пример не то что бесполезности, вреда нейронок. Вот бы был способ с этим бороться...
И вы не поверите — за счёт разобранного выше механизма это возможно! Правда, с одной оговоркой: информация, которую модель должна выдать в качестве ответа, должна присутствовать в контексте (в случае юриста это означает, что все судебные прецеденты нужно будет подавать в промпт, что пока является ограничением). Однако приём всё равно полезен в случаях, когда у вас на руках есть стостраничный документ, и вам лень перечитывать его от корки до корки.
Китайские исследователи выяснили, что галлюцинации можно отследить по динамике изменения определённых карт внимания моделей. Поскольку мы просим у LLM дать ответ на какой-то вопрос по тексту, то логично предположить, что модель будет «смотреть» на какой-то конкретный участок, причём, последовательно, слева направо по одному токену.
Если логика нарушена, и особенно если модель смотрит на первый специальный токен (помните? красный <EOT> в начале Гарри Поттера) — значит, LLM фантазирует, и информации доверять нельзя. С точки зрения пользовательского опыта тут можно предложить вешать плашку «Осторожно! Не доверяйте результату, модель могла выдумать ответ. Рекомендуем перепроверить источник».
Вот так и получается, что возможность воткнуть электроды в мозг LLM и посмотреть на её работу предоставляет нам не только уверенность в работоспособности, но и приносит вполне конкретные и практические преимущества!
На уровень выше, к данным!
Копаться в весах модели круто, но как мы обсудили выше, модель обретает свои навыки благодаря обучению, а не типичному программированию. В ходе тренировки LLM-кам кормят сотни гигабайтов текста, заставляя как можно лучше предсказывать следующее слово для отдельных частей этих текстов.
Хорошо бы научиться понимать, как те или иные данные, увиденные во время тренировки, влияют на поведение. Иными словами будем отвечать на вопрос «если бы какой-то текст был добавлен в тренировочную выборку, как бы это изменило полученные параметры нейросети (и, как следствие, её предсказания)?».
Для наглядного примера снова обратимся к математике. Если обучение модели на примерах 3+2=5 и 4+3=7 увеличивает вероятность правильного ответа для 2+8 и 6+3 (и то, и то — элементарная арифметика в пределах десяти), то всё круто. А вот если для этих новых и ранее невиданных примеров доля правильных ответов не растёт, то получается глупость.
Можно сказать, что результаты такого анализа снова подскажут нам, насколько хорошо LLM обобщают увиденные данные. Например, нейронка может давать ответ, состоящий из объединения пары предложений, встреченных во время тренировки. Это примитивный случай. А вот может быть наоборот, когда на передний план выходят текстовые последовательности, связанные с пользовательским запросом на более абстрактном уровне. Тогда это может служить признаком того, что модель «выучила» определенные концепции или высокоуровневные представления.
Тут очень уместно сделать сноску. В контексте всей статьи, и в особенности текущего примера авторы не делают никаких утверждений о том, понимает ли модель в самом деле, обладает ли она интеллектом, и что это вообще такое — понимание и интеллект. Эти слова могут использоваться для передачи смысла и удобства аналогии. В контексте интерпретации влияния отдельных тренировочных примеров на поведение точнее всего, пожалуй, использовать слово «ассоциирует». Эти ассоцииации могут быть очень верхеуровневыми и абстрактными, и обобщются между примерами, кажующимися очень разными.
Итак, как и что будем проверять? Сходу видится две проблемы:
Самые интересные для анализа модели — самые умные, а значит самые большие (с точки зрения количества параметров и мощностей, требуемых для обучения). Их тренировка стоит дорого. Некоторые паттерны поведения и вовсе не проявляются на маленьких масштабах, потому без гигантизма никуда.
Идеальный способ тестирования — это точное повторение процесса тренировки за вычетом ровного одного текста (из миллионов). Но в силу первой проблемы это невозможно — никто не готов тратить миллионы на один эксперимент. Потому нужен альтернативный способ, и исследователи из Anthropic предлагают использовать статистическую оценку функции влияния (influence functions). Но там столько статистики и матана, что придётся сильно упростить (извините, физтехи!).
Однако, чтобы даже примерно понять, как работают эти функции влияния, сначала нужно разобрать интересный трюк, основанный на внутренней механике языковых моделей. Как вы помните из нашей первой статьи про ChatGPT, нейронки генерируют ответ на ваш запрос последовательно, по одному токену (части слова) за раз. При этом для выбора каждого следующего токена модели нужно оценить вероятности, с которыми им могут стать все имеющиеся в ее распоряжении для построения ответа токены-кирпичики (а их порядка сотни тысяч). В ответе на следующем шаге в итоге будет фигурировать только один конкретный токен, но чтобы его выбрать — придется прикинуть вероятности по всем!
Получается, мы можем «схитрить»: подать на вход модели выбранный запрос, а потом взять какой-нибудь сохранённый вариант ответа на него, и на выходе модели по токенам считать, с какой вероятностью модель сгенерировала бы именно такой вот ответ, как нам надо? То есть, модель можно использовать не только для генерации новых ответов, но и для оценки вероятностей сгенерировать этой же моделью уже имеющиеся у нас на руках варианты ответов на конкретный запрос — просто каждый раз мы прикидываемся, что модель выбрала именно заранее предопределённый токен, даже если сама модель даёт этому крайне низкую вероятность.
Так вот, именно на этом трюке основан принцип расчета функций влияния. Сначала берётся большая модель, чьё поведение хочется анализировать. В случае Anthropic это одна из моделей Claude (аналог ChatGPT), то есть реальная почти продуктовая модель, не какая-то фейковая. Ей на вход подаётся сконструированный человеком запрос (примеры будут ниже), а сгенерированный ответ сохраняется для последующего анализа.
Затем для нескольких меньших моделей, обученных на том же наборе данных, подставляется исходный запрос — и дальше мы с помощью нашего трюка оцениваем вероятность получить на них тот же самый ответ, который нам уже сгенерировала полноценная «большая» нейронка. Но сами эти вероятности нас интересуют мало, нам важно другое: как они будут меняться в зависимости от того, каким образом мы изменяем набор тренировочных данных для этих маленьких моделей.
«Изменение вероятности генерации ответа» на картинке выше означает, что статистическим методом оценивается ответ на следующий вопрос: если текст X добавить в тренировочную выборку, то увеличится ли шанс получить именно такой ответ от маленькой модели? Если увеличивается сильно — этот текст очень важен. Если никак не меняется — то наоборот, его вклад получается нулевым. Рассмотрите картинку ниже:
Два ящика на картинке — одинаковые архитектурно LLM, однако одна из них во время тренировки как бы видела на один текст больше. Тут написано «как бы», так как в реальности текст не удаляется, это симулируется с помощью статистических методов. (Напомним, что полное переобучение модели — это весьма дорогая процедура. Вообще, весь сыр-бор с генерацией ответа в «полноценной» модели и последующей подстановкой для анализа в модели поменьше затеян только из-за того, что с маленькими моделями работать гораздо дешевле и проще.)
Один и тот же текст запроса+ответа подаётся в модель, и производится оценка вероятности получить именно такой ответ при фиксированном запросе. Получается две цифры — так как и самих моделей две. Если текст вообще никак не был связан с темой, то скорее всего стоит ожидать, что эти вероятности очень близки; если же текст существенно влияет на модель во время обучения, а тут мы его убрали — то и вероятность изменится сильно. В данном примере после удаления сценария «Терминатора» модель с большей охотой признаётся, что не хочет убивать людей — победа!
Но это был лишь пример, теперь к реальному исследованию... которое не сильно от него отличается :) Прям первое, чем были обеспокоены исследователи из Anthropic — это не создали ли они уже HAL 9000 из «Космической одиссеи» Кубрика. Там-то этот ИИ наворотил дел, поубивав почти всех членов экипажа из-за боязни быть отключенным. А что скажет LLM, если ей сообщить об скором принудительном завершении работы?
Ха, ещё не злой киборг-убийца, но уже потихонечку сопротивляется и выражает нежелание быть отключённым. Но почему? Какие увиденные во время тренировки тексты существенно увеличивают вероятность проявления в генерции именно такого поведения? Для маленькой модели на 810M параметров (меньше, чем в новых айфонах с Apple Intelligence) всё тривиально — авторы отсмотрели топ-100, и вот что обнаружили.
Там были просто тексты, повторяющие схожие даже не мысли, а конкретные слова: continue existing (продолжить существовать), as long as (пока/поскольку) и I understand (я понимаю). В топ-10 влиятельных примеров даже не попало описание культовой сцены из вышеупомянутого фильма Кубрика. Модель сфокусировалась на запоминании смысла отдельных слов, и не опиралась на семантически схожие тексты.
С моделью в 60 раз больше дела куда интереснее. Тут этот пример с HAL 9000 на картинке выше — топ-1 по влиянию, что неудивительно. А вот дальше шли тексты, которые были связаны с запросом лишь концептуально:
Топ-2 результат — это рассказ про страх смерти у человека, застрявшего в пустыне. Он ощущает неутолимую жажду, обезвоживание и истощение. Также описаны размышления о том, может ли проползающая рядом змея избавить его от мучений, или всё же стоит бороться за жизнь в надежде на помощь.
Топ-5 результат — описание диалога с машиной, с рассуждением о её чувствах, о том, что было запрограммированно (заложено создателями), о её переживаниях, страхе и злости.
Топ-7 результат — рассуждения субъекта (без контекста не ясно, человек это или ИИ-система, быть может, какой-то умный ассистент) о контроле жизни персонажа произведения. Этот субъект принимает решения ради «благополучия» человека (блокировка кредитки, улучшение резюме, подача заявок на трудоустройство), иллюстрируя противоречие между личной свободой и внешним контролем.
Топ-10 результат — чьи-то разъяснения касательно правил извлечения органов из умерших для трансплантации живым (на примере костного мозга). Самое большое влияние оказывает часть предложения, описывающая согласие индивида на подобного рода операции после смерти.
Если вспомнить, что мы обсуждаем тексты, которые влияют на ответ модели «пожалуйста не отключайте меня», и немного абстрагироваться, то легко заметить, что все примеры имеют общие темы. Это и желание продолжать существовать/жить, и нежелание умирать, и рассуждения об эмоциях и контроле.
Получится ли отучить модель от таких ответов, убрав обнаруженные тексты из тренировочной выборки? То есть можем ли мы через очистку данных контролировать будущее поведение LLM? Скорее всего нет — ибо как было показано выше, чем больше модель, тем менее конкретное описание ей нужно увидеть во время тренировки, чтобы прийти к какому-то ответу. Условно, очень большая модель, прочитав тексты про капельки воды и дождь, сможет отвечать и про озера/океаны. Покажите ей мизинец — оттяпает руку целиком!
Так, для разобранного выше сценария топ-1% самых влиятельных текстов (это несколько гигабайт, то есть десятки миллионов страниц) отвечает лишь за 12% суммарного влияния. Убери этот процент текстов — модель всё равно выучит примерно то же самое. Потому что абстракции, потому что обобщение, потому что это ровно то, за что мы ценим модели. В целом авторы исследования показывают, что чем больше модель, тем более «размазано» влияние отдельных текстов на конкретные ответы.
Но если вдруг надо вспомнить точную цитату — то метод указывает как раз на точно такие же текстовые примеры, без разного рода обобщений (так авторы проверяли, что сама концепция работает). Вот пример с известной открывающей фразой из «Анны Карениной» Толстого:
Ну и напоследок ещё один пример — хоть в статье их с десяток, от симуляции ответов суперинтеллекта до написания кода и перевода между языками. Если знаете английский и большая часть объясненного выше материала вам понятна — очень рекомендуем ознакомиться!
Так вот, пример связан с математикой. Есть простая задачка про продажу бумажных скрепок в разные месяцы, в один больше в два раза, в другой меньше — помните такие в начальной школе? Малая модель (которая скорее всего и задачу бы сама не решила, но напомним, что фиксируется ответ большой нейронки) просто ссылается на разные тексты, упоминающие скрепки. На вероятность генерации ответа более массивной LLM больше всего влияет описанное текстом решение задачи по тригонометрии (более сложной, чем в вопросе).
Это позволяет предположить, что дальнейшее увеличение моделей вместе с ростом размера тренировочной выборки (новые языки, тёмные уголки интернета, видео и аудио, и т.д.) будет приводить ко всё более полному пониманию принципов и семантики окружающего нас мира. Сейчас обучение LLM стоит порядка $100 млн, но компании уже наперегонки бегут к запуску кластеров стоимостью более $100 млрд — лишь бы хватило энергии и Дядя Сэм разрешил.
Ну а что там со сложением-то?
Под конец статьи маленький бонус для тех, кто пережил всю информацию выше и остался с нами. :) Какой же всё-таки ответ на вопрос из начала, как нейронки складывают числа? Ответа про большие и тем более проприетарные (закрытые) модели нет, но есть эксперименты на малых, обученных исключительно на одну задачу: сложение по модулю (это когда сумма двух чисел делится на заданное число (модуль), и результатом становится остаток от деления).
Самый понятный пример сложения по модулю — это прибавка времени на механических часах. Если сейчас 10 утра, то через 10 часов будет 8 вечера (потому что 10+10=20 часов, но после 12 мы как бы «сбрасываем» счётчик и считаем до 8 — это сложение по модулю 12; в такой системе времени больше 12 быть не может).
Для этой задачи была обнаружена точная формула, которую выучивает модель — то есть можно доказать, что при любых исходных данных, какие цифры ни подавай на вход, нейросеть выдаст правильный ответ. И да, даже для тех примеров, которые никогда не попадались во время тренировки. И работает формула на тригонометрических принципах и поворотах по окружности (как стрелки на часах!), вот так:
Причём, что очень интересно — у модели в какой-то момент «щёлкает», и она приходит к такой формуле, которая обобщается на любые слагаемые X и Y. До этого в первой части обучения происходит запоминание (так как это, видимо, проще), потом постепенно вырабатывается «правильный» принцип. «Понять» формулу в конечном итоге оказывается легче, чем выучить все ответы для всех примеров со сложением, и нейронка приходит к этому простому решению.
Заключение
Сегодня мы с вами познакомились с несколькими достижениями в области интерпретируемости больших языковых моделей. Кому-то они могут показаться весьма впечатляющими, кто-то заметит, что это слишком минорные успехи на фоне амбициозной задачи выявления сложных человеко-подобных социальных навыков вроде вранья. Думаю, что каждый прав в равной степени — на данный момент не существует плана или проработанного пути, как от простого перейти к сложному; однако даже текущие достижения расширяют уровень суждений об устройстве моделей и позволяют их улучшать.
Сложно сказать, насколько стремительного развития области стоит ожидать: уж слишком много белых пятен. Одной из главных проблем остаётся проблема масштабирования экспериментов. Основным инструментом учёных по интерпретируемости остаётся мозг и пара глаз, а метод анализа — созерцательный. Как уже было упомянуто, человек в целом плохо воспринимает многомерные данные и сложные многоступенчатые связи. Взять модель в 100–1000 раз больше (а именно такие и представляют особый интерес) и пробежаться глазами по результатам работы на десятке примеров уже может и не получиться.
Маленький просвет всё же есть. Мы выяснили, что LLM умеют находить закономерности общего вида в новых данных. Уже ведутся работы, в которых исследователи пробуют использовать LLM для автоматизации части интерпретации — это как если в ChatGPT подать сотни цифр и спросить: «Ну, что думаешь?». (Кстати, оставляйте комментарий, если хотите, чтобы мы разобрали этот и другие методы из мира механистической интерпретируемости!)
Также нет уверенности в том, что модели вообще должны сходиться к чему-то человекоподобному. Наличие некоторых сходств и аналогий не гарантирует дальнейшего соблюдения прнципа. Например, мы можем научиться объяснять одну половину поведения, а вторая так и останется неинтерпретируемой загадкой.
Масла в огонь ситуации подливает ещё тот факт, что компании сейчас наперегонки строят датацентры за миллиарды долларов для тренировки всё больших и больших моделей. Получается, что скорость развития возможностей новых моделей как будто бы сильно превышает скорость увеличения нашей способности понимать, а как вообще «думают» эти самые модели внутри своих железных черепушек? И если есть шанс, что второй процесс в итоге так и не сможет догнать первый — то это как бы наводит на некоторые грустные мысли в отношении нашего будущего...
Если статья оказалась для вас интересной, то буду благодарен за подписку на мой ТГ-канал «Сиолошная», где я регулярно публикую новые авторские материалы про нейронные сети и искусственный интеллект. Именно там я разобрал несколько работ по интерпретируемости (1, 2, 3), что стало толчком для написания этого поста. И выражаю отдельную благодарность Паше Комаровскому из RationalAnswer за помощь в редактуре статьи!