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$:
|
||||
|
||||
$$\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:
|
||||
|
||||
$$[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$
|
||||
modulujemy wpływ poprzedniego stanu.
|
||||
|
||||
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.
|
||||
|
||||
$$\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