Можем ли мы понять, что происходит в больших языковых моделях, анализируя маленькие?

Это первая из серии публикаций, в которых я попытаюсь обобщить некоторые из моих прочтений по контекстному обучению в больших языковых моделях — в основном с точки зрения механистической интерпретируемости. Подавляющая часть этого поста будет прямой адаптацией фантастической работы, проделанной в Anthropic, в частности, их статьи Математическая основа для схем трансформаторов. Я внес некоторые изменения, чтобы сделать тему более доступной — например, заменил тензорную нотацию, которую они используют, на более традиционную матрично-векторную нотацию. Если вас интересует содержание здесь, я настоятельно рекомендую прочитать статью полностью. В общем, все хорошее в этом посте — заслуга кого-то другого, все плохое — моя вина и только моя вина. Надеюсь, вам понравится!

Кроме того, в этом посте предполагается некоторое базовое знакомство с глубоким обучением и обработкой естественного языка, а также с линейной алгеброй.

Введение

С недавним выпуском ChatGPT произошел всплеск общественного интереса к моделям больших языков — нейронным сетям-трансформерам, обученным на массивных репозиториях текстовых данных Интернета для предсказания следующего слова в заданной последовательности (обычно контекст или 'быстрый'). Известно, что нейронные сети трудно интерпретировать, и у нас до сих пор нет четкого представления о том, что на самом деле делают эти модели, когда вы задаете им вопрос. В зависимости от того, кого вы спросите, наше плохое понимание того, как работают эти модели, может привести к чему угодно: от неудачного запуска продукта до конца человеческой цивилизации.

Механистические методы интерпретации являются одним из решений этой проблемы. Они стремятся преобразовать небольшие компоненты нейронной сети в хорошо понятные операции, а затем использовать эти операции, чтобы сделать вывод о том, что делает модель в целом. Огромный размер и сложность этих более крупных сетей делают эту перспективу пугающей. Но если мы начнем с изучения меньших моделей, то, возможно, сможем построить некоторые базовые интуитивные представления о том, как работают более крупные модели. На протяжении этого поста мы будем:

  1. Посмотрите, как обычно представлено многоголовое внимание к себе — фундаментальный строительный блок архитектуры преобразователя.
  2. Сравните это с новой формулировкой, которая помогает нам понять, как механизм само-внимания ведет себя в языковых моделях.
  3. Разложите однослойный преобразователь только внимания.
  4. Попытка декомпозировать двухслойный преобразователь только внимания, и анализ явлений «индукционных головок» мы находим в нем.
  5. В заключение несколько общих выводов.

Самовнимание: обзор

(отличная запись в блоге Джея Аламмара The Illustrated Transformer — отличный способ интуитивно понять эту формулировку внимания к незнакомому)

Давайте быстро пройдемся по тому, как обычно представляют вычисление многоголового само-внимания. Мы начинаем с нескольких внедрений входных токенов, представляющих наш контекст, и складываем их в единую входную матрицу для упрощения обработки. Слой многоголового внутреннего внимания состоит из нескольких «головок внимания», работающих параллельно, и мы передаем нашу входную матрицу каждой из них независимо.

Каждая из головок внимания имеет три связанных обучаемых весовых матрицы — одну для вычисления «ключей», одну для вычисления «запросов» и одну для вычисления «значений». Мы умножаем входную матрицу на каждую матрицу весов, чтобы получить ключевую матрицу, матрицу запроса и матрицу значений. Мы комбинируем матрицы следующим образом, чтобы получить результат отдельной головы внимания:

Интуитивно мы можем рассматривать каждую головку внимания как обучение сосредотачиваться или «уделять внимание» различным векторам в матрице ценности на основе матрицы запроса и ключа. Отсюда внимание. Ух ты!

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

Теперь мы добавляем исходную входную матрицу к этому выходу (остаточное соединение) и переходим к остальной части сети.

Здесь мы упускаем из виду некоторые детали (например, позиционные вложения), но эта формулировка обычно представляет собой то, как представлен механизм внимания. Способность каждого руководителя «уделять внимание» соответствующей информации — это обычная интуиция, объясняющая, почему этот механизм так эффективен на практике. Это совершенно прекрасный способ подачи темы, а вовсе не неверная интуиция. Но, как мы увидим, есть и другие способы интерпретации многоголового самовнимания, которые дают нам новое понимание того, что делают эти операции.

Внимание по-другому

Мы начнем с наблюдения за последним шагом, на котором мы объединяем, а затем умножаем на матрицу выходных весов, что является полностью линейной операцией. Если мы разложим матрицу выходных весов на блоки одинакового размера для каждой головы, мы можем переписать этот шаг как:

Это показывает, что каждая голова внимания выполняет полностью независимую аддитивную операцию — с четырьмя обучаемыми матрицами параметров вместо трех. Каждая головка получает ввод из одного и того же потока данных для каждого токена, независимо вычисляет его вывод, а затем объединяет их, суммируя их все с исходным в один поток данных — «остаточный поток».

Это изменяет роль головы внимания как передачи информации. Каждая головка внимания независимо (и линейно) «считывает» остаточный поток каждого входного токена посредством вычисления вектора значений. Затем он вычисляет нелинейный паттерн внимания как функцию каждого токена, смешивая информацию от всех них. Затем, наконец, «записывает» выходные данные обратно в остаточный поток каждого токена путем умножения на матрицу выходных весов и суммирования обратно во входные данные.

Размерность векторов ключа, запроса и значения обычно немного меньше остаточного потока. Таким образом, головы внимания могут избегать взаимодействия, просто «читая» и «записывая» в разные подпространства внутри остаточного пара. Остаточный поток токена в сети часто будет иметь линейные подпространства, соответствующие информации, скопированной с совершенно других токенов.

Если мы внимательно изучим формулу, то обнаружим еще одно интересное свойство многоголового внутреннего внимания — матрицы веса ключа и запроса, а также матрицы значений и выходных весов всегда работают вместе как единая схема:

В некотором смысле каждая голова внимания изучает только две чрезвычайно большие, но низкоранговые матрицы — матрицы «QK» и «OV», — которые включают в себя две разные операции или цепи внутри головы. Схема OV управляет линейными операциями чтения и записи, которые полностью независимы для каждого токена. В то время как схема QK управляет нелинейным смешиванием информации между остаточным потоком каждого токена. Таким образом, головы внимания можно считать «полулинейными» в том смысле, что если вы зафиксируете шаблон внимания, схема OV для каждого токена будет полностью линейной. Обратите внимание, что вычисление векторов ключей, запросов и значений здесь являются просто промежуточными продуктами.

Хотя мы найдем эту формулировку полезной, стоит отметить, что фактическая реализация внимания посредством явного построения матриц QK и OV была бы ужасно неэффективной! Возможно, то, как обычно описывается внимание, имеет смысл, поскольку это имеет гораздо больший смысл с вычислительной точки зрения.

Наконец, это наблюдение сделано не компанией Anthropic, но я чувствую, что эта формулировка делает связь между самостоятельным вниманием и методами обучения ядра более явной. Схема QK, по сути, изучает функцию ядра для применения к встраиваниям токенов.

Пример: одноуровневое внимание

Действительно ли эта формулировка помогает нам понять трансформаторы на практике? Давайте рассмотрим простой пример одноуровневого преобразователя только внимания, состоящего из встраивания токена, одного многоголового слоя самовнимания и, наконец, извлечения из логитов предсказания:

Мы можем явно записать вычисление логитов как:

Остаточный поток последнего маркера в последовательности используется для вычисления логитов предсказания следующего маркера. Поскольку первый член этой формулы не смешивает информацию между токенами, она может всегда добавлять информацию только из последнего токена в логиты. Другими словами, она может собирать только статистику Biggram. Головки внимания, наоборот, могут брать информацию из предыдущих токенов и перемещать ее в остаточный поток последнего токена, дополнительно корректируя статистику биграмм на основе предыдущих токенов. Таким образом, мы можем рассматривать однослойный преобразователь как ансамбль модели Биграммы и нескольких моделей «скип-триграммы». Поскольку взаимодействие может происходить не более чем между тремя токенами, мы можем расширить матрицы QK/OV, чтобы непосредственно наблюдать, как модели skip-Trigram увеличивают логиты определенных прогнозов на основе токенов источника и назначения:

Модели Skip-Trigram существенно изменяют логиты прогнозирования на основе определенных токенов в прошлом контексте. Эти модели skip-Trigram могут демонстрировать удивительно сложное поведение — например, четвертый пример — это модель, изучающая LaTeX, а пятый пример — это модель, изучающая escape-последовательности HTML. Однако наиболее распространенным поведением является простое копирование предыдущих токенов в выходные данные.

Анализируя каждую схему либо как модель биграммы, либо как модель скип-триграммы, мы можем контекстуализировать каждый отдельный параметр и его роль в модели, что представляет собой гораздо более высокий уровень интерпретируемости, чем мы можем сказать для большинства нейронных сетей. Однако сам размер данных матриц затрудняет описание тенденций более высокого уровня в цепях. Необходима дальнейшая работа, чтобы эффективно обобщить эти модели.

Несколько слоев: композиции и индукционные головки

Что произойдет, если мы расширим наш случай до двухслойных преобразователей только для внимания и выше? Теперь у нас есть головы внимания в более поздних слоях, реагирующие на головы внимания в более ранних слоях. Это стоит ценить. Если бы мы заставили все головки внимания быть независимыми друг от друга, двухслойный случай был бы эквивалентен однослойному случаю с большим количеством головок внимания. Эта «композиция» головок внимания резко увеличивает выразительную силу и не позволяет нам использовать тот же анализ, что и раньше.

Существует три типа композиции головы внимания:

  • Q Композиция, в которой матрица весов ключей читается в подпространстве, затронутом предыдущим заголовком.
  • K Композиция, где матрица весов запроса читается в подпространстве, затронутом предыдущим заголовком.
  • V Композиция, в которой матрица весов значений читается в подпространстве, затронутом предыдущим заголовком.

Состав V сильно отличается от состава Q и K. Состав Q и K влияет на схему QK и, таким образом, увеличивает сложность смешивания информации между токенами. С другой стороны, композиция V изменяет подпространство, из которого считывается голова, и может рассматриваться как еще один механизм перемещения информации между подпространствами.

Полная декомпозиция логит-вычисления для небольшого двухслойного преобразователя, привлекающего внимание, слишком сложна, чтобы ее здесь подробно описывать, но она доступна в полной статье. Что важно, так это случаи состава Q, K и V, которые мы наблюдаем эмпирически в такой модели.

В то время как состав Q и V кажется незначительным в этом небольшом примере, есть примечательный случай поведения состава K в виде «индукционных головок». Как говорит Антропик:

Индукционные головки ищут в контексте предыдущие примеры настоящего токена. Если не находят, обращаются к первому жетону (в нашем случае это специальный жетон, помещенный в начале) и ничего не делают. Но если они его находят, то смотрят на следующий токен и копируют его. Это позволяет им точно и приблизительно повторять предыдущие последовательности жетонов.

Другими словами, индукционные головы научились идентифицировать часто используемые последовательности токенов в контексте и повторять их дословно. Важно отметить, что это отличается от поведения копирования моделей skip-Trigram, идентифицированных в однослойном преобразователе. Это поведение было связано с определенными выученными шаблонами токенов — индукционные головки изучают правило копирования, которое может обобщать даже шаблоны токенов, которые он никогда раньше не видел.

Мы можем продемонстрировать это выше, используя полностью случайные последовательности токенов. С последним токеном, отмеченным желтым цветом, заголовок 0:7 (красный) на первом уровне копирует информацию из непосредственно предшествующих токенов в остаточный поток текущего токена. Затем индукционные головки 1:3 и 1:8 (синие) на втором уровне используют эту информацию для идентификации прошлых вхождений последовательности и копируют информацию в остаточный поток текущего токена, увеличивая логиты предсказания следующего элемента в последовательности. .

Эта способность головок внимания формировать обобщаемые правила для обработки информации с помощью композиций Q и K является захватывающим открытием и может рассматриваться как примитивная форма феномена обучения в контексте, обнаруживаемого в больших языковых моделях. С учетом того, что обобщение и предсказание вне распределения являются такой серьезной проблемой в глубоком обучении, удивительно идентифицировать структуру, которая, кажется, имеет индуктивный уклон в сторону решения этой проблемы даже в игрушечной среде.

Заключение

Вот некоторые из моих основных выводов из этой статьи:

  • Многоголовое самовнимание можно рассматривать как группу независимых компонентов, которые аддитивно считывают и записывают информацию в остаточные потоки различных токенов. Просмотр его роли в контексте передачи информации может очень помочь нам понять, что они делают при обработке данных.
  • Разделение головок внимания на схемы QK и OV может помочь нам понять различные операции непрозрачного механизма. Мы можем использовать эту технику для декомпозиции однослойного преобразователя только внимания. Непосредственный анализ каждой схемы позволяет нам полностью охарактеризовать предсказания такой сети как ансамбля модели Биграммы и нескольких моделей «скип-триграммы», которые изменяют статистику Биграммы на основе токенов контекста.
  • Применение этого анализа к двухуровневым преобразователям внимания позволяет нам увидеть, как головки внимания в разных слоях могут «компоновать» друг друга, формируя более сложные паттерны внимания. Эти шаблоны могут формировать очень обобщаемые правила, которые могут работать даже в средах вне распространения — например, пример «индукционных головок», которые могут дословно предсказывать совершенно случайные последовательности токенов из контекстных примеров. Кажется правдоподобным, что это связано с более широким явлением «контекстного» обучения, которое, как известно, присутствует в более крупных моделях трансформеров.

Я упустил некоторые детали, такие как виртуальные головы внимания, математический анализ схем QK и OV, а также некоторые дополнительные примеры, которые я рекомендую вам проверить, если вы заинтересованы в дополнительной информации по этой теме. Кроме того, есть последующая статья от Anthropic с более глубоким погружением в индукционные заголовки ‘Контекстное обучение и вводные заголовки’. Я надеюсь когда-нибудь сделать еще один пост в блоге, резюмирующий эту статью, но обязательно проверьте и его.

Контекстное обучение — увлекательная тема, и чтение о ней изменило мое мнение о том, как принципиально работают большие языковые модели. Я рад видеть дальнейшие исследования по этой теме и их влияние на то, как мы понимаем глубокие нейронные сети.

Спасибо за прочтение! Больше моих работ вы можете найти на:

Библиография

  1. https://transformer-circuits.pub/2021/framework/index.html
  2. https://transformer-circuits.pub/2022/in-context-learning-and-induction-heads/index.html
  3. https://jalammar.github.io/illustrated-transformer/
  4. https://arxiv.org/abs/1706.03762
  5. https://arxiv.org/abs/2005.14165