Idea Recurrent Neural Network (RNN) jest dla mnie jasna. Rozumiem to w następujący sposób:
Mamy sekwencję obserwacji ( ) (lub innymi słowy, wielowymiarowe szeregi czasowe). Każda pojedyncza obserwacja jest wymiarową wektor numeryczne. W modelu RNN zakładamy, że następna obserwacja jest funkcją wcześniejszej obserwacji a także poprzedniego „stanu ukrytego” , gdzie stany ukryte są również reprezentowane przez numeryczne wektory (wymiary stanów obserwowanych i ukrytych mogą być różne). Zakłada się również, że same stany ukryte zależą od poprzedniej obserwacji i stanu ukrytego:
Wreszcie w modelu RNN zakłada się , że funkcja jest siecią neuronową. Trenujemy (dopasowujemy) sieć neuronową, wykorzystując dostępne dane (sekwencja obserwacji). Naszym celem w treningu jest możliwość jak najdokładniejszego przewidzenia następnej obserwacji przy użyciu poprzednich obserwacji.
Teraz sieć LSTM jest modyfikacją sieci RNN. O ile rozumiem, motywacją stojącą za LSTM jest rozwiązanie problemu krótkiej pamięci charakterystycznej dla RNN (konwencjonalne RNN mają problemy z powiązaniem zdarzeń, które są zbyt daleko od siebie oddzielone w czasie).
Rozumiem, jak działają sieci LSTM. Oto najlepsze wyjaśnienie LSTM , które znalazłem. Podstawowa idea jest następująca:
Oprócz wektora stanu ukrytego wprowadzamy tak zwany wektor „stanu komórki”, który ma ten sam rozmiar (wymiarowość) co wektor stanu ukrytego ( ). Myślę, że wektor „stanu komórki” został wprowadzony do modelowania pamięci długoterminowej. Podobnie jak w przypadku konwencjonalnego RNN, sieć LSTM otrzymuje na wejściu obserwowany i ukryty stan. Korzystając z tych danych wejściowych, obliczamy nowy „stan komórki” w następujący sposób:
gdzie funkcje , i są modelowane przez sieci neuronowe. Aby uprościć wyrażenie, po prostu usuwam argumenty:
Widzimy więc, że nowy „wektor stanu komórki” ( ) jest sumą ważoną starego wektora stanu ( ) i „pośredniego” wektora stanu komórki ( ). Mnożenie między wektorami odbywa się w oparciu o komponenty (mnożymy dwa N-wymiarowe wektory i otrzymujemy w rezultacie inny N-wymiarowy wektor). Innymi słowy, mieszamy dwa wektory stanów komórek (stary i pośredni), stosując wagi właściwe dla składników.
Oto intuicja między opisanymi operacjami. Wektor stanu komórki można interpretować jako wektor pamięci. Drugi wektor wag (obliczony przez sieć neuronową) jest bramą „zachowaj” (lub zapomnij). Jego wartości decydują, czy zachować, czy zapomnieć (usunąć) odpowiednią wartość z wektora stanu komórki (lub wektora pamięci długoterminowej). Pierwszy wektor wag ( ), który jest obliczany przez inną sieć neuronową, nazywa się bramką „zapisz” lub „zapamiętaj”. Decyduje, czy nowa pamięć („pośredni” wektor stanu komórki) musi zostać zapisana (a ściślej, czy konkretny jej element musi zostać zapisany / zapisany). „Pośredni”wektor). Właściwie dokładniej byłoby powiedzieć, że z dwoma wektorami wag ( i ) „miksujemy” starą i nową pamięć.
Po opisanym powyżej mieszaniu (lub zapominaniu i zapamiętywaniu) mamy nowy wektor stanu komórki. Następnie obliczamy „pośredni” stan ukryty za pomocą innej sieci neuronowej (jak poprzednio, jako dane wejściowe używamy stanu obserwowanego i stanu ukrytego ). Na koniec łączymy nowy stan komórki (pamięć) ze „pośrednim” stanem ukrytym ( ), aby uzyskać nowy (lub „końcowy”) stan ukryty, który faktycznie wyprowadzamy:
gdzie jest funkcją sigmoidalną stosowaną do każdego komponentu wektora stanu komórki.
Moje pytanie brzmi: dlaczego (lub jak dokładnie) ta architektura rozwiązuje problem?
W szczególności nie rozumiem co następuje:
- Używamy sieci neuronowej do generowania pamięci „pośredniej” (wektor stanu komórki), która jest mieszana ze „starą” pamięcią (lub stanem komórki), aby uzyskać „nową” pamięć (stan komórki). Współczynniki ważenia dla mieszania są również obliczane przez sieci neuronowe. Ale dlaczego nie możemy użyć tylko jednej sieci neuronowej do obliczenia „nowego” stanu komórki (lub pamięci). Innymi słowy, dlaczego nie możemy wykorzystać stanu obserwowanego, stanu ukrytego i starej pamięci jako danych wejściowych do sieci neuronowej, która oblicza „nową” pamięć?
- Na koniec używamy stanów obserwowanych i ukrytych do obliczenia nowego stanu ukrytego, a następnie używamy „nowego” stanu komórki (lub (długoterminowej) pamięci) do korygowania składnika nowo obliczonego stanu ukrytego. Innymi słowy, składniki stanu komórki są używane tak samo jak wagi, które po prostu zmniejszają odpowiednie składniki obliczonego stanu ukrytego. Ale dlaczego wektor stanu komórki jest używany w ten właśnie sposób? Dlaczego nie możemy obliczyć nowego stanu ukrytego poprzez umieszczenie wektora stanu komórki (pamięci długoterminowej) na wejściu sieci neuronowej (która również przyjmuje dane obserwowane i ukryte jako dane wejściowe)?
Dodany:
Oto wideo, które może pomóc wyjaśnić, w jaki sposób zorganizowane są różne bramki („zachowaj”, „napisz” i „przeczytaj”).