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

15.2 Почему порядок слов имеет значение

На предыдущей странице: один токен проходит один блок.

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

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

Где берётся порядок

Немаскированное self-attention без position signals перестановочно эквивариантно: перестановка входных строк переставляет выходные. Оно не «инвариантно» в смысле неизменности всей матрицы. При перестановочной матрице P выполняется Attn(PX)=P Attn(X), если Q/K/V переставлены согласованно.

Фиксированная causal mask сама задаёт ограничение порядка. Поэтому нельзя буквально переносить предыдущую симметрию на неё и объявлять, что masked decoder совсем ничего не знает о последовательности. Explicit position encoding всё равно даёт дополнительный механизм представления абсолютного или относительного положения.

Sinusoidal вариант из L06 добавляет к embedding:

PEp,2j=sin⁡(p/100002j/d),PEp,2j+1=cos⁡(p/100002j/d).PE_{p,2j}=\sin(p/10000^{2j/d}),\qquad PE_{p,2j+1}=\cos(p/10000^{2j/d}).

Для p=0,d=4 вектор[0,1,0,1]. Он совпадает по ширине с E[t], поэтому сложение допустимо. Это не learned position table; число обучаемых параметров при таком выборе не увеличивается.

Исследовать. Переключите sinusoidal/none при неизменных IDs, архитектуре и seed. Это абляция position signal, а не обучение. Сравните input embeddings с суммой E+PE. Не обещайте, что модель с синусоидами автоматически правильно работает на любой длине: качество экстраполяции зависит от обучения и архитектуры.

from math import sin,cos
p,d=0,4
pe=[f(p/10000**(2*j/d)) for j in range(d//2) for f in (sin,cos)]
assert pe==[0,1,0,1]

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

Перестановка входных строк переставляет выходные; фиксированная causal mask меняет условия.

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

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