Chcę omówić niektóre intuicje wysokiego poziomu stojące za sieciami LSTM. Oto kilka pytań, które pomogą zgłębić aspekty dlaczego:
- Dlaczego/kiedy mielibyśmy używać LSTM zamiast sieci neuronowej typu feed forward (FFNN)?
- Jakie są wady i zalety LSTM i jak wypadają w porównaniu z FFNN?
- Jak różnią się od tradycyjnych rekurencyjnych sieci neuronowych (RNN)?
Feed Forward Neural Networks (FFNN)
Rozważmy najpierw standardową sieć FFNN o architekturze:
Jak zapewne wiesz, ta FFNN przyjmuje trzy dane wejściowe, przetwarza je za pomocą warstwy ukrytej i produkuje dwa dane wyjściowe. Możemy rozszerzyć tę architekturę, aby włączyć więcej ukrytych warstw, ale podstawowa koncepcja nadal obowiązuje: wejścia przychodzą, są przetwarzane w jednym kierunku i są wyprowadzane na końcu.
Ta koncepcja jest bardzo dobrze wyjaśniona w innych artykułach, więc nie będę wchodził w szczegóły. Podstawowym warunkiem, który oddziela FFNN od architektur rekurencyjnych, jest to, że wejścia do neuronu muszą pochodzić z warstwy przed tym neuronem.
FFNN Wikipedia
Recurrent Neural Networks (RNN)
Recurrent neural networks są matematycznie dość podobne do modeli FFNN. Ich główną różnicą jest to, że ograniczenie nałożone na FFNN nie jest już stosowane:
Wejścia do neuronu mogą pochodzić z dowolnej innej warstwy.
Zobaczysz często, że ta architektura jest często „zwijana” w jednostkę rekurencyjną, taką jak poniższa:
„Zwinięte” jednostki, które możesz zobaczyć na diagramach architektury, mogą być zatem zwodniczo małe. Kiedy je rozwiniesz, sieć często będzie dość głęboka!
RNN Wikipedia
Long-Short Term Memory (LSTM)
LSTMs są specjalnym typem RNN, które zostały zaprojektowane, aby rozwiązać problem znikającego/wybuchającego gradientu.
Kiedy trenujesz tradycyjną RNN, sieć często cierpi z powodu znikających/wybuchających gradientów: rozwinięcie jednostki rekurencyjnej skutkuje bardzo głęboką siecią! Jeśli przejdziesz przez algorytm wstecznej propagacji używając tradycyjnej architektury RNN, wcześniejsze warstwy będą stawały się coraz mniej znaczące w miarę propagacji w sieci. To sprawia, że tradycyjne RNN są podatne na zapominanie informacji, w szczególności danych, które pojawiają się wiele kroków czasowych przed bieżącym czasem.
Przykładowa komórka LSTM jest zilustrowana w następujący sposób:
Ta struktura jest podobna do tradycyjnej rozwiniętej jednostki RNN, ale kluczową różnicą w przypadku LSTM są bramki: bramka wejściowa, bramka wyjściowa i bramka zapominania. Funkcje tych bramek są dobrze opisane przez ich nazwy:
- bramka wejściowa kontroluje dane, które wchodzą do komórki
- bramka zapomnienia kontroluje stopień, w jakim dane pozostają w komórce
- bramka wyjściowa kontroluje wyjście komórki poprzez funkcję aktywacji
Ten post na githubie IO jest świetnym wprowadzeniem do podstaw LSTM. Wykonuje on również niesamowitą pracę wyjaśniając intuicję stojącą za matematyką LSTM.
LSTM Wikipedia
Właściwości i przykładowy przypadek użycia RNN
Pętle sprzężenia zwrotnego nadają rekurencyjnym sieciom neuronowym lepszą odporność na wyzwania czasowe. Czas jest uwzględniony w ich architekturze!
Poznajmy przykład:
Może używasz sieci do przewidywania następnego słowa w zdaniu. Powiedzmy, że otrzymujemy dane wejściowe:
Głodująca Alicja jedzie do najbliższego sklepu, aby kupić
Rekursywna sieć neuronowa może zapomnieć pierwsze słowo „głodować”, podczas gdy LSTM będzie je idealnie propagować. LSTM użyłaby zatem kontekstu, który słyszała wcześniej w zdaniu, aby odgadnąć „jedzenie”, podczas gdy RNN mogłaby odgadnąć cokolwiek, co jest kupowane w sklepie, szczególnie biorąc pod uwagę długie zdanie lub wiele zdań.
Mechanizmy bramkowania, które pozwalają na ten rodzaj pamięci są dobrze wyjaśnione przez @StatsSorceress tutaj: Forget Layer in a Recurrent Neural Network (RNN) –
RNs są zaprojektowane do obsługi sekwencji. Można to wykorzystać do analizy wideo (sekwencje obrazów), pisania/mowy (sekwencje słów), itp.
LSTM są zaprojektowane tak, aby ważne informacje utrzymywały się w czasie. RNN będą często „zapominać” w czasie.
FFNNs są systemami bez pamięci; po przetworzeniu pewnych danych wejściowych, zapominają wszystko o tych danych. Powiedzmy, na przykład, że trenujemy FFNN, która przyjmuje 5 słów jako dane wejściowe i przewiduje następne wyjście. Model ten otrzymałby wtedy dane wejściowe z powyższego przykładu:
najbliższy sklep, w którym można kupić .
Jest to wyraźna utrata kontekstu i otrzymalibyśmy słaby wynik.
Teraz możesz zapytać, co by było, gdybyśmy stworzyli FFNN, która przyjmowałaby wiele danych wejściowych, tak aby zawierała słowo „głodowanie” w swoich danych wejściowych? Innymi słowy, czy nie moglibyśmy zwiększyć liczby wejść do FFNN, aby wystarczająco reprezentować wcześniejsze dane?
Odpowiedź brzmi tak, ale ta metoda jest zarówno nieefektywna, jak i często niepraktyczna. Powiedzmy, na przykład, że musimy zapamiętać kontekst całego akapitu wstecz. Potrzebowalibyśmy bardzo dużej sieci FFNN! Ponadto, skąd mamy wiedzieć ile słów wstecz chcemy mieć jako kontekst? Czy 20 będzie wystarczające? 30? 100? Architektura LSTM całkowicie eliminuje te problemy, pozwalając sieci zarządzać pamięcią przejściową. Problem ten jest zaostrzony przez wyzwania związane z przetwarzaniem wideo, ponieważ każda klatka będzie wymagała znacznie więcej danych wejściowych niż zadania NLP.
Zauważ jednak, że jednostki LSTM są z natury bardziej złożone obliczeniowo niż jednostki FFNN, więc ich trening jest często trudniejszy i zajmuje więcej czasu. Pomimo tych wad, ich sukces w wyzwaniach związanych z danymi temporalnymi wyraźnie uzasadnia ich użycie zamiast FFNN.
.