Alterna · учебный материал
15.2 Почему порядок слов имеет значение
Одинаковые строки представлений не сообщают порядок сами по себе. Сравним что меняется, когда сведения о позиции отсутствуют.
Что в этом материале
- Где берётся порядок
Содержание и основные понятия
На предыдущей странице: один токен проходит один блок.
Одинаковые строки представлений не сообщают порядок сами по себе. Сравним что меняется, когда сведения о позиции отсутствуют.
Вектор получает позиционную информацию, обменивается сведениями и отдельно перерабатывает своё состояние. Остаточные суммы сохраняют прежний путь. Последняя таблица выдаёт оценки словаря.
Для изменения рисунка включитеJavaScript; расчёт и теория доступны далее.
Где берётся порядок
Немаскированное self-attention без position signals перестановочно
эквивариантно
: перестановка входных строк переставляет выходные. Оно не «инвариантно» в смысле неизменности всей матрицы. При перестановочной матрице P выполняется Attn(PX)=P Attn(X), если Q/K/V переставлены согласованно.
Фиксированная causal mask сама задаёт ограничение порядка. Поэтому нельзя буквально переносить предыдущую симметрию на неё и объявлять, что masked decoder совсем ничего не знает о последовательности. Explicit position encoding всё равно даёт дополнительный механизм представления абсолютного или относительного положения.
Sinusoidal вариант из L06 добавляет к embedding:
P
E
p
,
2
j
=
sin
(
p
/
10000
2
j
/
d
)
,
P
E
p
,
2
j
+
1
=
cos
(
p
/
10000
2
j
/
d
)
.
PE_{p,2j}=\sin(p/10000^{2j/d}),\qquad
PE_{p,2j+1}=\cos(p/10000^{2j/d}).
P
E
p
,
2
j
=
sin
(
p
/1000
0
2
j
/
d
)
,
P
E
p
,
2
j
+
1
=
cos
(
p
/1000
0
2
j
/
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
Академическая база →