Глава 2.2 — Позиционная информация
Содержание
- Проблема, оставленная открытой в главе 2.1
- Синусоидальное абсолютное позиционное кодирование: исходное решение
- Обучаемые абсолютные позиционные эмбеддинги
- Относительные представления позиции
- Ротационные позиционные эмбеддинги (RoPE)
- ALiBi: смещение оценок внимания вместо эмбеддингов
- Сравнение четырёх подходов
- Взгляд с точки зрения собеседования
- Вопросы для самопроверки
- Источники
1. Проблема, оставленная открытой в главе 2.1
Глава 2.1 завершилась неудобным фактом, лежащим в основе всего, что делает Transformer: self-attention, в том виде, в каком оно определено, инвариантно к перестановкам. Веса внимания между любыми двумя позициями являются функцией только их векторов запроса и ключа, а выход в позиции — это взвешенная сумма векторов значений, поэтому если бы вы перемешали порядок входных токенов перед подачей их в слой self-attention, а затем перемешали соответствующие выходы обратно, вы получили бы в точности тот же результат. Transformer, построенный исключительно из механизма главы 2.1, никак не может узнать, что "собака укусила человека" и "человек укусил собаку" — разные предложения, потому что как множества представлений токенов без позиционной метки они являются буквально идентичными входами для self-attention.
Это не мелкий пробел, который нужно залатать; это прямое структурное следствие отказа от рекуррентности. RNN получает порядок последовательности бесплатно, потому что обрабатывает токены по одному в порядке их следования, и её скрытое состояние по построению является функцией позиции. Transformer обменял эту автоматическую упорядоченность на параллелизм, и теперь ему нужно выкупить позиционную информацию обратно каким-то иным способом — намеренно и явно. Всё содержание этой главы — это разные ответы на один и тот же вопрос: как сообщить принципиально нечувствительному к порядку, полностью параллельному механизму, где именно в последовательности находится каждый токен, и как сделать это так, чтобы решение хорошо обобщалось — в том числе на последовательности длиннее всего, что встречалось при обучении?
2. Синусоидальное абсолютное позиционное кодирование: исходное решение
Собственное решение исходной статьи о Transformer, описанное непосредственно в разделе 3.5 у Vaswani et al., состоит в построении фиксированного, необучаемого вектора для каждой позиции и добавлении его напрямую к эмбеддингу токена перед первым слоем. Для позиции $pos$ и индекса измерения эмбеддинга $i$ кодирование определяется как $$PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right), \quad PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)$$ так что каждое измерение позиционного кодирования — это синусоида, а длина волны этой синусоиды меняется геометрически по измерениям, от $2\pi$ до примерно $10000 \cdot 2\pi$. Добавление этого вектора к эмбеддингу токена придаёт каждой позиции уникальную детерминированную "подпись", и, поскольку синус и косинус используются парами, эта подпись обладает удобным алгебраическим свойством: для любого фиксированного смещения $k$ вектор $PE_{pos+k}$ можно записать как линейную функцию от $PE_{pos}$, воспользовавшись стандартными формулами суммы углов для синуса и косинуса. Конкретно, для двумерного среза с индексами $2i, 2i+1$ эта линейная зависимость представляет собой поворот: $$\begin{pmatrix}PE_{pos+k,\,2i}\PE_{pos+k,\,2i+1}\end{pmatrix} = \begin{pmatrix}\cos(k\omega_i) & \sin(k\omega_i)\ -\sin(k\omega_i) & \cos(k\omega_i)\end{pmatrix}\begin{pmatrix}PE_{pos,\,2i}\PE_{pos,\,2i+1}\end{pmatrix}, \quad \omega_i = \frac{1}{10000^{2i/d_{\text{model}}}}$$ Это означает, что, по крайней мере в принципе, модель могла бы научиться восстанавливать относительную позиционную информацию (насколько далеко друг от друга находятся два токена) с помощью линейного преобразования, применённого к абсолютным кодировкам, даже несмотря на то, что само кодирование напрямую представляет только абсолютную позицию.
Выбор синусоид, а не, скажем, простого целочисленного счётчика для каждой позиции, обусловлен двумя соображениями. Во-первых, добавление сырого целочисленного значения позиции напрямую к эмбеддингу давало бы значения совершенно разного масштаба в зависимости от длины последовательности, что плохо сочетается с остальными активациями сети; ограниченный, гладкий сигнал вроде синусоиды сохраняет хорошее числовое поведение независимо от того, насколько длинной становится последовательность. Во-вторых, авторы специально хотели, чтобы схема кодирования была способна хотя бы отчасти экстраполироваться на длины последовательностей, не встречавшиеся при обучении, поскольку она определяется замкнутой функцией от позиции, а не таблицей поиска с фиксированным числом обученных записей — синус и косинус всегда можно вычислить в позиции за пределами диапазона обучения, тогда как в таблице с фиксированным числом строк попросту нет записи для поиска. На практике эта экстраполяция оказалась довольно слабой, что послужило одним из мотивов для более поздних подходов, рассматриваемых далее в этой главе, но рассуждение, стоящее за этим замыслом, само по себе стоит понимать.
3. Обучаемые абсолютные позиционные эмбеддинги
Альтернатива, появившаяся вскоре после этого и принятая такими моделями, как BERT и GPT-2, формулируется проще: вместо того чтобы определять фиксированную синусоидальную функцию от позиции, выучить отдельный вектор эмбеддинга для каждого индекса позиции напрямую — точно так же, как выучивается отдельный вектор эмбеддинга для каждого элемента словаря, — и добавить его к эмбеддингу токена. Это прямое применение идеи о том, что если вы не уверены в правильной функциональной форме для чего-либо и у вас достаточно данных, стоит позволить градиентному спуску найти её самому — модель вольна обнаружить любое позиционное представление, которое действительно полезно для её задачи, вместо того чтобы быть ограниченной конкретным синусоидальным семейством.
Компромисс здесь ровно тот, которого и следовало бы ожидать от замены фиксированной функции на таблицу поиска: обучаемые абсолютные позиционные эмбеддинги, как правило, работают по меньшей мере не хуже синусоидальных кодировок на последовательностях в пределах длины обучения, поскольку у них строго больше свободы подстроиться под любую позиционную структуру, которая оказывается полезной. Но они практически не способны обобщаться за пределы максимальной длины последовательности, встречавшейся при обучении, потому что для позиции 5000 просто не существует обученного эмбеддинга, если модель никогда не видела последовательностей длиннее 2048 — здесь нет функциональной формы для экстраполяции, есть только таблица с фиксированным числом строк. Именно это ограничение, в меньшей степени присущее и синусоидальному подходу, стало мотивом для сдвига к кодированию позиции относительно, а не абсолютно, — и именно туда движется остальная часть этой главы.
4. Относительные представления позиции
Оба предыдущих подхода кодируют, где находится токен; относительные представления позиции, предложенные Shaw, Uszkoreit и Vaswani в 2018 году, вместо этого кодируют, насколько далеко друг от друга находятся два токена, и вносят эту информацию непосредственно в вычисление внимания, а не заранее в эмбеддинги токенов. Мотивация здесь достаточно интуитивна с лингвистической точки зрения: для понимания предложения обычно важно не то, что слово стоит на абсолютной позиции 47, а то, что оно стоит на три слова после глагола, который оно модифицирует, или на два слова перед существительным, которое оно описывает. Относительные смещения — более естественная единица позиционного смысла для языка, и архитектуре, которая кодирует смещения напрямую, должно требоваться меньше усилий, чтобы научиться их использовать, по сравнению с той, что вынуждена восстанавливать относительную информацию косвенно из двух абсолютных подписей.
Механически Shaw et al. модифицируют само вычисление внимания: для запроса в позиции $i$, обращающегося к ключу в позиции $j$, они вводят обучаемый вектор $a_{ij}$, зависящий только от усечённого относительного расстояния $j - i$ (усечённого до некоторого максимального диапазона, поскольку очень удалённые относительные смещения группируются вместе за определённым пределом), и этот вектор добавляется в вычисление ключа (и, опционально, значения), используемое в оценке внимания, а не во входные эмбеддинги. Это означает, что один и тот же вектор относительного смещения повторно используется для каждой пары позиций с этим смещением в любом месте последовательности — представление "на две позиции левее" одно и то же независимо от того, находитесь ли вы ближе к началу или к концу длинного документа, что является строго более параметрически эффективным и обобщаемым способом представления позиции, чем присвоение каждому абсолютному индексу собственного независимого вектора. Эта статья также является концептуальным предшественником обоих современных подходов, рассматриваемых далее: как только принимается идея о том, что позицию следует кодировать как функцию от относительного смещения, вносимую непосредственно во внимание, а не как абсолютный аддитивный сигнал к эмбеддингам, RoPE и ALiBi лучше всего понимать как два разных, более изящных и более эффективных способа реализации этой же идеи.
5. Ротационные позиционные эмбеддинги (RoPE)
RoPE, предложенный Su et al. в статье о RoFormer, — это подход, принятый большинством современных LLM с открытыми весами, и его центральный трюк по-настоящему изящен: вместо того чтобы добавлять позиционный сигнал куда бы то ни было, позиция кодируется как поворот, применяемый к векторам запроса и ключа, подобранный так, что скалярное произведение между повёрнутым запросом и повёрнутым ключом зависит только от их относительного смещения, а не от абсолютных позиций.
Вот интуиция вывода. Возьмите двумерный срез вектора запроса в позиции $m$, рассматривайте его как комплексное число (или, что эквивалентно, двумерный вектор), и поверните его на угол, пропорциональный $m$, умноженному на некоторую фиксированную частоту $\theta$: $q_m \to R(m\theta) \, q_m$, где $R(\cdot)$ — стандартная матрица двумерного поворота. Проделайте то же самое с вектором ключа в позиции $n$: $k_n \to R(n\theta) \, k_n$. Поскольку повороты складываются путём сложения углов, скалярное произведение повёрнутого запроса и повёрнутого ключа равно $$\big(R(m\theta) q_m\big) \cdot \big(R(n\theta) k_n\big) = q_m^\top R(m\theta)^\top R(n\theta) \, k_n = q_m^\top R\big((n-m)\theta\big) \, k_n$$ используя тот факт, что $R(m\theta)^\top R(n\theta) = R\big((n-m)\theta\big)$ для матриц поворота. Абсолютные позиции $m$ и $n$ исчезают из итогового выражения, кроме как через их разность $n - m$ — оценка внимания между двумя позициями зависит только от их относительного смещения, чисто как следствие геометрии поворота, без какого-либо аддитивного позиционного сигнала и без отдельной обучаемой таблицы эмбеддингов относительной позиции. На практике RoPE применяет этот поворот независимо ко многим двумерным подпространствам полных векторов запроса и ключа, каждое со своей частотой $\theta$ (следуя геометрической схеме, похожей по духу на длины волн синусоидального кодирования), так что разные подпространства улавливают позиционные отношения на разных масштабах — от очень локальных до очень дальних.
Привлекательность RoPE на практике объясняется сочетанием нескольких свойств, между которыми более ранним схемам приходилось выбирать: это фиксированная, детерминированная функция от позиции, а не обучаемая таблица, поэтому она не "заканчивается" на определённых позициях, как это происходит с обучаемыми абсолютными эмбеддингами; она порождает зависящие от относительной позиции оценки внимания естественным образом, без необходимости во вносимом в вычисление внимания дополнительном обучаемом слагаемом относительной позиции, как в схеме Shaw et al.; и она применяется непосредственно к запросам и ключам, а не добавляется к эмбеддингам, что чисто сочетается с остальной частью механизма внимания и практически не добавляет дополнительных параметров или вычислений. Именно это сочетание свойств во многом объясняет, почему RoPE стал выбором по умолчанию в таких моделях, как LLaMA и её многочисленных потомках.
6. ALiBi: смещение оценок внимания вместо эмбеддингов
ALiBi, предложенный Press, Smith и Lewis, идёт другим путём к той же цели — хорошему поведению на последовательностях длиннее тех, что встречались при обучении, — и делает это с помощью механизма, который, пожалуй, ещё проще поворотов RoPE. Вместо того чтобы вообще модифицировать векторы запроса и ключа, ALiBi оставляет их нетронутыми, а вместо этого добавляет статический, необучаемый штраф непосредственно к сырым оценкам внимания перед softmax, пропорциональный расстоянию между позициями запроса и ключа: для запроса в позиции $i$, обращающегося к ключу в позиции $j$, при $j \le i$, оценка внимания модифицируется как $$\text{score}(i, j) = q_i \cdot k_j - m \cdot (i - j)$$ где $m$ — фиксированный наклон, специфичный для головы (разные головы получают разные, геометрически распределённые наклоны, так что одни головы штрафуют дальность резко, а другие почти не штрафуют вовсе). Интуиция здесь прямо связана со смещением в сторону недавности: при прочих равных токен должен иметь некоторое базовое предпочтение обращать внимание на близкие токены сильнее, чем на далёкие, и это предпочтение должно быть встроено в архитектуру как явное индуктивное смещение, а не оставлено на усмотрение модели, которая должна обнаружить его самостоятельно с нуля через обучаемые эмбеддинги.
Стоит подробно объяснить, почему это даёт сильную экстраполяцию по длине. Поскольку штрафное слагаемое — это простая, неограниченная линейная функция от расстояния, оно ведёт себя согласованно независимо от того, насколько длинна последовательность: расстояние в 5000 токенов даёт один и тот же пропорционально большой штраф вне зависимости от того, обучалась ли модель на последовательностях длины 512 или 8192, тогда как и синусоидальная, и ротационная схемы построены из периодических функций, чьё поведение на очень больших позициях, не встречавшихся при обучении, не гарантированно напоминает то, что модель научилась корректно интерпретировать во время обучения. В экспериментах из оригинальной статьи модели, обученные с ALiBi на относительно коротких последовательностях, а затем оцененные на гораздо более длинных на этапе инференса, показали заметно лучшую перплексию по сравнению с моделями, использующими синусоидальные кодировки, оценёнными в том же режиме экстраполяции, — по существу потому, что функция штрафа монотонна и неограничена, а не периодична, поэтому ей не нужно "распознавать" значение расстояния, которое она никогда не видела при обучении: большие расстояния просто дают пропорционально большие штрафы, естественным образом продолжаясь за пределы диапазона обучения.
7. Сравнение четырёх подходов
Если отступить на шаг назад, все четыре схемы, рассмотренные в этой главе, представляют собой ответы на одну и ту же проблему, и стоит уметь расположить их вдоль общего набора осей, поскольку интервьюеры часто прощупывают именно это сравнение. Синусоидальные и обучаемые абсолютные кодировки обе вносят позиционную информацию один раз, аддитивно, в эмбеддинги перед первым слоем внимания, и отличаются лишь тем, является ли этот сигнал фиксированной функцией от позиции или обучаемой таблицей — фиксированная функция несколько лучше обобщается на невиданные длины, обучаемая таблица несколько лучше подстраивается под распределение обучения. Относительные представления позиции, RoPE и ALiBi, напротив, все вносят позиционную информацию непосредственно в само вычисление внимания, на каждом слое, и отличаются механизмом: Shaw et al. используют обучаемый эмбеддинг, индексированный усечённым относительным смещением, RoPE использует фиксированный геометрический поворот, чья композиция алгебраически порождает скалярные произведения, зависящие от относительного смещения, а ALiBi использует фиксированный линейный штраф, вычитаемый непосредственно из оценок внимания. Грубо говоря, траектория развития области среди этих четырёх идей была направлена к механизмам, которые (a) вычисляются на каждом слое внимания, а не добавляются один раз на входе, поскольку это даёт каждому слою прямой доступ к относительной позиции, вместо того чтобы полагаться на её сохранность через множество слоёв преобразований, и (b) определяются простыми, неограниченными или периодическими-но-композируемыми замкнутыми функциями, а не конечными обучаемыми таблицами, именно потому, что это единственное, что вообще делает экстраполяцию за пределы длины обучения возможной.
Современный штрих, который стоит добавить к этому сравнению, поскольку его легко упустить, если мыслить только в терминах «какая из четырёх»: некоторые decoder-only модели обучаются вообще без явного позиционного кодирования — подход, изученный напрямую Kazemnejad с соавторами под названием NoPE. Причина, по которой это вообще жизнеспособно, специфична именно для каузальной, decoder-only формы (глава 2.3): каузальная маска внимания уже сама по себе ломает симметрию перестановок, которая иначе делала бы позицию неразличимой, поскольку набор видимых предшественников токена меняется вместе с его позицией в последовательности, так что у модели есть неявный сигнал, который она в принципе может научиться использовать даже при нулевой явно внесённой позиционной информации. Kazemnejad с соавторами обнаружили, что модели NoPE не только не уступают моделям с явным позиционированием на длинах, виденных при обучении, но и обобщаются на более длинные последовательности как минимум не хуже RoPE или ALiBi, не нуждаясь ни в каких трюках с периодичностью или затуханием, на которые опираются эти схемы, — поразительный результат, учитывая, сколько инженерных усилий, задокументированных в остальной части этой главы, ушло на проектирование хороших позиционных сигналов. Честная оговорка в том, что неявный позиционный сигнал NoPE слабее и менее напрямую управляем, чем явный, поэтому он не вытеснил RoPE как выбор по умолчанию в передовых моделях, — но это полезное напоминание, что «отсутствие позиционного кодирования» само по себе является законной пятой точкой на этом сравнении, а не просто теоретическим курьёзом.
Это развитие — от внесения позиции один раз на входе к её непосредственному и многократному внесению во внимание, в форме, построенной так, чтобы хорошо переживать выход за пределы распределения обучения, — задаёт тему, которая будет повторяться на протяжении всей оставшейся части этой книги: многие из самых значимых архитектурных нововведений эпохи LLM — это не изменения того, что Transformer в принципе способен представить, а изменения того, насколько изящно он ведёт себя за пределами того самого режима, в котором он обучался, будь то более длинные последовательности, более крупные модели или иные распределения данных. Теперь, когда внимание и позиционная информация уже на месте, глава 2.3 переходит к другому роду архитектурного решения: не к тому, как Transformer представляет порядок, а к тому, какие из его половин — энкодер и декодер — он вообще сохраняет.
8. Взгляд с точки зрения собеседования
"Зачем Transformer вообще нужно позиционное кодирование — что именно ломается без него?" Сильный ответ точно формулирует аргумент об инвариантности к перестановкам: выход self-attention — это взвешенная сумма векторов значений, где веса берутся из softmax по скалярным произведениям запроса и ключа, и это вычисление не меняется при любой перестановке входных позиций, так что без явного позиционного сигнала "собака укусила человека" и "человек укусил собаку" дали бы идентичные представления на уровне токенов при использовании одного лишь self-attention. Самые сильные ответы напрямую связывают это с компромиссом, сделанным в главе 2.1: рекуррентность давала позиционную информацию бесплатно через последовательную обработку, а отказ от рекуррентности ради параллелизма означает, что эту информацию нужно выкупать обратно явно.
"Выведите, почему оценки внимания RoPE зависят только от относительной позиции." Ответ должен пройти через аргумент о композиции поворотов: поворачивая запрос в позиции $m$ на угол $m\theta$ и ключ в позиции $n$ на угол $n\theta$, скалярное произведение повёрнутых векторов сводится к $q_m^\top R((n-m)\theta) k_n$, поскольку $R(m\theta)^\top R(n\theta) = R((n-m)\theta)$ — базовое свойство матриц поворота. Абсолютные позиции алгебраически сокращаются, оставляя функцию только от $n - m$. Сильный ответ отмечает, что это точное и структурное свойство, а не приближение и не что-то выученное.
"Почему ALiBi экстраполируется на более длинные последовательности лучше, чем синусоидальные или обучаемые абсолютные кодировки?" Сильный ответ отмечает, что смещение ALiBi — это простая, монотонная, неограниченная линейная функция от расстояния, ведущая себя согласованно независимо от того, насколько далеко друг от друга находятся две позиции, поэтому расстояние, никогда не встречавшееся при обучении, всё равно даёт разумно масштабированный штраф. У обучаемых абсолютных эмбеддингов буквально нет представления для позиций за пределами диапазона обучения. Синусоидальные кодировки в принципе определены в любой позиции, но их периодичность означает, что очень большие, невиданные позиции могут численно выглядеть похожими на позиции из диапазона обучения так, как модель никогда не научилась корректно обрабатывать.
"Сравните относительные представления позиции, RoPE и ALiBi по оси того, где и как они вносят позиционную информацию." Сильный ответ помещает все три как механизмы уровня внимания (а не уровня эмбеддингов), а затем различает их по реализации: Shaw et al. добавляют обучаемый вектор усечённого относительного смещения в вычисление ключа/значения внутри внимания; RoPE поворачивает запросы и ключи на угол, зависящий от позиции, так что относительное смещение алгебраически возникает из скалярного произведения; ALiBi добавляет фиксированный линейный штраф непосредственно к оценкам внимания на основе расстояния, вообще не модифицируя запросы или ключи. Сильный ответ отмечает, что ALiBi — самый дешёвый и наиболее дружественный к экстраполяции из трёх именно потому, что он не привязан ни к какой периодической или обучаемой функциональной форме.
"Если бы вам нужно было спроектировать позиционную схему для модели, рассчитанной на работу как с очень короткими подсказками, так и с контекстами на 1 млн токенов, что бы вы рассмотрели и почему?" Сильный ответ рассуждает исходя из свойств экстраполяции, обсуждённых в этой главе: предпочтительнее схема, вносимая на каждом слое внимания, а не один раз на входе, и предпочтительнее схема, определяемая простой, монотонной или композируемо-периодической замкнутой функцией, а не конечной обучаемой таблицей, поскольку модель должна работать с длинами, далеко выходящими за пределы всего, что гарантировано при обучении. Уместно упомянуть, что RoPE и ALiBi — оба реальные, актуальные выборы в производственных системах с длинным контекстом, и что дальнейшие методы расширения эффективной длины контекста за пределы длины обучения — активная область исследований, рассматриваемая позже в книге.
9. Вопросы для самопроверки
- Почему именно self-attention инвариантно к перестановкам и какое конкретное свойство формулы внимания из главы 2.1 это вызывает?
- Объясните свойство сложения углов синусоидальных позиционных кодировок и что оно подразумевает (а что не гарантирует полностью) относительно восстановимости относительной позиции.
- Каково фундаментальное ограничение, общее для синусоидальных и обучаемых абсолютных позиционных кодировок в отношении последовательностей длиннее тех, что встречались при обучении, и почему каждая из них не справляется с этим по немного разным причинам?
- Какой концептуальный сдвиг делают относительные представления позиции Shaw et al. по отношению к двум абсолютным схемам кодирования, с точки зрения того, где вносится позиционная информация?
- Выведите своими словами, почему поворот запросов и ключей на углы, зависящие от позиции, приводит к тому, что их скалярное произведение зависит только от относительного смещения.
- Как ALiBi модифицирует вычисление внимания и почему именно его конкретная функциональная форма (линейная, неограниченная, монотонная) важна для экстраполяции?
- Проранжируйте четыре схемы этой главы по тому, насколько хорошо, по вашим ожиданиям, они экстраполируются на длины последовательностей, значительно превышающие длину обучения, и обоснуйте ранжирование, используя механизмы, описанные в этой главе.
10. Источники
- Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, Ł., & Polosukhin, I. (2017). Attention Is All You Need. NeurIPS 2017. arXiv:1706.03762. https://arxiv.org/abs/1706.03762 (синусоидальное позиционное кодирование, раздел 3.5; перекрёстная ссылка из главы 2.1)
- Shaw, P., Uszkoreit, J., & Vaswani, A. (2018). Self-Attention with Relative Position Representations. NAACL 2018. arXiv:1803.02155. https://arxiv.org/abs/1803.02155
- Su, J., Lu, Y., Pan, S., Murtadha, A., Wen, B., & Liu, Y. (2021). RoFormer: Enhanced Transformer with Rotary Position Embedding. Neurocomputing 2024. arXiv:2104.09864. https://arxiv.org/abs/2104.09864
- Press, O., Smith, N. A., & Lewis, M. (2021). Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation. ICLR 2022. arXiv:2108.12409. https://arxiv.org/abs/2108.12409
- Kazemnejad, A., Padhi, I., Natesan Ramamurthy, K., Das, P., & Reddy, S. (2023). The Impact of Positional Encoding on Length Generalization in Transformers (NoPE). NeurIPS 2023. arXiv:2305.19466. https://arxiv.org/abs/2305.19466