Understanding LSTM Networks

Posted on August 27, 2015

Recurrent Neural Networks

Humani nie zaczynają swojego myślenia od zera w każdej sekundzie. Czytając ten esej, rozumiesz każde słowo na podstawie swojego rozumienia poprzednich słów. Nie wyrzucasz wszystkiego i nie zaczynasz myśleć od nowa. Twoje myśli mają persistence.

Tradycyjne sieci neuronowe nie mogą tego zrobić, i wydaje się, że jest to główna wada. Na przykład, wyobraź sobie, że chcesz sklasyfikować, jaki rodzaj zdarzenia ma miejsce w każdym punkcie filmu. Nie jest jasne, jak tradycyjna sieć neuronowa mogłaby wykorzystać swoje rozumowanie na temat poprzednich wydarzeń w filmie do informowania o późniejszych.

Recurrent sieci neuronowe zajmują się tym problemem. Są to sieci z pętlami, które pozwalają na utrzymywanie się informacji.

Recurrent Neural Networks have loops.

Na powyższym diagramie, fragment sieci neuronowej, patrzy na pewne dane wejściowe \(x_t\) i wyprowadza wartość \(h_t\). Pętla pozwala na przekazywanie informacji z jednego kroku sieci do następnego.

Pętle te sprawiają, że rekurencyjne sieci neuronowe wydają się dość tajemnicze. Jednak, jeśli zastanowić się trochę bardziej, okazuje się, że nie różnią się one aż tak bardzo od zwykłych sieci neuronowych. O rekurencyjnej sieci neuronowej można myśleć jak o wielu kopiach tej samej sieci, z których każda przekazuje wiadomość do następcy. Rozważmy, co się stanie, jeśli rozwiniemy pętlę:

Nierozwijana rekurencyjna sieć neuronowa.

Ta łańcuchowa natura ujawnia, że rekurencyjne sieci neuronowe są ściśle związane z sekwencjami i listami. Są one naturalną architekturą sieci neuronowej do wykorzystania dla takich danych.

I z pewnością są one wykorzystywane! W ciągu ostatnich kilku lat, był niesamowity sukces stosowania RNNs do różnych problemów: rozpoznawanie mowy, modelowanie języka, tłumaczenie, podpisywanie obrazów … Lista idzie dalej. Zostawię dyskusję o niesamowitych wyczynach, które można osiągnąć z RNNs do doskonałego wpisu Andreja Karpathy’ego, The Unreasonable Effectiveness of Recurrent Neural Networks. Ale naprawdę są one dość niesamowite.

Kluczowe dla tych sukcesów jest użycie „LSTM-ów”, bardzo specjalnego rodzaju rekurencyjnej sieci neuronowej, która działa, dla wielu zadań, znacznie lepiej niż standardowa wersja. Prawie wszystkie ekscytujące wyniki oparte na rekurencyjnych sieciach neuronowych są osiągane właśnie za ich pomocą. To właśnie te LSTM-y będą przedmiotem niniejszego eseju.

Problem długoterminowych zależności

Jedną z zalet sieci RNN jest pomysł, że mogą one być w stanie połączyć poprzednie informacje z obecnym zadaniem, tak jak wykorzystanie poprzednich klatek wideo może informować o zrozumieniu obecnej klatki. Jeśli RNN mogłyby to zrobić, byłyby niezwykle użyteczne. Ale czy potrafią? To zależy.

Czasami potrzebujemy tylko spojrzeć na ostatnie informacje, aby wykonać obecne zadanie. Na przykład, rozważ model językowy, który próbuje przewidzieć następne słowo na podstawie poprzednich. Jeśli próbujemy przewidzieć ostatnie słowo w „chmury są na niebie”, nie potrzebujemy żadnego dodatkowego kontekstu – jest całkiem oczywiste, że następnym słowem będzie niebo. W takich przypadkach, gdy luka między istotną informacją a miejscem, w którym jest ona potrzebna, jest niewielka, RNN mogą nauczyć się korzystać z informacji z przeszłości.

Ale są też przypadki, w których potrzebujemy więcej kontekstu. Rozważmy próbę przewidzenia ostatniego słowa w tekście „Wychowałem się we Francji… Mówię płynnie po francusku”. Ostatnie informacje sugerują, że następne słowo jest prawdopodobnie nazwą języka, ale jeśli chcemy zawęzić, który język, potrzebujemy kontekstu Francji, z dalszej przeszłości. Jest całkowicie możliwe, że luka pomiędzy istotną informacją a punktem, w którym jest ona potrzebna, stanie się bardzo duża.

Niestety, gdy ta luka rośnie, RNN stają się niezdolne do nauczenia się łączenia informacji.

W teorii, RNN są absolutnie zdolne do radzenia sobie z takimi „długoterminowymi zależnościami”. Człowiek mógłby starannie dobierać dla nich parametry, aby rozwiązywać zabawkowe problemy tej postaci. Niestety, w praktyce, RNN nie wydają się być w stanie się ich nauczyć. Problem ten został dogłębnie zbadany przez Hochreitera (1991) i Bengio, et al. (1994), którzy znaleźli kilka dość fundamentalnych powodów, dla których może to być trudne.

Na szczęście LSTM nie mają tego problemu!

Sieci LSTM

Sieci o długiej pamięci krótkotrwałej – zwykle nazywane po prostu „LSTM” – są specjalnym rodzajem RNN, zdolnym do uczenia się długoterminowych zależności. Zostały one wprowadzone przez Hochreitera & Schmidhubera (1997), a następnie udoskonalone i spopularyzowane przez wiele osób.1 Działają one niezwykle dobrze w przypadku wielu różnych problemów i są obecnie szeroko stosowane.

Sieci LSTM są wyraźnie zaprojektowane tak, aby uniknąć problemu długoterminowych zależności. Zapamiętywanie informacji przez długi czas jest praktycznie ich domyślnym zachowaniem, a nie czymś, z czym walczą, aby się nauczyć!

Wszystkie rekurencyjne sieci neuronowe mają postać łańcucha powtarzających się modułów sieci neuronowej. W standardowych RNN, ten moduł powtarzający będzie miał bardzo prostą strukturę, taką jak pojedyncza warstwa tanh.

Moduł powtarzający w standardowej RNN zawiera pojedynczą warstwę.

LSTMs również mają ten łańcuch jak struktura, ale moduł powtarzający ma inną strukturę. Zamiast pojedynczej warstwy sieci neuronowej są cztery, oddziałujące ze sobą w bardzo szczególny sposób.

Moduł powtarzający w LSTM zawiera cztery oddziałujące ze sobą warstwy.

Nie martw się o szczegóły tego, co się dzieje. Później przejdziemy przez diagram LSTM krok po kroku. Na razie postarajmy się przyzwyczaić do notacji, której będziemy używać.

W powyższym diagramie każda linia przenosi cały wektor, od wyjścia jednego węzła do wejść innych. Różowe kółka reprezentują operacje punktowe, takie jak dodawanie wektorów, natomiast żółte pola to warstwy uczonej sieci neuronowej. Linie łączące się oznaczają konkatenację, natomiast linia rozwidlająca się oznacza, że jej zawartość jest kopiowana, a kopie trafiają w różne miejsca.

The Core Idea Behind LSTMs

Kluczem do LSTMs jest stan komórki, pozioma linia biegnąca przez górę diagramu.

Stan komórki jest czymś w rodzaju przenośnika taśmowego. Biegnie on prosto w dół całego łańcucha, z niewielkimi interakcjami liniowymi. Bardzo łatwo jest po prostu płynąć wzdłuż niego bez zmian.

LSTM ma możliwość usuwania lub dodawania informacji do stanu komórki, starannie regulowaną przez struktury zwane bramkami.

Bramy są sposobem na opcjonalne przepuszczanie informacji. Składają się one z warstwy sieci neuronowej sigmoidalnej i operacji mnożenia punktowego.

Warstwa sigmoidalna wyprowadza liczby z przedziału od zera do jednego, opisujące jak dużo każdego składnika powinno zostać przepuszczone. Wartość zero oznacza „nie przepuszczaj niczego”, podczas gdy wartość jeden oznacza „przepuszczaj wszystko!”

LSTM ma trzy takie bramki, aby chronić i kontrolować stan komórki.

Przejście krok po kroku przez LSTM

Pierwszym krokiem w naszej LSTM jest decyzja, jakie informacje wyrzucimy ze stanu komórki. Decyzja ta jest podejmowana przez warstwę sigmoidalną zwaną „warstwą bramy zapomnienia”. Patrzy ona na \(h_{t-1}} i \(x_t}), i wypisuje liczbę pomiędzy \(0\) i \(1\) dla każdej liczby w stanie komórki \(C_{t-1}}. Wartość 1 oznacza „całkowicie zachowaj to”, natomiast wartość 0 oznacza „całkowicie pozbądź się tego”. Wróćmy do naszego przykładu modelu językowego, który próbuje przewidzieć następne słowo na podstawie wszystkich poprzednich. W takim problemie stan komórki może zawierać płeć obecnego podmiotu, aby można było użyć właściwych zaimków. Kiedy widzimy nowy podmiot, chcemy zapomnieć płeć starego podmiotu.

Kolejnym krokiem jest decyzja, jakie nowe informacje będziemy przechowywać w stanie komórki. Składa się to z dwóch części. Po pierwsze, warstwa sigmoidalna zwana „warstwą bramek wejściowych” decyduje, które wartości zaktualizujemy. Następnie warstwa tanh tworzy wektor nowych wartości kandydujących, które mogą zostać dodane do stanu. W następnym kroku połączymy te dwie wartości, aby utworzyć aktualizację stanu.

W przykładzie naszego modelu językowego, chcielibyśmy dodać płeć nowego podmiotu do stanu komórki, aby zastąpić starą, o której zapominamy.

Teraz nadszedł czas, aby zaktualizować stary stan komórki, \(C_{t-1}}), do nowego stanu komórki \(C_{t}). W poprzednich krokach zdecydowaliśmy już, co zrobić, musimy to tylko zrobić. Mnożymy stary stan przez \(f_t\), zapominając o rzeczach, o których zdecydowaliśmy się zapomnieć wcześniej. Następnie dodajemy \(i_t* \tilde{C}_t\). To są nowe wartości kandydata, skalowane przez to, jak bardzo zdecydowaliśmy się zaktualizować każdą wartość stanu.

W przypadku modelu językowego, to jest miejsce, w którym faktycznie porzucilibyśmy informacje o płci starego podmiotu i dodali nowe informacje, jak zdecydowaliśmy w poprzednich krokach.

Na koniec, musimy zdecydować, co będziemy wyprowadzać. Wyjście to będzie oparte na stanie naszych komórek, ale będzie to wersja przefiltrowana. Najpierw uruchamiamy warstwę sigmoidalną, która decyduje o tym, jakie części stanu komórek chcemy wypisać. Następnie, przepuszczamy stan komórki przez \(\) (aby przesunąć wartości pomiędzy \ a \) i mnożymy je przez wyjście z bramki sigmoidalnej, tak abyśmy wyprowadzali tylko te części, o których zdecydowaliśmy.

Dla przykładu modelu językowego, ponieważ właśnie zobaczył on podmiot, może chcieć wyprowadzić informacje istotne dla czasownika, na wypadek, gdyby to było to, co będzie następne. Na przykład, może wyprowadzić informację czy podmiot jest w liczbie pojedynczej czy mnogiej, tak abyśmy wiedzieli w jakiej formie powinien być odmieniany czasownik, jeśli to jest to co nastąpi później.

Warianty na temat pamięci długotrwałej krótkotrwałej

To co opisałem do tej pory jest całkiem normalnym LSTM. Ale nie wszystkie LSTMy są takie same jak powyższy. W rzeczywistości, wydaje się, że prawie każda praca dotycząca LSTM używa nieco innej wersji. Różnice są niewielkie, ale warto wspomnieć o niektórych z nich.

Jednym z popularnych wariantów LSTM, wprowadzonym przez Gersa & Schmidhubera (2000), jest dodanie „połączeń peephole.” Oznacza to, że pozwalamy warstwom bramek patrzeć na stan komórki.

Powyższy diagram dodaje peepholes do wszystkich bramek, ale wiele prac da niektóre peepholes, a inne nie.

Innym wariantem jest użycie sprzężonych bramek zapominania i wejściowych. Zamiast osobno decydować, co zapomnieć i do czego dodać nowe informacje, podejmujemy te decyzje razem. Zapominamy tylko wtedy, gdy mamy zamiar wprowadzić coś w jego miejsce. Nowe wartości wprowadzamy do stanu tylko wtedy, gdy zapomnimy coś starszego.

Nieco bardziej dramatyczną wariacją na temat LSTM jest Gated Recurrent Unit, czyli GRU, wprowadzona przez Cho, et al. (2014). Łączy ona bramki zapomnienia i wejściowe w pojedynczą „bramkę aktualizacji”. Łączy również stan komórki i stan ukryty oraz wprowadza kilka innych zmian. Model wynikowy jest prostszy niż standardowe modele LSTM i staje się coraz bardziej popularny.

To tylko kilka z najbardziej godnych uwagi wariantów LSTM. Istnieje wiele innych, takich jak Depth Gated RNNs autorstwa Yao, et al. (2015). Jest też jakieś zupełnie inne podejście do radzenia sobie z zależnościami długoterminowymi, jak Clockwork RNNs autorstwa Koutnik, et al. (2014).

Który z tych wariantów jest najlepszy? Czy różnice mają znaczenie? Greff, et al. (2015) robią ładne porównanie popularnych wariantów, stwierdzając, że wszystkie są mniej więcej takie same. Jozefowicz, et al. (2015) przetestowali ponad dziesięć tysięcy architektur RNN, znajdując kilka, które działały lepiej niż LSTM w niektórych zadaniach.

Wnioski

Wcześniej wspomniałem o niezwykłych wynikach, jakie ludzie osiągają dzięki RNN. Zasadniczo wszystkie z nich są osiągane przy użyciu LSTM. Naprawdę działają one o wiele lepiej dla większości zadań!

Zapisane jako zestaw równań, LSTMy wyglądają dość przerażająco. Mam nadzieję, że przejście przez nie krok po kroku w tym eseju uczyniło je nieco bardziej przystępnymi.

LSTMy były dużym krokiem w tym, co możemy osiągnąć z RNNami. Naturalnie można się zastanawiać: czy istnieje kolejny duży krok? Powszechną opinią wśród badaczy jest: „Tak, jest następny krok i jest to uwaga!”. Pomysł polega na tym, aby pozwolić każdemu krokowi RNN wybrać informacje do przejrzenia z jakiegoś większego zbioru informacji. Na przykład, jeśli używasz RNN do tworzenia podpisu opisującego obraz, może ona wybrać część obrazu, aby spojrzeć na każde słowo, które wypisuje. W rzeczywistości, Xu, et al. (2015) robią dokładnie to – może to być zabawny punkt wyjścia, jeśli chcesz zbadać uwagę! Było kilka naprawdę ekscytujących wyników z wykorzystaniem uwagi i wydaje się, że wiele innych jest tuż za rogiem…

Uwaga nie jest jedynym ekscytującym wątkiem w badaniach nad RNN. Na przykład, Grid LSTMs autorstwa Kalchbrennera, et al. (2015) wydają się niezwykle obiecujące. Prace wykorzystujące RNN w modelach generatywnych – takie jak Gregor, et al. (2015), Chung, et al. (2015), czy Bayer & Osendorfer (2015) – również wydają się bardzo interesujące. Ostatnie kilka lat było ekscytującym okresem dla rekurencyjnych sieci neuronowych, a nadchodzące zapowiadają się jeszcze lepiej!

Podziękowania

Jestem wdzięczny wielu osobom za pomoc w lepszym zrozumieniu LSTM-ów, komentowanie wizualizacji i dostarczanie informacji zwrotnych na temat tego postu.

Jestem bardzo wdzięczny moim kolegom z Google za ich pomocne uwagi, zwłaszcza Oriolowi Vinyalsowi, Gregowi Corrado, Jonowi Shlensowi, Luke’owi Vilnisowi i Ilyi Sutskeverowi. Jestem również wdzięczny wielu innym przyjaciołom i kolegom za poświęcenie czasu, by mi pomóc, w tym Dario Amodei i Jacobowi Steinhardtowi. Jestem szczególnie wdzięczny Kyunghyun Cho za niezwykle przemyślaną korespondencję na temat moich diagramów.

Przed tym wpisem, ćwiczyłem wyjaśnianie LSTM podczas dwóch serii seminariów, które prowadziłem na temat sieci neuronowych. Dziękuję wszystkim, którzy w nich uczestniczyli, za cierpliwość do mnie i za ich opinie.

  1. Oprócz oryginalnych autorów, wiele osób przyczyniło się do powstania nowoczesnych LSTM. Niepełna lista to: Felix Gers, Fred Cummins, Santiago Fernandez, Justin Bayer, Daan Wierstra, Julian Togelius, Faustino Gomez, Matteo Gagliolo i Alex Graves.

Więcej postów

Attention and Augmented Recurrent Neural Networks

On Distill

Conv Nets

A Modular Perspective

Neural Networks, Manifolds, and Topology

Deep Learning, NLP, and Representations


.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.