Sztuczne sieci neuronowe w przetwarzaniu języka naturalnego
¶
dr inż. Aleksander Smywiński-Pohl
¶
apohllo@agh.edu.pl
¶
http://apohllo.pl/dydaktyka/nlp
¶
konsultacje: czw. 16:30-17:30
¶
Sztuczne sieci neuronowe (artificial neural networks - ANN)
¶
$$ z = w \cdot x + b $$
$$ y = a = f(z) $$
$$ \sigma(z) = \frac{1}{1 + e^{-z}} $$
$$ tanh(z) = \frac{e^z - e^{-z}}{e^z+e^{-z}} $$
$$ ReLU(z) = max(x, 0) $$
Sigmoida
¶
Tangens hiperboliczny
¶
ReLU
¶
Sieć w pełni połączona
(feed-forward NN)
¶
$$ h = f(Wx + b) $$
$$ x \in R^{n_0} $$$$ h \in R^{n_1} $$$$ b \in R^{n_1} $$$$ W \in R^{n_0 \times n_1} $$
$$ z = Uh $$
$$ \text{softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^d e^{z_j}} $$
Uogólniona notacja
¶
$$ \begin{split} a^{[0]} & = x\\ z^{[1]} & = W^{[1]}a^{[0]} + b^{[1]}\\ a^{[1]} & = g^{[1]}\left(z^{[1]}\right)\\ \end{split} $$
$$ \begin{split} z^{[2]} & = W^{[2]}a^{[1]}+b^{[2]}\\ a^{[2]} & = g^{[2]}\left(z^{[2]}\right)\\ \hat y & = a^{[2]} \end{split} $$
$$ \begin{split} z^{[i]} & = W^{[i]}a^{[i-1]} + b^{[i]}\\ a^{[i]} & = g^{[i]}\left(z^{[i]}\right) \end{split} $$
Funkcja straty (loss function)
¶
$$ L_{CE}(\hat y,y) = - \sum_{i=1}^{C} y_i log\hat y_i $$
$$ L_{CE}(\hat y,y) = - log \hat y_i $$
$$ L_{CE}(\hat y,y) = \frac{e^{z_i}}{\sum_{j=1}^{C} e^{z_j}} $$
Graf obliczeń
¶
$$ \begin{split} d & = 2 * b\\ e & = a + d\\ L & = c * e \end{split} $$
Wsteczna propagacja błędu (error backpropagation, backprop)
¶
$$ f(x) = u(v(x)) $$
$$ \frac{df}{dx} = \frac{du}{dv}\cdot\frac{dv}{dx} $$
$$ \frac{\partial L}{\partial a}, \frac{\partial L}{\partial b}, \frac{\partial L}{\partial c} $$
$$ \frac{\partial L}{\partial c} = e $$
$$ \begin{split} \frac{\partial L}{\partial a} & = \frac{\partial L}{\partial e}\frac{\partial e}{\partial a}\\ \frac{\partial L}{\partial b} & = \frac{\partial L}{\partial e}\frac{\partial e}{\partial d}\frac{\partial d}{\partial a} \end{split} $$
$$ \begin{split} L = ce & : \frac{\partial L}{\partial c}=e,\frac{\partial L}{\partial e}=c\\ e = a+d & : \frac{\partial e}{\partial a} =1,\frac{\partial e}{\partial d}=1\\ d = 2b & : \frac{\partial d}{\partial b}=2 \end{split} $$
Przejście w tył w grafie obliczeń
¶
Proces uczenia
¶
stała ucząca/współczynnik uczenia się (learning rate)
inicjalizacja wag
mini-batch
epoki
wczesne zatrzymanie (early stopping)
dropout
algorytm optymalizacji
optymalizacja hiperparametrów
rola zbioru walidacyjnego
środowiska do obliczeń: PyTorch, TensorFlow, Jax
Kluczowy problem - sekwencyjna natura tekstu
¶
Proste modele, jak
bag-of-words
nie nadają się do klasyfikacji tokenów
Modele takie jak HMM, MEMM są ograniczone jeśli chodzi o reprezentację kontekstu:
kontekst jest niewielki: 2-3 tokeny
cechy są określane manualnie
Zależności w tekście mogą być długodystansowe
Gdybym
wiedział
wtedy to co wiem dzisiaj, to bym się nie ...
Gdybym
wiedziała
wtedy to co wiem dzisiaj, to bym się nie ...
Sieci rekurencyjne (RNN)
¶
Inferencja w sieci rekurencyjnej
¶
$$ h_t = g(U h_{t-1} + W x_t) $$
$$ y_t = f(V h_t) $$
Najczęściej
f
to funkcja
softmax
:
$$ \text{softmax}(\mathbf{y})_{i,t} = \frac{e^{y_{i,t}}}{\sum_{j=1}^K e^{y_{j,t}}} $$
Algorytm inferencji
¶
Wsteczna propagacja błędu w sieci rekurencyjnej (BPTT)
¶
Klasyfikacja tokenów przy użyciu RNN
¶
Głębokie sieci rekurencyjne
¶
Sieci dwukierunkowe (BiRNN)
¶
$$ h_t^f = RNN_{forward}(x_1^t) $$
$$ h_t^b = RNN_{backward}(x_t^n) $$
$$ h_t = h_t^f \oplus h_t^b $$
Sieć z długą pamięcią krótkoterminową (LSTM)
¶
informacja rozbita jest na dwie części:
kontekst
stan ukryty
składa się z
bramek
struktura bramki:
feed-forward
funkcja sigmoidalna
iloczyn punktowy
typy bramek:
zapominająca
dodająca
wyjściowa
Struktura komórki LSTM
¶
Bramka zapominająca
¶
definiowana przez dwie macierze: $U_f$, $W_f$
$$ f_t = \sigma(U_f h_{t-1}+W_f x_t) $$
$$ k_t = c_{t-1}\odot f_t $$
Bramka dodająca
¶
definiowana przez cztery macierze: $U_g$, $W_g$, $U_i$, $W_i$
$$ g_t = tanh(U_g h_{t-1} + W_g x_t) $$
$$ i_t = \sigma(U_i h_{t-1} + W_i x_t) $$
$$ j_t = g_t \odot i_t $$
Bramka wyjściowa
¶
definiowana jest przez macierze $U_o$, $W_o$
$$ c_t = k_t + j_t $$
$$ o_t = \sigma(U_o h_{t-1} + W_o x_t) $$
$$ h_t = o_t \odot tanh(c_t) $$
Literatura
¶
9 rozdział SLP
Recurrent Neural Networks and LSTM explained