Содержание курса 18 / 37

18 / 37 · Трансформеры

Позиционные представления

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

На этой странице 10

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

Обозначения. X∈Rn×dX \in \mathbb R^{n \times d} — последовательность после эмбеддинга; Π\Pi — матрица перестановки n×nn \times n; pos∈{0,…,n−1}\mathrm{pos} \in \{0, \dots, n - 1\} — позиция; P∈Rn×dP \in \mathbb R^{n \times d} — позиционная матрица со строками PposP_{\mathrm{pos}}.

Отправная точка: без позиций#

Применим self-attention к переставленному входу ΠX\Pi X. Проекции действуют построчно, поэтому Q,K,VQ, K, V становятся ΠQ,ΠK,ΠV\Pi Q, \Pi K, \Pi V. Тогда

softmax⁡((ΠQ)(ΠK)⊤/dk) ΠV=softmax⁡(Π QK⊤Π⊤/dk) ΠV=Π softmax⁡(QK⊤/dk) V,\operatorname{softmax}\big((\Pi Q)(\Pi K)^\top / \sqrt{d_k}\big)\,\Pi V = \operatorname{softmax}\big(\Pi\, Q K^\top \Pi^\top / \sqrt{d_k}\big)\,\Pi V = \Pi\,\operatorname{softmax}\big(QK^\top/\sqrt{d_k}\big)\,V ,

где использованы Π⊤Π=I\Pi^\top \Pi = I и то, что построчный softmax коммутирует с одновременной перестановкой строк и столбцов. Выход для переставленного входа — переставленный выход: self-attention эквивариантен относительно перестановок (permutation-equivariant). Полносвязный слой, LayerNorm и остаточные связи действуют по позициям и тоже эквивариантны. Рассуждение верно для внимания без маски или с маской, которая переставляется вместе с токенами, как маска паддинга. Каузальная маска привязана к позициям, а не к токенам, поэтому произвольные перестановки она нарушает: в декодере первый токен смотрит только на себя, какое бы слово это ни было. У энкодера каузальной маски нет, поэтому энкодер без позиционного входа вычисляет для «dog bites man» и «man bites dog» одни и те же три вектора в разном порядке, и классификатор, который их агрегирует, не различит эти предложения. У рекуррентной сети такой проблемы не было, потому что она читала токены по порядку; цена параллелизма в том, что порядок приходится возвращать вручную.

Синусоидальное кодирование#

Vaswani et al. (2017) задают для позиции pos\mathrm{pos} и индекса измерения ii

Ppos, 2i=sin⁡ ⁣(pos100002i/d),Ppos, 2i+1=cos⁡ ⁣(pos100002i/d),i=0,…,d/2−1.P_{\mathrm{pos},\,2i} = \sin\!\Big(\frac{\mathrm{pos}}{10000^{2i/d}}\Big), \qquad P_{\mathrm{pos},\,2i+1} = \cos\!\Big(\frac{\mathrm{pos}}{10000^{2i/d}}\Big), \qquad i = 0, \dots, d/2 - 1 .

Каждая пара измерений (2i,2i+1)(2i, 2i + 1) — синус и косинус одного и того же угла ωi⋅pos\omega_i \cdot \mathrm{pos} с ωi=10000−2i/d\omega_i = 10000^{-2i/d}. Частоты образуют геометрическую прогрессию: у пары измерений 0 длина волны 2π2\pi позиций, у последней пары, i=d/2−1i = d/2 - 1, — 2π⋅100001−2/d2\pi \cdot 10000^{1 - 2/d}, что при росте dd приближается к 10000⋅2π10000 \cdot 2\pi: около 19 869 позиций при d=16d = 16 и 60 611 при d=512d = 512. Младшие измерения быстро меняются с позицией и различают соседей; старшие меняются медленно и кодируют грубое положение.

Рисунок

Синусоидальное позиционное кодирование: четыре из шестнадцати измерений

Кривые синусоидального позиционного кодированияЧетыре синусоиды на позициях от 0 до 60. Синяя кривая измерения 0 колеблется быстро, красная для измерения 2 — медленнее, зелёная для измерения 6 проходит около половины периода, а янтарная для измерения 14 растёт почти линейно и остаётся около нуля.02040601−1позицияизм. 0, λ ≈ 6.3изм. 2, λ ≈ 19.9изм. 6, λ ≈ 199изм. 14, λ ≈ 19869Кривые синусоидального позиционного кодированияЧетыре синусоиды на позициях от 0 до 60. Синяя кривая измерения 0 колеблется быстро, красная для измерения 2 — медленнее, зелёная для измерения 6 проходит около половины периода, а янтарная для измерения 14 растёт почти линейно и остаётся около нуля.02040601−1позицияизм. 0, λ ≈ 6.3изм. 2, λ ≈ 19.9изм. 6, λ ≈ 199изм. 14, λ ≈ 19869
d = 16. Каждое чётное измерение 2i — это sin(pos / 10000^(2i/d)); соседнее нечётное измерение — косинус с той же частотой. У измерения 0 длина волны 2π ≈ 6.3 позиции, и оно повторяется каждые несколько токенов; у измерения 14 длина волны 19869 позиций, и на протяжении последовательности оно почти не меняется. Любое отдельное измерение повторяется, так что у двух позиций может совпасть его значение, но никакие две позиции в рабочем диапазоне не совпадают по всему вектору. Вертикальные пунктирные линии отмечают позиции 0, 20 и 40.

Разобранный пример#

d=4d = 4, то есть две пары частот: ω0=1\omega_0 = 1 и ω1=10000−1/2=0.01\omega_1 = 10000^{-1/2} = 0.01.

possin⁡(pos)\sin(\mathrm{pos})cos⁡(pos)\cos(\mathrm{pos})sin⁡(0.01 pos)\sin(0.01\,\mathrm{pos})cos⁡(0.01 pos)\cos(0.01\,\mathrm{pos})
00101
10.8410.5400.0101.000
20.909−0.4160.0201.000
30.141−0.9900.0301.000

Строки различны и ограничены отрезком [−1,1][-1, 1], а медленная пара меняется на 0.010.01 за шаг, так что позиции 1 и 2 в медленных измерениях ближе друг к другу, чем позиции 1 и 30. Вектор прибавляется к эмбеддингу токена (умноженному на d\sqrt d, чтобы их величины были сравнимы), и одна и та же таблица используется для каждой последовательности; прибавляется она один раз, перед первым блоком.

Свойства#

Относительный сдвиг — это поворот. Для фиксированного сдвига kk пара в позиции pos+k\mathrm{pos} + k — линейная функция пары в позиции pos\mathrm{pos}, не зависящая от pos\mathrm{pos}:

(sin⁡ω(pos+k)cos⁡ω(pos+k))=(cos⁡ωksin⁡ωk−sin⁡ωkcos⁡ωk)(sin⁡ω poscos⁡ω pos),\begin{pmatrix} \sin\omega(\mathrm{pos} + k) \\ \cos\omega(\mathrm{pos} + k) \end{pmatrix} = \begin{pmatrix} \cos\omega k & \sin\omega k \\ -\sin\omega k & \cos\omega k \end{pmatrix} \begin{pmatrix} \sin\omega\,\mathrm{pos} \\ \cos\omega\,\mathrm{pos} \end{pmatrix},

что есть формула синуса и косинуса суммы. Авторы предполагали, что это позволяет линейной проекции во внимании выделять относительные позиции; скалярное произведение Ppos⋅Ppos+kP_{\mathrm{pos}} \cdot P_{\mathrm{pos}+k} действительно зависит только от kk. Пользуется ли этим обученная модель — вопрос эмпирический.

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

Повтор внутри измерения — не коллизия. Любой отдельный синус повторяется, так что у позиций pos\mathrm{pos} и pos+2π/ωi\mathrm{pos} + 2\pi/\omega_i совпадает измерение 2i2i. У остальных измерений несоизмеримые периоды, поэтому две позиции в любом практическом диапазоне не совпадают по всему вектору.

Выученные абсолютные позиции#

Заменим формулу таблицей свободных параметров P∈Rnmax⁡×dP \in \mathbb R^{n_{\max} \times d}, nn.Embedding(max_len, d), обучаемой вместе со всем остальным. Так делают BERT с nmax⁡=512n_{\max} = 512, GPT-2 с 1024 и модель перевода из следующей заметки с 32. Это проще, работает примерно так же, как синусоиды, на задачах обучающей длины (Vaswani et al., 2017, таблица 3, строка E), и имеет жёсткий максимум: у позиции дальше nmax⁡n_{\max} нет строки. Таблица стоит nmax⁡×dn_{\max} \times d параметров, 0.4 млн у BERT-base.

Относительные и ротационные позиции#

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

Относительные позиционные смещения (relative position biases) прибавляют к оценке запроса ii и ключа jj выученный скаляр bj−ib_{j-i} (T5, где один скаляр общий для сдвигов, сгруппированных в корзины, расширяющиеся с расстоянием) или фиксированный штраф, пропорциональный ∣j−i∣|j - i| (ALiBi, Press, Smith and Lewis, 2022), без всякого позиционного вектора на входе.

Ротационные позиционные эмбеддинги (rotary, RoPE; Su et al., 2024) переносят синусоиды со входа в оценки внимания. Каждый запрос и ключ головы ширины dkd_k разбивается на dk/2d_k/2 двумерных пар, и пара ii в позиции pos\mathrm{pos} поворачивается на угол ωi pos\omega_i\,\mathrm{pos}, где ωi=10000−2i/dk\omega_i = 10000^{-2i/d_k}. Поскольку скалярное произведение двух повёрнутых векторов зависит только от разности углов поворота, оценка qm⋅knq_m \cdot k_n зависит от содержимого двух токенов и от m−nm - n, а не от mm и nn по отдельности. Свойство сдвига синусоидальной схемы становится точным и встроенным в каждый слой внимания. Llama 3.2 1B — модель из заметок о GPT и обучении на инструкциях — использует RoPE. У поворота нет параметров, а основание 1000010000 можно увеличить, чтобы растянуть обученную модель на более длинный контекст.

СхемаГде применяетсяПараметрыМаксимальная длинаЧто кодирует
СинусоидальнаяПрибавляется ко входу0В принципе нетАбсолютную позицию со структурой сдвига
Выученная таблицаПрибавляется ко входуnmax⁡dn_{\max} dnmax⁡n_{\max}Абсолютную позицию
Относительное смещение / ALiBiОценки вниманияO(nmax⁡)O(n_{\max}) или 0Немного экстраполируетОтносительный сдвиг
RoPEЗапросы и ключи0Обучающая длина, расширяемаяОтносительный сдвиг в скалярном произведении

Что изменилось#

Рекуррентная модельТрансформер + позиции
Источник порядкаПоследовательное чтениеЯвный позиционный сигнал
ЦенаНеявнаяОт 00 до nmax⁡dn_{\max} d параметров
Параллельно по позициямНетДа
Обобщение по длинеЛюбая длина, слабая памятьЗависит от схемы

Ограничения#

  • Абсолютные схемы не экстраполируют. У выученной таблицы жёсткий предел, у синусоид — мягкий.
  • Прибавленные сигналы конкурируют с содержимым. В схемах с прибавлением ко входу позиционный вектор делит dd измерений с вектором токена; модель должна научиться их разделять.
  • Длинные контексты нагружают любую схему. Какой позиционный метод лучше всего обобщается на длины за пределами обучения — открытый эмпирический вопрос, и ответ зависит от данных и реализации внимания.
  • Позиции — индексы, а не структура. Ни одна схема не знает о предложениях, абзацах или синтаксисе; это приходится выучивать по токенам.

Что нужно запомнить#

  • Self-attention без маски эквивариантен относительно перестановок: Attn⁡(ΠX)=Π Attn⁡(X)\operatorname{Attn}(\Pi X) = \Pi\,\operatorname{Attn}(X). Порядок нужно добавлять; каузальная маска нарушает эту симметрию, потому что привязана к позициям.
  • Синусоидальное кодирование: sin⁡\sin и cos⁡\cos от pos⋅10000−2i/d\mathrm{pos} \cdot 10000^{-2i/d}, длины волн в геометрической прогрессии от 2π2\pi до 2π⋅100001−2/d2\pi \cdot 10000^{1 - 2/d}, чуть меньше 10000⋅2π10000 \cdot 2\pi при большом dd; сдвиг на kk — фиксированный поворот каждой пары.
  • Выученные таблицы проще и ограничены nmax⁡n_{\max}.
  • RoPE поворачивает запросы и ключи так, что оценки зависят от относительного сдвига; параметров нет, используется в современных моделях из одного декодера.
  • Схема определяет, как модель справляется с длинами, на которых не обучалась.

Ноутбук#

week05_transformer.ipynb. Номера ячеек считают все ячейки, включая текстовые, начиная с 1. Приведённые числа взяты из прогона, сохранённого в курсе; у ячеек, изменённых с тех пор под текущие версии библиотек, сохранённого выхода нет.

  • Ячейка 34 приводит синусоидальные формулы, диапазон длин волн и дропаут, применяемый к сумме эмбеддингов и позиций.
  • Ячейка 35 реализует PositionalEncoder: частоты вычисляются как exp⁡(−2iln⁡10000/d)\exp(-2i \ln 10000 / d) для чётных 2i2i, таблица формы [1, max_length, d] заполняется синусами в чётных столбцах и косинусами в нечётных и хранится как необучаемый параметр, а forward прибавляет ко входу первые T строк и применяет дропаут. Ячейка 36 указывает на ротационные эмбеддинги как на современную альтернативу.

week04_lstm_attention_transformer.ipynb, ячейка 58, использует выученную таблицу nn.Embedding(max_len, hidden_size) с max_len = 32, индексируемую arange(T) % max_len, так что более длинные входы не падают, а идут по кругу.

week08_modern_LLM.ipynb, ячейки 18–19, печатает деревья модулей контрольных точек Llama 3.2 1B; RoPE в них — модуль rotary_emb.

Дальше#

С вниманием, блоком и позициями архитектура готова. Следующая заметка возвращается к немецко-английской задаче, на которой курс оставил LSTM с BLEU 0.152, обучает трансформер с тем же бюджетом параметров, измеряет вклад cross-attention, глубины и лучевого поиска и читает карты внимания.

Литература#