alterna ai
ALTERNA AI / ГЛАВА 15 · 03

15.3 Позиция через поворот координат

На предыдущей странице: почему порядок слов имеет значение.

Можно вводить порядок, вращая пары координат запроса и ключа. Длина сохраняется, а их сравнение зависит от относительного положения.

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

От абсолютных углов к относительной разности

RoPE применяет вращения к парам координат Q и K. Для пары[a,b] в позицииp и частотеω:

R(pω)(ab)=(acos⁡(pω)−bsin⁡(pω)asin⁡(pω)+bcos⁡(pω)).R(p\omega)\begin{pmatrix}a\\b\end{pmatrix}= \begin{pmatrix}a\cos(p\omega)-b\sin(p\omega)\\a\sin(p\omega)+b\cos(p\omega)\end{pmatrix}.

Вращение сохраняет L2-норму. Поскольку R(m)ᵀR(n)=R(n−m), dot вращённых query/key зависит от разности позиций при фиксированных исходных векторах. L07 §§3.2–3.4.

Для q=k=[1,0], ω=1, позиции0иπ/2 как математические углы дают ортогональные направления и dot0. В реальном позиционном коде p целое, а уголpω; это не указание использовать дробный token index.

Для каждой head width d_h пары получают частоты10000^(−2j/d_h). В этой реализации d_h должна быть чётной. V не вращается; RoPE не прибавляет position-вектор к embedding. Переключение между sinusoidal и RoPE меняет способ введения положения, а не включает оба одновременно.

Эксперимент. Сдвиньте позиции query/key на одинаковое число и сравните dot при неизменных исходных векторах. Не делайте вывод о монотонном уменьшении score с расстоянием: вращения дают колебательные компоненты. Поддержка больших position indices не доказывает качество длинного контекста.

from math import sin,cos,pi
a,b=3,4; angle=pi/2
rot=[a*cos(angle)-b*sin(angle),a*sin(angle)+b*cos(angle)]
assert abs(rot[0]+4)<1e-12 and abs(rot[1]-3)<1e-12
assert abs(sum(v*v for v in rot)-25)<1e-12

Код повторяет только что разобранные операции. Полный проверяемыйPython-пример главы доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.

Относительный dot выводится из R_mᵀR_n=R_(n−m).

Переработка каждого токена отдельно. Как этот вопрос продолжает полученный результат?

Python-примеры главы 15 Академическая база →