Fixes, changing structure
This commit is contained in:
parent
9a3d411257
commit
ceb6fb7ef7
@ -90,67 +90,6 @@ słowo odgadywane.
|
|||||||
#+CAPTION: Atencja użyta w prostym neuronowym modelu języka
|
#+CAPTION: Atencja użyta w prostym neuronowym modelu języka
|
||||||
[[./10_Atencja/simple-attention.drawio.png]]
|
[[./10_Atencja/simple-attention.drawio.png]]
|
||||||
|
|
||||||
** 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).
|
|
||||||
|
|
||||||
** Atencja jako składnik sieci rekurencyjnej
|
** Atencja jako składnik sieci rekurencyjnej
|
||||||
|
|
||||||
@ -175,7 +114,7 @@ $$P_M(w_j|w_1,\dots,w_{j-1}) = ?.$$
|
|||||||
|
|
||||||
Załóżmy, że mamy pewien początek (*prefiks*) tekstu o długości $p$:
|
Załóżmy, że mamy pewien początek (*prefiks*) tekstu o długości $p$:
|
||||||
$w_1,\dots,w_p$. Powiedzmy, że naszym celem jest *wygenerowanie*
|
$w_1,\dots,w_p$. Powiedzmy, że naszym celem jest *wygenerowanie*
|
||||||
dokończenia czy kontynuacji tego tekstu (nie określamy z góry tej
|
dokończenia czy kontynuacji tego tekstu (nie określamy z góry
|
||||||
długości tej kontynuacji).
|
długości tej kontynuacji).
|
||||||
|
|
||||||
Najprostszy sposób wygenerowania pierwszego wyrazu dokończenia polega
|
Najprostszy sposób wygenerowania pierwszego wyrazu dokończenia polega
|
||||||
@ -183,7 +122,7 @@ na wzięciu wyrazu maksymalizującego prawdopodobieństwo według modelu języka
|
|||||||
|
|
||||||
$$w_{p+1} = \operatorname{argmax}_w P_M(w|w_1,\dots,w_p).$$
|
$$w_{p+1} = \operatorname{argmax}_w P_M(w|w_1,\dots,w_p).$$
|
||||||
|
|
||||||
*Pytanie*: Dlaczego \operatorname{argmax}, a nie \operatorname{max}?
|
*Pytanie*: Dlaczego $\operatorname{argmax}$, a nie $\operatorname{max}$?
|
||||||
|
|
||||||
Słowo $w_{p+1}$ możemy dołączyć do prefiksu i powtórzyć procedurę:
|
Słowo $w_{p+1}$ możemy dołączyć do prefiksu i powtórzyć procedurę:
|
||||||
|
|
||||||
@ -209,9 +148,9 @@ przedstawić jako zadanie generowania tekstu. Przykładem jest tłumaczenie masz
|
|||||||
|
|
||||||
W tłumaczeniu maszynowym (tłumaczeniu automatycznym, ang. /machine
|
W tłumaczeniu maszynowym (tłumaczeniu automatycznym, ang. /machine
|
||||||
translation/) na wejściu podawany jest tekst (na ogół pojedyncze
|
translation/) na wejściu podawany jest tekst (na ogół pojedyncze
|
||||||
zdanie) źródłowy (/source sentence/) $S = (u_1,\dots,u_|S|)$, celem
|
zdanie) źródłowy (/source sentence/) $S = (u_1,\dots,u_{|S|})$, celem
|
||||||
jest uzyskanie tekstu docelowego (/target sentence/)
|
jest uzyskanie tekstu docelowego (/target sentence/)
|
||||||
$T=(w_1,\dots,w_|T|). Zakładamy, że $S$ jest tekstem w pewnym języku
|
$T=(w_1,\dots,w_{|T|}). Zakładamy, że $S$ jest tekstem w pewnym języku
|
||||||
źródłowym (/source language/), zaś $T$ — w innym języku, języku
|
źródłowym (/source language/), zaś $T$ — w innym języku, języku
|
||||||
docelowym (/target language/).
|
docelowym (/target language/).
|
||||||
|
|
||||||
@ -233,8 +172,8 @@ The 'new Member States' - actually, the name continues to be sort of conditional
|
|||||||
The number of armed attacks also rose by 200% overall. Także liczba ataków zbrojnych wzrosła łącznie o 200 %.
|
The number of armed attacks also rose by 200% overall. Także liczba ataków zbrojnych wzrosła łącznie o 200 %.
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Zauważmy, że możemy taki tekst modelować po prostu traktując jako
|
Zauważmy, że możemy taki (bi)tekst modelować po prostu traktując jako
|
||||||
jeden. Innymi słowy, nie modelujemy tekstu angielskiego ani polskiego,
|
jeden ciągły tekst. Innymi słowy, nie modelujemy tekstu angielskiego ani polskiego,
|
||||||
tylko angielsko-polską mieszankę, to znaczy uczymy model, który najpierw modeluje prawdopodobieństwo
|
tylko angielsko-polską mieszankę, to znaczy uczymy model, który najpierw modeluje prawdopodobieństwo
|
||||||
po stronie źródłowej (powiedzmy — angielskiej):
|
po stronie źródłowej (powiedzmy — angielskiej):
|
||||||
|
|
||||||
@ -243,7 +182,7 @@ The number of armed attacks also ?
|
|||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
W momencie napotkania specjalnego tokenu końca zdania źródłowego (powiedzmy ~<eoss>~) model
|
W momencie napotkania specjalnego tokenu końca zdania źródłowego (powiedzmy ~<eoss>~) model
|
||||||
powinien nauczyć się, że musi przerzucić się na modelowanie tekstu w języku docelowym (powiedzmy — polskim):
|
powinien nauczyć się, że musi przełączyć się na modelowanie tekstu w języku docelowym (powiedzmy — polskim):
|
||||||
|
|
||||||
#+BEGIN_SRC
|
#+BEGIN_SRC
|
||||||
The number of armed attacks also rose by 200% overall.<eoss>Także liczba ataków ?
|
The number of armed attacks also rose by 200% overall.<eoss>Także liczba ataków ?
|
||||||
@ -258,10 +197,10 @@ tłumaczone zdanie jako prefiks, doklejając tylko token ~<eoss>~.
|
|||||||
|
|
||||||
**** Neuronowe modele języka jako translatory
|
**** Neuronowe modele języka jako translatory
|
||||||
|
|
||||||
Jako że N-gramowego modelu języka ani modelu opartego na worku słów
|
Jako że n-gramowego modelu języka ani modelu opartego na worku słów
|
||||||
nie da się użyć w omawiany sposób w tłumaczeniu maszynowym
|
nie da się użyć w omawiany sposób w tłumaczeniu maszynowym
|
||||||
(dlaczego?), jako pierwszych użyto w neuronowym tłumaczeniu maszynowym
|
(dlaczego?), jako pierwszych użyto w neuronowym tłumaczeniu maszynowym
|
||||||
sieci LSTM, przy użyciu omawianego wyżej sposobu.
|
sieci LSTM, przy zastosowaniu omawianego wyżej sposobu.
|
||||||
|
|
||||||
System tłumaczenia oparte na sieciach LSTM działały zaskakująco
|
System tłumaczenia oparte na sieciach LSTM działały zaskakująco
|
||||||
dobrze, zważywszy na to, że cała informacja o zdaniu źródłowym musi
|
dobrze, zważywszy na to, że cała informacja o zdaniu źródłowym musi
|
||||||
|
64
wyk/11_Transformer.org
Normal file
64
wyk/11_Transformer.org
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
|
||||||
|
* 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).
|
Loading…
Reference in New Issue
Block a user