Przez jakiś czas studiowałem LSTM. Rozumiem na wysokim poziomie, jak wszystko działa. Jednak zamierzając je zaimplementować za pomocą Tensorflow, zauważyłem, że BasicLSTMCell wymaga szeregunum_units
parametrów (tj. ) Parametrów.
Z tego bardzo dokładnego wyjaśnienia LSTM wynika, że jedna jednostka LSTM jest jedną z poniższych
który w rzeczywistości jest jednostką GRU.
Zakładam, że parametr num_units
z BasicLSTMCell
odnosi się do tego, jak wiele z nich chcemy podłączyć się do siebie w warstwie.
Pozostaje pytanie - czym jest „komórka” w tym kontekście? Czy „komórka” jest równoważna warstwie w normalnej sieci neuronowej ze sprzężeniem zwrotnym?
Odpowiedzi:
Terminologia jest niestety niespójna.ht
num_units
w TensorFlow jest liczba stanów ukrytych, tj. wymiar w podanych równaniach.Ponadto z https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/api_docs/python/functions_and_classes/shard9/tf.nn.rnn_cell.RNNCell.md :
„Warstwa LSTM” jest prawdopodobnie bardziej wyraźna, przykład :
źródło
num_unit
poziomy poziomy zestaw połączonych ze sobą komórek LSTM. Ma sens. Czy więc byłoby to analogiczne do ukrytej warstwy w standardowej sieci feed-forward?Większość diagramów LSTM / RNN pokazuje tylko ukryte komórki, ale nigdy ich jednostki. Stąd zamieszanie. Każda ukryta warstwa ma ukryte komórki, tyle ile kroków czasowych. Co więcej, każda ukryta komórka składa się z wielu ukrytych jednostek, jak na poniższym schemacie. Dlatego wymiarowość macierzy ukrytej warstwy w RNN wynosi (liczba kroków czasowych, liczba ukrytych jednostek).
źródło
Chociaż problem jest prawie taki sam, jak udzieliłem odpowiedzi w tej odpowiedzi , chciałbym zilustrować ten problem, który również trochę mnie dzisiaj pomylił w modelu seq2seq (dzięki odpowiedzi @Franck Dernoncourt), na wykresie. Na tym prostym schemacie enkodera:
Każde powyżej to ta sama komórka w innym przedziale czasowym (komórka GRU lub LSTM, jak w twoim pytaniu), a wektory masy (nie stronniczości) w komórce są tego samego rozmiaru (liczba_jednostek / liczba_skrytych lub rozmiar_państwowa lub wielkość_wyjściowa ) .hi
źródło
num_units = n
w tę liczbęMoim zdaniem komórka oznacza węzeł taki jak ukryta komórka, który jest również nazywany ukrytym węzłem, w przypadku wielowarstwowego modelu LSTM liczbę komórek można obliczyć za pomocą time_steps * num_layers, a liczba_jednostek jest równa time_steps
źródło
Jednostki w Keras są wymiarem przestrzeni wyjściowej, która jest równa długości opóźnienia (time_step), do którego powtarza się sieć.
https://keras.io/layers/recurrent/
źródło