aitech-moj-2023/wyk/10_Atencja.org

88 lines
3.5 KiB
Org Mode
Raw Normal View History

2022-05-14 14:32:50 +02:00
* Atencja
Sieci LSTM w roku 2017/2018 zostały wyparte przez nową, pod pewnymi
względami prostszą, architekturę Transformer. Sieci Transformer oparte
są zasadniczo na prostej idei *atencji* (/attention/), pierwszy
artykuł wprowadzający sieci Transformer nosił nawet tytuł
[Attention Is All You Need](https://arxiv.org/abs/1706.03762).
Intuicyjnie, atencja jest rodzajem uwagi, którą sieć może selektywnie
kierować na wybrane miejsca (w modelowaniu języka: wybrane wyrazy).
Idea atencji jest jednak wcześniejsza, powstała jako ulepszenie sieci
rekurencyjnych. My omówimy ją jednak na jeszcze prostszym przykładzie
użycia w modelowaniu języka za pomocą hybrydy modelu
bigramowego i modelu worka słów.
** Prosty przykład zastosowania atencji
Wróćmy do naszego przykładu z Wykładu 8, w którym łączyliśmy $n$-gramowy
model języka z workiem słów. Przyjmijmy bigramowy model języka ($n=2$), wówczas:
$$y = \operatorname{softmax}(C[E(w_{i-1}),A(w_1,\dots,w_{i-2})]),$$
gdzie $A$ była prostą agregacją (np. sumą albo średnią) embeddingów
$E(w_1),\dots,E(w_{i-2})$. Aby wyjść z prostego nieuporządkowanego
modelu worka słów, próbowaliśmy w prosty sposób uwzględnić pozycję
wyrazów czy ich istotność (za pomocą odwrotnej częstości
dokumentowej). Oba te sposoby niestety zupełnie nie uwzględniają kontekstu.
Innymi słowy, chcielibyśmy mieć sumę ważoną zanurzeń:
$$A(w_1,\dots,j) = \omega_1 E(w_1) + \dots \omega_j E(w_j) = \sum_{k=1}^j \omega_k E(w_k),$$
tak by $\omega_k$ w sposób bardziej zasadniczy zależały od lokalnego kontekstu, a
nie tylko od pozycji $k$ czy słowa $w_k$. W naszym prostym przypadku
jako kontekst możemy rozpatrywać słowo bezpośrednio poprzedzające
odgadywane słowa (kontekstem jest $w_{i-1}$).
Wygodnie również przyjąć, że $\sum_{k=1}^j \omega_k = 1$, wówczas mamy do czynienia ze średnią ważoną.
*** Nieznormalizowane wagi atencji
Będziemy liczyć nieznormalizowane **wagi atencji**
$\hat{\alpha}_{k,j}$. Określają one, jak bardzo słowo $w_j$ „zwraca
uwagę” na poszczególne, inne słowa. Innymi słowy, wagi je opisują, jak
bardzo słowo $w_k$ pasuje do naszego kontekstu, czyli słowa $w_j$.
Najprostszy sposób mierzenia dopasowania to po prostu iloczyn skalarn:
$$\hat{\alpha}_{k,j} = E(w_k)E(w_j),$$
można też alternatywnie złamać symetrię iloczynu skalarnego i
wyliczać dopasowanie za pomocą prostej sieci feed-forward:
$$\hat{\alpha}_{k,j} =
\vec{v}\operatorname{tanh}(W_{\alpha}[E(w_k),E(w_j)] +
\vec{b_{\alpha}}).$$
W drugim przypadku pojawiają się dodatkowe wyuczalne paramatery: macierz $W_{\alpha}$, wektory
$\vec{b_{\alpha}}$ i $\vec{v}$.
*** Normalizacja wag atencji
Jak już wspomniano, dobrze żeby wagi atencji sumowały się do 1. W tym celu możemy po prostu zastosować
funkcję softmax:
$$\alpha_{k,j} = \operatorname{softmax}([\hat{\alpha}_{1,j},\dots,\hat{\alpha}_{j-1,j}]).$$
Zauważmy jednak, że otrzymanego z funkcji softmax wektora
$[\alpha_{1,j},\dots,\alpha_{j-1,j}]$ tym razem nie interpretujemy jako rozkład prawdopodobieństwa.
Jest to raczej rozkład uwagi, atencji słowa $w_j$ względem innych słów.
*** Użycie wag atencji w prostym neuronowym modelu języka
Teraz jako wagi $\omega$ w naszym modelu języka możemy przyjąć:
$$\omega_k = \alpha_{k,i-1}.$$
Oznacza to, że z naszego worka będziemy „wyjmowali” słowa w sposób
selektywny w zależności od wyrazu, który bezpośrednio poprzedza
słowo odgadywane.
*** Diagram
#+CAPTION: Atencja użyta w prostym neuronowym modelu języka
[[./10_Atencja/simple-attention.drawio.png]]