Comprendre les unités LSTM et les cellules

32

J'étudie les LSTM depuis un certain temps. Je comprends à un haut niveau comment tout fonctionne. Cependant, en les implémentant à l'aide de Tensorflow, j'ai remarqué que BasicLSTMCell nécessite un certain nombre d'unités (c'est-à-dire num_units) un paramètre.

D'après cette explication très approfondie des LSTM, j'ai compris qu'une seule unité LSTM est l'une des suivantes

Unité LSTM

qui est en fait une unité GRU.

Je suppose que le paramètre num_unitsde BasicLSTMCellfait référence au nombre de ceux-ci que nous voulons connecter les uns aux autres dans une couche.

Cela laisse la question - qu'est-ce qu'une "cellule" dans ce contexte? Une "cellule" est-elle équivalente à une couche dans un réseau neuronal à action normale?

nbro
la source
Je suis toujours confus, je lisais colah.github.io/posts/2015-08-Understanding-LSTMs et je le comprends bien. Comment le terme cellule s'applique-t-il à cet article? Il semble qu'une cellule LSTM dans l'article soit un vecteur comme dans Tensorflow, non?
Pinocchio

Réponses:

17

La terminologie est malheureusement incohérente. num_unitsdans TensorFlow est le nombre d'états cachés, c'est-à-dire la dimension de dans les équations que vous avez données.ht

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

La définition de cellule dans ce package diffère de la définition utilisée dans la littérature. Dans la littérature, cellule fait référence à un objet avec une seule sortie scalaire. La définition de ce package fait référence à un tableau horizontal de ces unités.

La "couche LSTM" est probablement plus explicite, exemple :

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
la source
Ah je vois, alors une "cellule" est un num_unitréseau horizontal de taille de cellules LSTM interconnectées. Logique. Alors, ce serait analogue à une couche cachée dans un réseau à action directe standard alors?
* Unités d'état LSTM
@rec C'est exact
Franck Dernoncourt
1
@Sycorax par exemple, si l'entrée du réseau neuronal est une série temporelle à 10 pas de temps, la dimension horizontale comporte 10 éléments.
Franck Dernoncourt
1
Je suis toujours confus, je lisais colah.github.io/posts/2015-08-Understanding-LSTMs et je le comprends bien. Comment le terme cellule s'applique-t-il à cet article? Il semble qu'une cellule LSTM dans l'article soit un vecteur comme dans Tensorflow, non?
Pinocchio
4

La plupart des diagrammes LSTM / RNN montrent simplement les cellules cachées mais jamais les unités de ces cellules. D'où la confusion. Chaque couche cachée a des cellules cachées, autant que le nombre de pas de temps. Et de plus, chaque cellule cachée est composée de plusieurs unités cachées, comme dans le diagramme ci-dessous. Par conséquent, la dimensionnalité d'une matrice de couche cachée dans RNN est (nombre de pas de temps, nombre d'unités cachées).

entrez la description de l'image ici

Garima Jain
la source
4

Bien que le problème soit presque le même que celui auquel j'ai répondu dans cette réponse , je voudrais illustrer ce problème, qui m'a également un peu dérouté aujourd'hui dans le modèle seq2seq (grâce à la réponse de @Franck Dernoncourt), dans le graphique. Dans ce schéma d'encodeur simple:

entrez la description de l'image ici

hje

Lerner Zhang
la source
Je crois que num_units = ndans cette figure
notilas
-1

À mon avis, cellule signifie un nœud tel qu'une cellule cachée qui est également appelée nœud caché, pour le modèle LSTM multicouche, le nombre de cellules peut être calculé par time_steps * num_layers, et le num_units est égal à time_steps

user210864
la source
-1

Cette unité dans Keras est la dimension de l'espace de sortie, qui est égale à la longueur du retard (time_step) auquel le réseau se reproduit.

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

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

notilas
la source