LSTM
This commit is contained in:
parent
09ccde4ea7
commit
c2d5a96afc
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
BIN
wyk/08_Neuronowy_ngramowy_model.pdf
Normal file
BIN
wyk/08_Neuronowy_ngramowy_model.pdf
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
@ -136,22 +136,84 @@ zapominana, a pozostałe — wnoszą wkład w całości.
|
|||||||
|
|
||||||
Najpierw zdefiniujmy pośredni stan $\vec{\xi} \in \mathcal{R}^p$:
|
Najpierw zdefiniujmy pośredni stan $\vec{\xi} \in \mathcal{R}^p$:
|
||||||
|
|
||||||
$$\vec{\xi_t} = \operatorname{tanh}(W_{\xi}[\Gamma_\gamma \bullet c_{t-1}, E(w_t)] + b_{\xi}),$$
|
$$\vec{\xi_t} = \operatorname{tanh}(W_{\xi}[\Gamma_\gamma \bullet \vec{s_{t-1}}, E(w_t)] + b_{\xi}),$$
|
||||||
|
|
||||||
gdzie $\bullet$ oznacza iloczyn Hadamarda (nie iloczyn skalarny!) dwóch wektorów:
|
gdzie $\bullet$ oznacza iloczyn Hadamarda (nie iloczyn skalarny!) dwóch wektorów:
|
||||||
|
|
||||||
$$[x_1,\dots,x_n] \bullet [y_1,\dots,y_n] = [x_1 y_1,\dots,x_n y_n].$$
|
$$[x_1,\dots,x_n] \bullet [y_1,\dots,y_n] = [x_1 y_1,\dots,x_n y_n].$$
|
||||||
|
|
||||||
Obliczanie $\vec{\xi_t}$ bardzo przypomina zwykłą sieć rekurencyjną,
|
Jak widać, obliczanie $\vec{\xi_t}$ bardzo przypomina zwykłą sieć rekurencyjną,
|
||||||
jedyna różnica polega na tym, że za pomocą bramki $\Gamma_\gamma$
|
jedyna różnica polega na tym, że za pomocą bramki $\Gamma_\gamma$
|
||||||
modulujemy wpływ poprzedniego stanu.
|
modulujemy wpływ poprzedniego stanu.
|
||||||
|
|
||||||
Ostateczna wartość stanu jest średnią ważoną poprzedniego stanu i bieżącego stanu pośredniego:
|
Ostateczna wartość stanu jest średnią ważoną poprzedniego stanu i bieżącego stanu pośredniego:
|
||||||
|
|
||||||
$$\vec{c_t} = \Gamma_u \bullet \vec{\xi_t} + (1 - \Gamma_u) \bullet \vec{c_{t-1}}.$$
|
$$\vec{s_t} = \Gamma_u \bullet \vec{\xi_t} + (1 - \Gamma_u) \bullet \vec{s_{t-1}}.$$
|
||||||
|
|
||||||
Skąd się biorą bramki $\Gamma_\gamma$ i $\Gamma_u$? Również z poprzedniego stanu i z biężacego wyrazu.
|
Skąd się biorą bramki $\Gamma_\gamma$ i $\Gamma_u$? Również z poprzedniego stanu i z biężacego wyrazu.
|
||||||
|
|
||||||
$$\Gamma_\gamma = \sigma(W_\gamma[\vec{c_{t-1}},E(w_t)] + b_\gamma),$$
|
$$\Gamma_\gamma = \sigma(W_\gamma[\vec{s_{t-1}},E(w_t)] + \vec{b_\gamma}),$$
|
||||||
|
|
||||||
$$\Gamma_u = \sigma(W_u[\vec{c_{t-1}},E(w_t)] + b_u),$$
|
$$\Gamma_u = \sigma(W_u[\vec{s_{t-1}},E(w_t)] + \vec{b_u}),$$
|
||||||
|
|
||||||
|
** Sieć LSTM
|
||||||
|
|
||||||
|
Architektura LSTM (/Long Short-Term Memory/), choć powstała wcześniej
|
||||||
|
niż GRU, jest od niej nieco bardziej skomplikowana.
|
||||||
|
|
||||||
|
- zamiast dwóch bramek LSTM zawiera **trzy bramki**: bramkę wejścia (/input gate/),
|
||||||
|
bramkę wyjścia (/output gate/) i bramkę zapominania (/forget gate/),
|
||||||
|
- oprócz ukrytego stanu $\vec{s_t}$ sieć LSTM posiada również **komórkę pamięci** (/memory cell/),
|
||||||
|
$\vec{c_t}$, komórka pamięci, w przeciwieństwie do stanu, zmienia się wolniej (intuicyjnie:
|
||||||
|
/jeśli nie zrobimy nic specjalnego, wartość komórki pamięci się nie zmieni/).
|
||||||
|
|
||||||
|
*** Wzory
|
||||||
|
|
||||||
|
Komórka pamięci modulowana jest za pomocą bramki zapominania ($\Gamma_f$) i bramki
|
||||||
|
wejścia ($\Gamma_i$), bramki te określają na ile uwzględniamy, odpowiednio,
|
||||||
|
poprzednią wartość komórki pamięci $\vec{c_{t-1}}$ i wejście, a
|
||||||
|
właściwie wejście w połączeniu z poprzednim stanem:
|
||||||
|
|
||||||
|
$$\vec{c_t} = \Gamma_f \bullet \vec{c_{t-1}} + \Gamma_i \bullet \vec{\xi_t},$$
|
||||||
|
|
||||||
|
gdzie wektor pomocniczy $\vec{\xi_t}$ wyliczany jest w następujący sposób:
|
||||||
|
|
||||||
|
$$\vec{\xi_t} = \operatorname{tanh}(W_{\xi}[\vec{s_{t-1}}, E(w_t)] + \vec{b_\xi}.$$
|
||||||
|
|
||||||
|
Nowa wartość stanu sieci nie zależy bezpośrednio od poprzedniej wartości stanu, lecz
|
||||||
|
jest równa komórce pamięci modulowanej bramką wyjścia:
|
||||||
|
|
||||||
|
$$\vec{h_t} = \Gamma_o \bullet \operatorname{tanh}(\vec{c_t}).$$
|
||||||
|
|
||||||
|
*** Obliczanie bramek
|
||||||
|
|
||||||
|
Wartości wszystkie trzech bramek są liczone w identyczny sposób (wzory
|
||||||
|
różnią się tylko macierzami wag i wektorem obciążeń):
|
||||||
|
|
||||||
|
$$\Gamma_f = \sigma(W_f[\vec{s_{t-1}}, E(w_t)] + \vec{b_f}),$$
|
||||||
|
|
||||||
|
$$\Gamma_i = \sigma(W_i[\vec{s_{t-1}}, E(w_t)] + \vec{b_i}),$$
|
||||||
|
|
||||||
|
$$\Gamma_o = \sigma(W_o[\vec{s_{t-1}}, E(w_t)] + \vec{b_o}).$$
|
||||||
|
|
||||||
|
*** Wartości początkowe
|
||||||
|
|
||||||
|
Początkowe wartości stanu i komórki pamięci mogą być ustawione na zero:
|
||||||
|
|
||||||
|
$$\vec{s_0} = \vec{0},$$
|
||||||
|
|
||||||
|
$$\vec{c_0} = \vec{0}.$$
|
||||||
|
|
||||||
|
*** Podsumowanie
|
||||||
|
|
||||||
|
Sieci LSTM dominowały w zagadnieniach przetwarzania języka naturalnego
|
||||||
|
(ogólniej: przetwarzania sekwencji) do czasu pojawienia się
|
||||||
|
architektury Transformer w 2017 roku.
|
||||||
|
|
||||||
|
Na sieci LSTM oparty był ELMo, jeden z pierwszych dużych
|
||||||
|
**pretrenowanych modeli języka**, dostrajanych później pod konkretne
|
||||||
|
zadania (na przykład klasyfikację tekstu), zob. artykuł [Deep
|
||||||
|
contextualized word
|
||||||
|
representations](https://arxiv.org/pdf/1802.05365.pdf). Dokładniej
|
||||||
|
mówiąc, ELMo był siecią **BiLSTM**, połączeniem dwóch sieci, jednej
|
||||||
|
działającej z lewej strony na prawą, drugiej — z prawej do lewej.
|
||||||
|
Loading…
Reference in New Issue
Block a user