Jaka intuicja kryje się za rekurencyjną siecią neuronową Long Short Term Memory (LSTM)?

11

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:o1,o2,,onoiNoi+1oihi

oi,hi=F(oi1,hi1)

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.F

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:ci

ci+1=ω1(oi,hi)ci+ω2(oi,hi)cint(oi,hi),

gdzie funkcje , i są modelowane przez sieci neuronowe. Aby uprościć wyrażenie, po prostu usuwam argumenty:ω1ω2cint

ci+1=ω1ci+ω2cint

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.cici1cint

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”ω2ω1ω1wektor). Właściwie dokładniej byłoby powiedzieć, że z dwoma wektorami wag ( i ) „miksujemy” starą i nową pamięć.ω1ω2

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:oihihint

hi+1=hintS(ci+1),

gdzie jest funkcją sigmoidalną stosowaną do każdego komponentu wektora stanu komórki.S

Moje pytanie brzmi: dlaczego (lub jak dokładnie) ta architektura rozwiązuje problem?

W szczególności nie rozumiem co następuje:

  1. 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ęć?
  2. 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”).

rzymski
źródło
1
Wydaje się, że rozumiesz LSTM lepiej ode mnie, więc nie opublikuję rzeczywistej odpowiedzi, ponieważ może nie być to, czego szukasz: bramki LSTM (głównie bramki zapomnienia) pozwalają zachować tak długo aktywacje i gradienty jako niezbędne. Tak więc informacje w czasie t mogą być dostępne do czasu t + n, dla dowolnie dużego n.
rcpinto
@ rcpinto, myślę również, że główną ideą proponowanej „architektury” jest umożliwienie przechowywania informacji przez długi czas (wiele kroków czasowych). Ale nie rozumiem, co dokładnie umożliwia. Dwie sieci bramkowe („zachowaj” i „zapis”) mogą się dowiedzieć, że wagi utrzymujące powinny być duże, a wagi zapisujące małe (wtedy przechowujemy pamięć przez długi czas). Ale czy nie można tego osiągnąć tylko przez jedną sieć? Czy sieć neuronowa (która przyjmuje stan ukryty (pamięć) i stan obserwowalny jako dane wejściowe) nie może nauczyć się, że stan ukryty powinien być utrzymywany bez zmian?
Rzym.
Rzeczywiście, po prostu ustaw powtarzającą się macierz wagi na tożsamość i zawsze zachowa ostatnią aktywację. Problem jest zawsze częścią, co oznacza, że ​​nowe dane będą się gromadzić i szybko nasycać aktywację neuronów, co jest również rodzajem zapominania. Dlatego kluczowa jest możliwość usunięcia poprzedniej pamięci lub zablokowania tworzenia nowych wspomnień.
rcpinto
@ rcpinto, ale czy nie można osiągnąć „możliwości wymazania poprzedniej pamięci lub zablokowania tworzenia nowej” w ramach jednej sieci neuronowej? Sieć neuronowa pobiera na wejściu wektor pamięci (lub ukryty wektor stanu) i obserwowany wektor stanu. Czy taka sieć nie może „zdecydować” o zachowaniu lub zastąpieniu niektórych składników stanu ukrytego (jego pamięci) na podstawie wartości składników w obserwowanym wektorze stanu?
Rzym.
LSTM mogą to zrobić, ponieważ bramki otwierają się lub zamykają zgodnie z bieżącym wejściem i stanem. Nie ma takiej koncepcji w prostych RNN. W takim przypadku sam stan zawsze reaguje na dane wejściowe / stan bezpośrednio i natychmiast, uniemożliwiając mu „wybranie”, czy zapisać nowe informacje. Ponadto nie ma mechanizmu kasowania pewnej przechowywanej pamięci, zawsze będzie się ona kumulować zgodnie z wagami wejściowymi do neuronu, a wagi te nie mogą się zmienić po treningu. Ponieważ bramki LSTM są multiplikatywne, symulują zmianę masy podczas wnioskowania, reagując na aktualny stan wejścia / stanu.
rcpinto

Odpowiedzi:

1

Jak rozumiem twoje pytania, to, co widzisz, zasadniczo łączy dane wejściowe, poprzedni stan ukryty i poprzedni stan komórki i przekazuje je przez jedną lub kilka w pełni połączonych warstw w celu obliczenia wyjściowego stanu ukrytego i stanu komórki, zamiast niezależnego obliczania „bramkowanego” „aktualizacje, które współdziałają arytmetycznie ze stanem komórki. To w zasadzie stworzyłoby zwykły RNN, który generowałby tylko część stanu ukrytego.

Głównym powodem, aby tego nie robić, jest to, że struktura obliczeń stanu komórki LSTM zapewnia stały przepływ błędów przez długie sekwencje . Jeśli używałeś ciężarów do bezpośredniego obliczenia stanu komórki, będziesz musiał ponownie się z nimi propagować na każdym kroku! Unikanie takich operacji w dużej mierze rozwiązuje zanikanie / eksplodowanie gradientów, które w przeciwnym razie nękają RNN.

Dodatkowo, możliwość łatwego przechowywania informacji w dłuższym okresie czasu jest miłym dodatkiem. Intuicyjnie byłoby znacznie trudniej dla sieci uczyć się od zera, aby zachować stan komórki przez dłuższy czas.

Warto zauważyć, że najpopularniejsza alternatywa dla LSTM, GRU , podobnie oblicza aktualizacje stanu ukrytego bez uczenia się wag, które działają bezpośrednio na sam stan ukryty.

Gianni
źródło
0

Jeśli dobrze zrozumiałem, oba pytania sprowadzają się do tego. Dwa miejsca, w których do przetwarzania informacji używamy zarówno tanh, jak i sigmoid. Zamiast tego powinniśmy użyć jednej sieci neuronowej, która pobiera wszystkie informacje.

Nie znam wad korzystania z jednej sieci neuronowej. Moim zdaniem możemy użyć pojedynczej sieci neuronowej o nieliniowości sigmoidalnej, która prawidłowo uczy się wektora, który zostanie odpowiednio zastosowany (dodany w stanie komórkowym w pierwszym przypadku lub przekazany jako stan ukryty w drugim przypadku).

Jednak w sposób, w jaki to robimy teraz, dzielimy to zadanie na dwie części, z których jedna wykorzystuje nieliniowość sigmoidalną do ustalenia ilości danych, które należy przechowywać. Drugą częścią, która wykorzystuje tanh jako nieliniowość, jest po prostu zadanie uczenia się ważnych informacji.

Mówiąc najprościej, sigmoid uczy się, ile oszczędzać, a tanh uczy się, co oszczędzać, a rozbicie go na dwie części ułatwi trening.

uczeń
źródło