Что происходит внутри языковых моделей, когда они «рассуждают» над задачей
Цепочки рассуждений – полезный инструмент в работе с языковыми моделями. Они позволяют сделать две вещи:
- разбить сложную задачу на более простые компоненты и получить более качественный результат;
- проследить за тем, как модель работает над задачей, и выловить ошибки до того, как они повлияют на результат.
Одна беда: мы, как обычно, не слишком хорошо понимаем, что происходит «под капотом». В силу какой математики языковая модель отвечает на вопрос о столице Франции «Париж»? Какие матрицы в каком месте на что перемножились, что в результате длинных рассуждений о причинах странной чесотки модель рекомендует обратиться к врачу?
Есть разные способы вскрыть капот и заглянуть внутрь, и один из них – вполне перспективный – мы как-то уже обсуждали: графы причинно-следственных связей. Они наглядны, человекочитаемы и, кажется, в самом деле имеют смысл.
Авторы публикации «Verifying Chain-of-Thought Reasoning via Its Computational Graph» («Проверяем цепочки рассуждений через их графы») к ним обращаются, чтобы внести немного прозрачности в процессы рассуждений.
Краткое содержание
С использованием графов причинно-следственных связей смогли проследить, как модели приходят к решению разных задач, и даже поправить точечно ошибки и улучшить результаты.
Сегодня посмотрим на эти графы и разберёмся, как они работают.
Полное погружение
Главная прелесть графов причинно-следственной связи в том, что они могут нам помочь проследить, на основании чего получился ответ, который получился. Мы говорили ранее о прямой оптимизации предпочтений и о работе с векторными представлениями разных абстрактных концепций внутри больших моделей. Эти методы позволяют нам заглянуть внутрь моделей и сказать: «О, смотрите: когда появляется вот этот вектор, модель отказывается отвечать на запрос. А если его убрать, то соглашается». Но они не могут дать нам ответ на вопрос: «Почему так?»
Покопавшись дальше, мы выясняем, что там не вектор, а некая другая фигура. И что с ней имеет смысл работать только в определённых слоях. И ещё что эксперимент с одними моделями воспроизводится, а с другими – нет. Это, в общем, не плохо само по себе, но хотелось бы лучше. Вот если взять графы причинно-следственных связей, можно попробовать сделать лучше: можно увидеть, например, что сначала появился один вектор, а потом другой вектор, и они как-то взаимодействуют, и вот результат.
Как и в других похожих работах, авторы используют в качестве единицы анализа один контур (circuit). Контур – это понятный человеку блок операций, который решает конкретную задачу. Для примера возьмём такой контур из статьи «On the Biology of a Large Language Model» («О биологии большой языковой модели»). Я взяла его из раздела 3 (рисунок 6), немного упростила и перевела на русский язык.
То есть, происходит примерно вот что:
- Пользователь пишет запрос.
- Запрос трансформируется в матрицу из чисел.
- Эта матрица умножается на матрицы внимания – компоненты архитектуры модели, – и слова «столица», «штат» и «Даллас» получают больший вес, поскольку содержат суть запроса.
- Каждое слово представлено своей матрицей, и с ними связан набор близких по смыслу представлений. То есть, мы рассматриваем не слово «столица», а большое облако связанных с ним слов, например, «город», «Москва», «большой» и так далее.
- Каждая матрица по отдельности и в совокупности с другими, проходя через математические преобразования, формирует дополнительные концепты: «назвать столицу» и «Техас».
- В конце формируется матрица, которая указывает на ответ «Остин» – и этот ответ выводится пользователю.
Изложение очень упрощённое, но нам так и нужно. Сильная сторона графов причинно-следственных связей как раз в том, что их можно представить проще, сделав процесс более прозрачным для человека.
Авторы адаптировали концепцию так, чтобы узлами графа были конкретные мыслительные операции. Я взяла один из их примеров и попыталась изобразить общую суть.
Представив таким образом цепочки рассуждений модели, в них можно вмешаться и исправить ошибки. Например, в приведённом мной примере можно было бы легко увидеть, если бы был нарушен порядок действий или допущена арифметическая ошибка на каком-то этапе вычислений. И авторы успешно проделали это в своих экспериментах.
Результаты
Во-первых, у авторов получилось приложить существующие технологии к разного рода задачам и получить убедительные графы причинно-следственных связей.
Во-вторых, у них получилось вмешиваться с помощью этих графов в цепочки рассуждений и точечно исправлять ошибки.
У исследования, впрочем, есть ряд ограничений:
Во-первых, его сложно воспроизвести, потому что нужны серьёзные вычислительные мощности. Это и затрудняет процесс независимой проверки другими людьми, и ограничивает применение подхода «в поле» компаниями, которые делают свои модели или продукты на базе чужих моделей и хотят их протестировать как следует перед выпуском.
Во-вторых, оно не даёт очень глубокого погружения в детали и рассматривает этапы рассуждений на достаточно высоком уровне обобщения. Здесь есть поле для дальнейших исследований.
В-третьих, экспериментировали только с моделями семейства Llama. Нужно больше моделей и больше экспериментов, потому что их тренируют на разных данных. И у всех есть свои особенности архитектуры.
Наконец, существует критика графов причинно-следственных связей и их надёжности как метода анализа. Такая критика есть плюс-минус для всех инструментов, но учитывать её всё равно важно.
Если коротко, эта работа ждёт тщательной проверки и воспроизведения, но само направление мысли очень интересное и потенциально продуктивное.
Заключение
Если хотите больше анализа разных статей, заходите ко мне в телеграм. Там понемногу становится побольше людей, и в комментариях уже разворачиваются очень интересные беседы.
Не хватает только вас, как говорится