Zapomnij o warstwie w rekurencyjnej sieci neuronowej (RNN) -


13

Próbuję obliczyć wymiary każdej zmiennej w RNN w warstwie zapomnienia, jednak nie jestem pewien, czy jestem na dobrej drodze. Następne zdjęcie i równanie pochodzi z postu na blogu Colah „Understanding LSTM Networks” :

wprowadź opis zdjęcia tutaj

gdzie:

  • oznacza wielkośćwektora m 1xtm1
  • jest ukrytym stanem rozmiaru n 1 wektorht1n1
  • jest konkatenacją (na przykład, jeśli x t = [ 1 , 2 , 3 ] , h t - 1 = [ 4 , 5 , 6 ] , to [ x t , h t - 1 ] = [ 1 , 2 , 3 , 4 , 5 , 6 ] )[xt,ht1]xt=[1,2,3],ht1=[4,5,6][xt,ht1]=[1,2,3,4,5,6]
  • jest wagamimacierzywielkości k ( m + n ) , gdzie k jest liczbą stanów komórek (jeśli m = 3 , a n = 3 w powyższym przykładzie, a jeśli mamy 3 stany komórek, to w f = Matryca 3 3 )wfk(m+n)km=3n=3wf=33
  • jest nastawieniemwektorawielkości k 1 , gdzie k jest liczbą stanów komórek (ponieważ k = 3 jak w powyższym przykładzie, to b f jest wektorem 3 1 ).bfk1kk=3bf31

Jeśli ustawimy na: [ 1 2 3 4 5 6 5 6 7 8 9 10 3 4 5 6 7 8 ]wf

[1234565678910345678]

I to: [ 1 , 2 , 3 ]bf[1,2,3]

Następnie Wf.[ht1,xt]=

[1234565678910345678].[123456]=[91175133]

Następnie możemy dodać odchylenie, Wf.[ht1,xt]+bf=

[91175133]+[123]=[92177136]

11+exx=[92177136]

[111]

Ct1k=3

Czy powyższe założenie jest prawidłowe?

Oznacza to również, że liczba stanu komórki i stanu ukrytego jest taka sama?

Odpowiedzi:


14

Świetne pytanie!

tl; dr: Stan komórki i stan ukryty to dwie różne rzeczy, ale stan ukryty zależy od stanu komórki i faktycznie mają ten sam rozmiar.

Dłuższe wyjaśnienie

Różnicę między nimi widać na poniższym schemacie (część tego samego bloga):

Stan komórki to pogrubiona linia biegnąca z zachodu na wschód przez szczyt.

Stan komórki to pogrubiona linia biegnąca z zachodu na wschód przez szczyt. Cały zielony blok nazywa się „komórką”.

Stan ukryty z poprzedniego kroku czasowego jest traktowany jako część danych wejściowych w bieżącym kroku czasowym.

Jednak nieco trudniej jest dostrzec zależność między nimi bez wykonania pełnego przewodnika. Zrobię to tutaj, aby zapewnić inną perspektywę, ale blog jest pod dużym wpływem. Moja notacja będzie taka sama i wykorzystam obrazy z bloga w moim objaśnieniu.

Lubię kolejność operacji nieco inaczej niż na blogu. Osobiście, na przykład zaczynając od bramki wejściowej. Przedstawię ten punkt widzenia poniżej, ale pamiętaj, że blog może być najlepszym sposobem na skonfigurowanie LSTM obliczeniowo, a to wyjaśnienie jest czysto koncepcyjne.

Oto co się dzieje:

Brama wejściowa

wprowadź opis zdjęcia tutaj

txtht1

xt=[1,2,3]ht=[4,5,6]

xtht1[1,2,3,4,5,6]

WiWi[xt,ht1]+biWibi

Załóżmy, że przechodzimy od sześciowymiarowego wejścia (długość skonkatenowanego wektora wejściowego) do trójwymiarowej decyzji o tym, które stany zaktualizować. Oznacza to, że potrzebujemy macierzy wagowej 3x6 i wektora odchylenia 3x1. Podajmy te wartości:

Wi=[111111222222333333]

bi=[111]

Obliczenia będą następujące:

[111111222222333333][123456]+[111]=[224262]

it=σ(Wi[xt,ht1]+bi)

σ(x)=11+exp(x)x

σ([224262])=[11+exp(22),11+exp(42),11+exp(62)]=[1,1,1]

W języku angielskim oznacza to, że zaktualizujemy wszystkie nasze stany.

Brama wejściowa ma drugą część:

Ct~=tanh(WC[xt,ht1]+bC)

Celem tej części jest obliczenie, w jaki sposób zaktualizowalibyśmy stan, gdybyśmy to zrobili. Jest to wkład z nowego wejścia w tym kroku czasowym do stanu komórki. Obliczenia odbywają się zgodnie z tą samą procedurą zilustrowaną powyżej, ale z jednostką tanh zamiast jednostki sigmoid.

Ct~it

itCt~

Potem przychodzi brama zapomnienia, która była sednem twojego pytania.

Brama zapomnienia

wprowadź opis zdjęcia tutaj

Celem bramki zapomnienia jest usunięcie wcześniej wyuczonych informacji, które nie są już istotne. Przykład podany na blogu jest oparty na języku, ale możemy również pomyśleć o przesuwanym oknie. Jeśli modelujesz szeregi czasowe, które są naturalnie reprezentowane przez liczby całkowite, takie jak liczba zakaźnych osobników w danym obszarze podczas wybuchu choroby, być może po wygaśnięciu choroby w danym obszarze nie będziesz już dłużej zastanawiać się nad tym obszarem, gdy myśląc o następnej chorobie.

Podobnie jak warstwa wejściowa, warstwa zapomnienia przyjmuje stan ukryty z poprzedniego kroku czasu i nowe wejście z bieżącego kroku czasu i łączy je. Chodzi o to, aby zdecydować stochastycznie, o czym zapomnieć i o czym pamiętać. W poprzednim obliczeniu pokazałem wyjście warstwy sigmoidalnej wszystkich 1, ale w rzeczywistości było bliżej 0,999 i zaokrągliłem w górę.

Obliczenia przypominają to, co zrobiliśmy w warstwie wejściowej:

ft=σ(Wf[xt,ht1]+bf)

To da nam wektor wielkości 3 o wartościach od 0 do 1. Udawajmy, że dał nam:

[0.5,0.8,0.9]

Następnie decydujemy stochastycznie na podstawie tych wartości, które z tych trzech części informacji należy zapomnieć. Jednym ze sposobów jest wygenerowanie liczby z jednolitego rozkładu (0, 1) i jeśli liczba ta jest mniejsza niż prawdopodobieństwo „włączenia” jednostki (0,5, 0,8 i 0,9 dla jednostek 1, 2 i 3 odpowiednio), a następnie włączamy tę jednostkę. W takim przypadku oznaczałoby to, że zapominamy o tych informacjach.

Szybka uwaga: warstwa wejściowa i warstwa zapomnienia są niezależne. Gdybym był zakładem bukmacherskim, postawiłbym się, że to dobre miejsce do równoległości.

Aktualizacja stanu komórki

wprowadź opis zdjęcia tutaj

Teraz mamy wszystko, czego potrzebujemy, aby zaktualizować stan komórki. Pobieramy kombinację informacji z danych wejściowych i bramek zapomnienia:

Ct=ftCt1+itCt~

Na bok: produkt Hadamard

x1=[1,2,3]x2=[3,2,1]

x1x2=[(13),(22),(31)]=[3,4,3]

Koniec na bok.

W ten sposób łączymy to, co chcemy dodać do stanu komórki (dane wejściowe) z tym, co chcemy usunąć ze stanu komórki (zapomnieć). Wynikiem jest nowy stan komórki.

Bramka wyjściowa

wprowadź opis zdjęcia tutaj

To da nam nowy ukryty stan. Zasadniczo celem bramki wyjściowej jest zdecydowanie, jakie informacje chcemy uwzględnić w następnej części modelu przy aktualizacji kolejnego stanu komórki. Przykładem na blogu jest znowu język: jeśli rzeczownik jest w liczbie mnogiej, odmienianie czasownika w następnym kroku ulegnie zmianie. W modelu chorobowym, jeśli wrażliwość osobników na danym obszarze jest inna niż na innym obszarze, prawdopodobieństwo wystąpienia infekcji może się zmienić.

Warstwa wyjściowa ponownie przyjmuje te same dane wejściowe, ale następnie uwzględnia zaktualizowany stan komórki:

ot=σ(Wo[xt,ht1]+bo)

Ponownie daje to nam wektor prawdopodobieństwa. Następnie obliczamy:

ht=ottanh(Ct)

Zatem bieżący stan komórki i bramka wyjściowa muszą uzgodnić, co wyprowadzić.

tanh(Ct)[0,1,1]ot[0,0,1][0,0,1]

htyt=σ(Wht)

ht

Istnieje wiele wariantów LSTM, ale obejmuje to najważniejsze!


Dzięki za odpowiedź! Mam jedno dodatkowe pytanie, czy nie masz nic przeciwko. Głęboka sieć neuronowa może być głęboka, ponieważ pochodną ReLU jest 1 (jeśli wynik jest większy niż 0). Czy to samo dotyczy również tej komórki? Nie jestem pewien, jak Tanh i Sigmoid mogą mieć stałą pochodną 1?
user1157751

Cała przyjemność po mojej stronie! Sieć neuronowa jest uważana za „głęboką”, jeśli ma więcej niż jedną ukrytą warstwę. Pochodne funkcji aktywacyjnych (tanh, sigmoid, ReLU) wpływają na sposób szkolenia sieci. Jak mówisz, ponieważ ReLU ma stały spadek, jeśli jego wejście jest większe niż 0, jego pochodna wynosi 1, jeśli znajdujemy się w tym obszarze funkcji. Jednostki Tanh i sigmoidowe mają pochodną bliską 1, jeśli jesteśmy w środku regionu aktywacji, ale ich pochodna nie będzie stała. Może powinienem
napisać

Czy możesz podać przykład ich pochodnej blisko 1 w regionie aktywacyjnym? Widziałem wiele zasobów, które mówią o pochodnej, ale nie ma matematyki?
user1157751

Dobry pomysł, ale zajmie mi trochę czasu napisanie odpowiedniego postu na ten temat. Tymczasem pomyśl o kształcie funkcji tanh - jest to wydłużone „S”. W środku znajduje się najwyższa pochodna. Gdy S jest płaskie (ogony S), pochodna wynosi 0. Widziałem jedno źródło, w którym sigmoidy mają maksymalną pochodną 0,25, ale nie mam równoważnego związku dla tanh.
StatsSressress

Część, której nie rozumiem, jest inna niż ReLU ze stałą 1 pochodną, ​​gdzie x> 0, ale sigmoid i tanh miały zmienną wartość dla obu jej pochodnych. Jak może to być „stałe”?
user1157751
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.