Объяснение позиционного кодирования в трансформере

Исчерпывающее объяснение позиционного кодирования в трансформере

В исходной архитектуре трансформера позиционные кодировки были добавлены к входным и выходным эмбеддингам.

Encoder-Decoder архитектура трансформера.

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

Стойкость, без позиционной информации, выход трансформера не изменится, если мы поменяем порядок слов во вводе.

Однако, они также накладывают ограничения на максимальную длину текста, которую можно обработать.

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

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

Простой пример того, как конечные входные эмбеддинги строятся из токенов и позиционных эмбеддингов.

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

Абсолютные позиционные эмбеддинги

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

Как BERT и GPT-2 (предок ChatGPT) использовали этот тип изученных позиционных эмбеддингов.

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

Пример таблицы токенов и позиционных эмбеддингов.

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

Синусоидальные позиционные эмбеддинги

Первоначальный трансформер, предложенный в Attention Is All You Need, использует синусоидальные и косинусные позиционные эмбеддинги.

Уравнения в Attention Is All You Need, которые использовались для расчета позиционных эмбеддингов.

Для прекрасного объяснения, как строятся синусоидальные позиционные эмбеддинги, я определенно рекомендую это потрясающее видео от Batool Arhamna Haider.

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

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

Относительные позиционные энкодинги

Относительные позиционные энкодинги были впервые предложены в статье “Self-Attention с относительными представлениями позиций“.

В этой статье авторы представили способ использования попарных расстояний в качестве способа создания позиционных энкодингов.

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

Этот тип позиционного кодирования также использовался в T5, где авторы представили новый упрощенный способ вычисления этих попарных расстояний.

На момент написания статьи существует два наиболее широко используемых типа относительных позиционных энкодингов: RoPE и ALiBi.

В этих новых подходах есть основная тенденция: информация о позиции встраивается непосредственно в вектора запроса (Q) и ключевого (K), которые используются для масштабированного скалярного произведения внимания. Это означает, что нет позиционных эмбеддингов, добавленных к эмбеддингам токенов!

Скалированное скалярное произведение внимания и места его применения в исходной архитектуре трансформера

Вращательные позиционные эмбеддинги (RoPE)

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

Использование этого типа позиционного кодирования представляют собой как Llama, Llama 2, так и Falcon!

При использовании RoPE векторы Q и K отдельно изменяются для кодирования информации о позиции. Это изменение происходит с помощью предварительно вычисленных и фиксированных матриц поворота, как показано на следующем gif.

Визуальное объяснение RoPE

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

Идея состоит в том, что для вывода вместо поворота mθ вы можете уменьшить этот поворот и, таким образом, он будет работать с более длинными последовательностями.

Существует много способов масштабирования поворота, самым распространенным из которых является линейное масштабирование mθ/N.

Чтобы погрузиться в подробности работы RoPE-скалирования, рекомендую прочитать статью “Расширение окна контекста больших языковых моделей через позиционную интерполяцию” и оригинальную тему на Reddit.

Внимание с линейными смещениями (ALiBi)

Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation” представил этот метод позиционного кодирования, который смещает оценки внимания запроса-ключа с штрафом, пропорциональным расстоянию между ними.

На практике это просто незначительное изменение внимания с масштабированием с помощью добавления константного позиционного смещения. Эта константа не обучается сетью!

Масштабирование скалярного произведения в ALiBi.

Позиционное смещение просто рассчитывается следующим образом:

Линейное смещение внимания в ALiBi.

где m является специфическим скаляром, задаваемым независимо для каждой головы внимания.

BLOOM, BloombergGPT и MPT используют такой тип позиционного кодирования, и больше языковых моделей должны использовать его, так как результаты действительно впечатляющие!

Сравнение разных позиционных кодировок на наборе данных WikiText-103.
Сравнение синусоидных и позиционных кодировок ALiBi на корпусе CC100+RoBERTa.

Заключение – Какая позиционная кодировка лучше?

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

Недавно появилось много методов масштабирования RoPE для преодоления ограничений экстраполяции RoPE и получения возможности масштабирования на8 раз больших последовательностей:

Тем не менее, ни ALiBi, ни RoPE не достаточно для решения текущих ограничений размера входных данных языковых моделей.

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