Próbuję zrozumieć architekturę RNN. Znalazłem ten samouczek, który był bardzo pomocny: http://colah.github.io/posts/2015-08-Understanding-LSTMs/
Jak to pasuje do sieci feed-forward? Czy ten obraz jest po prostu innym węzłem w każdej warstwie?
Próbuję zrozumieć architekturę RNN. Znalazłem ten samouczek, który był bardzo pomocny: http://colah.github.io/posts/2015-08-Understanding-LSTMs/
Jak to pasuje do sieci feed-forward? Czy ten obraz jest po prostu innym węzłem w każdej warstwie?
Odpowiedzi:
A jest w rzeczywistości pełną warstwą. Wyjściem warstwy jest , w rzeczywistości jest wyjściem neuronu, który można podłączyć do warstwy softmax (jeśli chcesz na przykład klasyfikacji dla kroku czasu ) lub jakiejkolwiek innej, takiej jak inna warstwa LSTM, jeśli chcesz głębiej. Wejście tej warstwy odróżnia ją od zwykłej sieci feedforward: pobiera zarówno wejście i pełny stan sieci w poprzednim kroku czasowym (zarówno i inne zmienne z komórki LSTM ).
Zauważ, że jest wektorem. Tak więc, jeśli chcesz dokonać analogii ze zwykłą siecią feedforward z 1 ukrytą warstwą, to A może być uważane za zajmujące miejsce wszystkich tych neuronów w ukrytej warstwie (plus dodatkowa złożoność powtarzającej się części).
Na twoim obrazie A jest pojedynczą ukrytą warstwą z jednym ukrytym neuronem. Od lewej do prawej znajduje się oś czasu, a na dole za każdym razem otrzymujesz dane wejściowe. U góry sieć można dalej rozszerzać, dodając warstwy.
Jeśli rozwiniesz tę sieć w czasie, jak pokazano na zdjęciu (od lewej do prawej, oś czasu jest rozłożona), uzyskasz sieć zwrotną z ukrytymi warstwami T (łączna liczba kroków czasowych), z których każda zawiera pojedynczy węzeł (neuron), jak jest narysowany w środkowym bloku A.
Mam nadzieję, że to odpowiada na twoje pytanie.
Chciałbym wyjaśnić ten prosty schemat w stosunkowo skomplikowanym kontekście: mechanizm uwagi w dekoderze modelu seq2seq.
Na poniższym schemacie blokowym do są przedziałami czasowymi (o tej samej długości co numer wejściowy z PAD dla pustych miejsc). Za każdym razem, gdy słowo jest wstawiane do i-tego (przedziału czasowego) neuronowego LSTM (lub komórki jądra takiej samej jak każda z trzech na twoim obrazie), oblicza i-ty wynik zgodnie z jego poprzednim stanem ((i-1) -ty wynik) i i-ty sygnał wejściowy. Ilustruję twój problem z wykorzystaniem tego, ponieważ wszystkie stany timestep są zapisywane dla mechanizmu uwagi, a nie tylko odrzucane, aby uzyskać ostatni. Jest to tylko jeden neuron i jest postrzegany jako warstwa (wiele warstw może być ułożonych w stos, tworząc na przykład dwukierunkowy koder w niektórych modelach seq2seq w celu wydobycia bardziej abstrakcyjnych informacji z wyższych warstw).
Następnie koduje zdanie (z L wyrazami i każdym z nich przedstawionym jako wektor kształtu: emdding_dimention * 1) na liście L tensorów (każdy z kształtów: num_hidden / num_units * 1). A stan przeszłości do dekodera jest tylko ostatnim wektorem jako osadzenie zdania tego samego kształtu każdego elementu na liście.
Źródło zdjęcia: Mechanizm uwagi