65 lines
2.8 KiB
Org Mode
65 lines
2.8 KiB
Org Mode
|
|
||
|
* Transformer
|
||
|
|
||
|
** Atencja jako „miękka” baza danych
|
||
|
|
||
|
O atencji można myśleć metaforycznie jako o odpytywaniu „miękkiej”, wektorowej
|
||
|
bazy danych. Możemy sobie wyobrazić, że słowa $w_1,\dots,w_{j-1}$ są
|
||
|
naszą bazą danych, a słowo $w_j$ (z którego kierujemy „snop” uwagi)
|
||
|
jest *zapytaniem* (/query/). To zapytanie dopasowujemy do *kluczy*
|
||
|
(/keys/), w najprostszym ujęciu po prostu słów $w_1,\dots,w_{j-1}$ (a
|
||
|
właściwie ich zanurzeń). Jeśli klucz pasuje do zapytania, odpowiednia
|
||
|
wartość (/value/) jest wydobywana z bazy. Nasza baza jest jednak
|
||
|
„miękka”, nie — zerojedynkowa, zapytanie pasuje do klucza w pewnym
|
||
|
stopniu, mniej lub bardziej.
|
||
|
|
||
|
W najprostszym ujęciu wartości są tym samym co klucze, czyli z naszej
|
||
|
bazy wydobywamy te same zanurzenia słów, których używamy jako kluczy.
|
||
|
Można jednak skomplikować schemat rozróżniając klucze i wartości —
|
||
|
mogą one powstawać przez rzutowanie podstawowych zanurzeń różnymi
|
||
|
macierzami:
|
||
|
|
||
|
$$\vec{k_i} = W_k E(w_i),$$
|
||
|
|
||
|
$$\vec{v_i} = W_v E(w_i).$$
|
||
|
|
||
|
Również samo zapytanie może powstać przez rzutowanie:
|
||
|
|
||
|
$$\vec{q_i} = W_q E(w_i).$$
|
||
|
|
||
|
Jeśli zanurzenie $E(w_i)$ o rozmiarze $m$ przedstawimy w postaci
|
||
|
kolumnowej, wówczas macierze będą $W_k$ i $W_q$ będą miały rozmiar
|
||
|
$d_k \times m$, gdzie $d_k$ jest rozmiarem kluczy i zapytań (dlaczego
|
||
|
wektory kluczy i zapytań powinny mieć raczej ten sam rozmiar?), zaś macierz
|
||
|
$W_v$ — $d_v \times m$, gdzie $d_v$ to rozmiar zanurzenia wektora wartości.
|
||
|
Zazwyczaj $d_k = d_v = m$, ale nie jest to obligatoryjne.
|
||
|
|
||
|
Teraz nieznormalizowane wagi atencji przyjmą postać:
|
||
|
|
||
|
$$\hat{\alpha}_{i,j} = \vec{q_i}^T\vec{k_j} = (W_q E(w_i))(W_k E(k_j)).$$
|
||
|
|
||
|
Zauważmy, że ciąg $\hat{\alpha}_{1,j},\dots,\hat{\alpha}_{j-1,j}$ można potraktować jako wektor
|
||
|
$\hat{\vec{\alpha}_{*,j}}$ i wyliczać w postaci zwartej:
|
||
|
|
||
|
$$\hat{\vec{\alpha}_{*,j}} = \vec{q_j}^T K$$
|
||
|
|
||
|
gdzie $K$ to macierz kluczy złożona z wektorów
|
||
|
$\vec{k_1},\dots,\vec{k_{j-1}}$, tj. macierz o rozmiarze $d_k \times (j-1)$.
|
||
|
|
||
|
Wektor znormalizowanych wag atencji będzie miał wówczas postać:
|
||
|
|
||
|
$$\vec{\alpha}_{*,j} = \operatorname{softmax}(\vec{q_j}^T K).$$
|
||
|
|
||
|
Dokonajmy teraz agregacji wartości — obliczamy średnią wektorów
|
||
|
wartości ($\vec{v_i}$) ważoną atencją:
|
||
|
|
||
|
$$A(w_1,\dots,j-1) = \alpha_{1,j} \vec{v_1} + \dots + \alpha_{j-1,j} \vec{v_{j-1}} = \sum_{i=1}^{j-1} \alpha_{i,j} v_i.$$
|
||
|
|
||
|
Jeśli $j-1$ wektorów wartości ułożyłem w macierz $V$ (o rozmiarze
|
||
|
$(j-1) \times d_v$), powyższy wzór będziemy mogli zapisać jako iloczyn wektora wag atencji i macierzy $V$:
|
||
|
|
||
|
$$A(w_1,\dots,j-1) = \vec{\alpha}_{*,j}^T V = \operatorname{softmax}(\vec{q_j}^T K)^T V.$$
|
||
|
|
||
|
Sposób patrzenia na atencję przez pryzmat trójki
|
||
|
zapytania-klucze-wartości okaże się niezwykle ważny w wypadku modelu Transformer (zob. kolejny wykład).
|