Alterna · учебный материал
14.4 Нельзя читать ещё не известный ответ
При обучении продолжению будущие слова уже находятся в примере, но использовать их как вход для раннего прогноза нельзя. Причинная маска запрещает такие связи.
Что в этом материале
- Запрет применяется до нормировки
Содержание и основные понятия
На предыдущей странице: подготовим масштаб оценок.
При обучении продолжению будущие слова уже находятся в примере, но использовать их как вход для раннего прогноза нельзя. Причинная маска запрещает такие связи.
Запрос сравнивается с ключами; полученные доли взвешивают передаваемые значения. Будущее недоступно при предсказании продолжения. Несколько голов проводят независимые сравнения.
Для изменения рисунка включитеJavaScript; расчёт и теория доступны далее.
Запрет применяется до нормировки
Causal mask разрешает позиции j≤i, включая текущую. Запрещённым scores присваивается−∞, затем отдельно нормируется каждая query-строка:
A
i
j
=
exp
(
S
i
j
+
M
i
j
)
∑
r
exp
(
S
i
r
+
M
i
r
)
,
M
i
j
=
{
0
j
≤
i
−
∞
j
>
i
.
A_{ij}=\frac{\exp(S_{ij}+M_{ij})}{\sum_r\exp(S_{ir}+M_{ir})},\quad
M_{ij}=\begin{cases}0&j\le i\\-\infty&j>i.\end{cases}
A
ij
=
∑
r
exp
(
S
i
r
+
M
i
r
)
exp
(
S
ij
+
M
ij
)
,
M
ij
=
{
0
−
∞
j
≤
i
j
>
i
.
Для устойчивости перед exp вычитается максимум разрешённых scores. В запрещённых ячейках coefficient становится0. Если просто поставить score0, его экспонента будет1, и запрет не сработает.
В default первая query имеет только один доступный key, поэтому строка A=[1,0,0]. Вторая имеет scores[0,1/√2,−∞]; её coefficients [α,1−α,0], где α=1/(1+exp(1/√2)).
Эксперимент.
Измените только последнюю строку X. Первые две output rows при causal mask должны остаться прежними. Затем отключите mask и повторите: влияние будущего может появиться. Это диагностическая абляция, не допустимый режим авторегрессионного decoder на этапе обучения next-token prediction.
Полностью запрещённая строка не имеет нормированного распределения. Стандартная causal mask с разрешённой диагональю её не создаёт; если в дальнейшем добавится padding mask, этот случай нужно обработать явно.
from math import exp,sqrt
a=1/(1+exp(1/sqrt(2)))
weights=[a,1-a,0]
assert abs(sum(weights)-1)<1e-12
Код повторяет только что разобранные операции.
Полный проверяемыйPython-пример главы
доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.
exp(0)=1 не исключает вклад; exp(−∞)=0.
Как доли превращаются в смесь. Как этот вопрос продолжает полученный результат?
Python-примеры главы 14
Академическая база →