Grundlegendes zu LSTM-Einheiten im Vergleich zu Zellen

32

Ich habe LSTMs für eine Weile studiert. Ich verstehe auf hohem Niveau, wie alles funktioniert. Als ich sie jedoch mit Tensorflow implementieren wollte, bemerkte ich, dass BasicLSTMCell eine Reihe von Einheiten (dh num_units) benötigt.

Aus dieser sehr gründlichen Erklärung von LSTMs habe ich herausgefunden, dass eine einzelne LSTM-Einheit eine der folgenden ist

LSTM-Einheit

Das ist eigentlich eine GRU-Einheit.

Ich gehe davon aus, dass sich der Parameter num_unitsvon auf die Anzahl dieser Parameter BasicLSTMCellbezieht, die in einer Ebene miteinander verbunden werden sollen.

Da bleibt die Frage - was ist in diesem Zusammenhang eine "Zelle"? Entspricht eine "Zelle" einer Schicht in einem normalen neuronalen Feed-Forward-Netzwerk?

nbro
quelle
Ich bin immer noch verwirrt, ich las colah.github.io/posts/2015-08-Understanding-LSTMs und ich verstehe das gut. Wie gilt der Begriff Zelle für diesen Artikel? Es scheint, dass eine LSTM-Zelle im Artikel ein Vektor wie im Tensorflow ist, oder?
Pinocchio

Antworten:

17

Die Terminologie ist leider inkonsistent. num_unitsin TensorFlow ist die Anzahl der versteckten Zustände, dh die Dimension von in den von Ihnen angegebenen Gleichungen.ht

Unter https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/api_docs/python/functions_and_classes/shard9/tf.nn.rnn_cell.RNNCell.md :

Die Definition der Zelle in dieser Packung unterscheidet sich von der in der Literatur verwendeten Definition. In der Literatur bezieht sich Zelle auf ein Objekt mit einer einzelnen skalaren Ausgabe. Die Definition in diesem Paket bezieht sich auf ein horizontales Array solcher Einheiten.

"LSTM-Schicht" ist wahrscheinlich expliziter, Beispiel :

def lstm_layer(tparams, state_below, options, prefix='lstm', mask=None):
    nsteps = state_below.shape[0]
    if state_below.ndim == 3:
        n_samples = state_below.shape[1]
    else:
        n_samples = 1

    assert mask is not None
    […]
Franck Dernoncourt
quelle
Ah, ich verstehe, also ist eine "Zelle" ein num_unitgroßes horizontales Array von miteinander verbundenen LSTM-Zellen. Macht Sinn. Also wäre es dann analog zu einer verborgenen Schicht in einem Standard-Feed-Forward-Netzwerk?
* LSTM-
@rec Das ist richtig
Franck Dernoncourt
1
@Sycorax Wenn zum Beispiel die Eingabe des neuronalen Netzwerks eine Zeitreihe mit 10 Zeitschritten ist, hat die horizontale Dimension 10 Elemente.
Franck Dernoncourt
1
Ich bin immer noch verwirrt, ich las colah.github.io/posts/2015-08-Understanding-LSTMs und ich verstehe das gut. Wie gilt der Begriff Zelle für diesen Artikel? Es scheint, dass eine LSTM-Zelle im Artikel ein Vektor wie im Tensorflow ist, oder?
Pinocchio
4

Die meisten LSTM / RNN-Diagramme zeigen nur die verborgenen Zellen, jedoch niemals die Einheiten dieser Zellen. Daher die Verwirrung. Jede ausgeblendete Ebene hat ausgeblendete Zellen, so viele wie Zeitschritte. Außerdem besteht jede verborgene Zelle aus mehreren verborgenen Einheiten, wie im folgenden Diagramm dargestellt. Daher ist die Dimensionalität einer verborgenen Schichtmatrix in RNN (Anzahl der Zeitschritte, Anzahl der verborgenen Einheiten).

enter image description here

Garima Jain
quelle
4

Obwohl das Problem fast das gleiche ist, wie ich es in dieser Antwort beantwortet habe , möchte ich dieses Problem, das mich heute auch im seq2seq-Modell (dank der Antwort von @Franck Dernoncourt) ein wenig verwirrt hat, in der Grafik veranschaulichen. In diesem einfachen Geberdiagramm:

enter image description here

hi

Lerner Zhang
quelle
Ich glaube das num_units = nin dieser Figur
notilas
-1

Meiner Meinung nach bedeutet Zelle einen Knoten wie eine versteckte Zelle, der auch als versteckter Knoten bezeichnet wird. Für ein mehrschichtiges LSTM-Modell kann die Anzahl der Zellen mit time_steps * num_layers berechnet werden und die Anzahl der Einheiten ist gleich time_steps

user210864
quelle
-1

Diese Einheit in Keras ist die Dimension des Ausgaberaums, die der Länge der Verzögerung (time_step) entspricht, in der sich das Netzwerk wiederholt.

keras.layers.LSTM(units, activation='tanh', ....)

https://keras.io/layers/recurrent/

notilas
quelle