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

1 line
14 KiB
Plaintext
Raw Normal View History

2022-06-04 09:15:15 +02:00
{"cells":[{"cell_type":"markdown","metadata":{},"source":["## Atencja\n\n"]},{"cell_type":"markdown","metadata":{},"source":["Sieci LSTM w roku 2017/2018 zostały wyparte przez nową, pod pewnymi\nwzględami prostszą, architekturę Transformer. Sieci Transformer oparte\nsą zasadniczo na prostej idei **atencji** (*attention*), pierwszy\nartykuł wprowadzający sieci Transformer nosił nawet tytuł\n[Attention Is All You Need]([https://arxiv.org/abs/1706.03762](https://arxiv.org/abs/1706.03762)).\n\nIntuicyjnie, atencja jest rodzajem uwagi, którą sieć może selektywnie\nkierować na wybrane miejsca (w modelowaniu języka: wybrane wyrazy).\n\nIdea atencji jest jednak wcześniejsza, powstała jako ulepszenie sieci\nrekurencyjnych. My omówimy ją jednak na jeszcze prostszym przykładzie\nużycia w modelowaniu języka za pomocą hybrydy modelu\nbigramowego i modelu worka słów.\n\n"]},{"cell_type":"markdown","metadata":{},"source":["### Prosty przykład zastosowania atencji\n\n"]},{"cell_type":"markdown","metadata":{},"source":["Wróćmy do naszego przykładu z Wykładu 8, w którym łączyliśmy $n$-gramowy\nmodel języka z workiem słów. Przyjmijmy bigramowy model języka ($n=2$), wówczas:\n\n$$y = \\operatorname{softmax}(C[E(w_{i-1}),A(w_1,\\dots,w_{i-2})]),$$\n\ngdzie $A$ była prostą agregacją (np. sumą albo średnią) embeddingów\n$E(w_1),\\dots,E(w_{i-2})$. Aby wyjść z nieuporządkowanego\nmodelu worka słów, próbowaliśmy w prosty sposób uwzględnić pozycję\nwyrazów czy ich istotność (za pomocą odwrotnej częstości\ndokumentowej). Oba te sposoby niestety zupełnie nie uwzględniają **kontekstu**.\n\nInnymi słowy, chcielibyśmy mieć sumę ważoną zanurzeń:\n\n$$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),$$\n\ntak by $\\omega_k$ w sposób bardziej zasadniczy zależały od lokalnego kontekstu, a\nnie tylko od pozycji $k$ czy słowa $w_k$. W naszym uproszczonym przypadku\njako kontekst możemy rozpatrywać słowo bezpośrednio poprzedzające\nodgadywane słowa (kontekstem jest $w_{i-1}$).\n\nWygodnie również przyjąć, że $\\sum_{k=1}^j \\omega_k = 1$ i $\\omega_k\n\\in (0,1)$, wówczas mamy do czynienia ze średnią ważoną.\n\n"]},{"cell_type":"markdown","metadata":{},"source":["#### Nieznormalizowane wagi atencji\n\n"]},{"cell_type":"markdown","metadata":{},"source":["Będziemy liczyć nieznormalizowane ****wagi atencji****\n$\\hat{\\alpha}_{k,j}$. Określają one, jak bardzo słowo $w_j$ „zwraca\nuwagę” na poszczególne, inne słowa. Innymi słowy, wagi atencji opisują, jak\nbardzo słowo $w_k$ pasuje do naszego kontekstu, czyli słowa $w_j$.\n\n**Uwaga**: (nieznormalizowane czy znormalizowane) wagi atencji nie należą do wyuczalnych\nwag (parametrów) modelu.\n\nNajprostszy sposób mierzenia dopasowania to po prostu iloczyn skalarny:\n\n$$\\hat{\\alpha}_{k,j} = E(w_k)E(w_j),$$\n\nmożna też alternatywnie złamać symetrię iloczynu skalarnego i\nwyliczać dopasowanie za pomocą prostej sieci feed-forward:\n\n$$\\hat{\\alpha}_{k,j} =\n\\vec{v}\\operatorname{tanh}(W_{\\alpha}[E(w_k),E(w_j)] +\n\\vec{b_{\\alpha}}).$$\n\nW drugim przypadku pojawiają się dodatkowe wyuczalne paramatery: macierz $W_{\\alpha}$, wektory\n$\\vec{b_{\\alpha}}$ i $\\vec{v}$.\n\n"]},{"cell_type":"markdown","metadata":{},"source":["#### Normalizacja wag atencji\n\n"]},{"cell_type":"markdown","metadata":{},"source":["Jak już wspomniano, dobrze żeby wagi atencji sumowały się do 1. W tym celu możemy po prostu zastosować\nfunkcję softmax:\n\n$$\\alpha_{k,j} = \\operatorname{softmax}([\\hat{\\alpha}_{1,j},\\dots,\\hat{\\alpha}_{j-1,j}]).$$\n\nZauważmy jednak, że otrzymanego z funkcji softmax wektora\n$[\\alpha_{1,j},\\dots,\\alpha_{j-1,j}]$ tym razem nie interpretujemy jako rozkład prawdopodobieństwa.\nJest to raczej rozkład uwagi, atencji słowa $w_j$ względem innych słów.\n\n"]},{"cell_type":"markdown","metadata":{},"source":["#### Użycie wag atencji w prostym neuronowym modelu języka\n\n"]},{"cell_type":"markdown","metadata":{},"source":