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

14.2 Три роли одного представления

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

Запрос — с чем сравнивать, ключ — что сравнивается, значение — что передавать. Это аналогия ролей; все три объекта являются числовыми векторами.

Запрос сравнивается с ключами; полученные доли взвешивают передаваемые значения. Будущее недоступно при предсказании продолжения. Несколько голов проводят независимые сравнения.

Три роли одного представления

Для X[n,d_model] матрицы W_Q,W_K,W_V переводят каждую строку в query, key и value. В простом случае ширины одинаковы:

Q=XWQ,K=XWK,V=XWV,W∗∈Rd×d.Q=XW_Q,\quad K=XW_K,\quad V=XW_V,\qquad W_*\in\mathbb R^{d\times d}.

Если W_Q=I, то Q=X. Но identity — это матрица проекции; Q не обязана быть квадратной или единичной. В default X=[[1,0],[0,1],[1,1]] имеет shape[3,2], а каждая проекция[2,2].

При W_Q=[[2,0],[0,1]] первая query становится[2,0], третья[2,1]. W_K и W_V можно оставить прежними: тогда изменён способ сравнения query, но не сами values. В реальной модели эти матрицы обучаются совместно с loss; ползунок лаборатории лишь задаёт их вручную.

Эксперимент. Сначала поменяйте W_Q, затем W_V. В первом случае меняются scores и coefficients; во втором при неизменных Q/K coefficients остаются прежними, меняется содержимое смеси. Shapes проверяются до вычисления: произвольный reshape не исправляет несогласованные матрицы.

X=[[1,0],[0,1],[1,1]]; W=[[2,0],[0,1]]
Q=[[sum(row[k]*W[k][j] for k in range(2)) for j in range(2)] for row in X]
assert Q==[[2,0],[0,1],[2,1]]

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

Similarity определяется Q/K, содержимое смеси определяется V.

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

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