Comprensione delle unità LSTM rispetto alle celle


32

Ho studiato LSTM per un po '. Capisco ad alto livello come funziona tutto. Tuttavia, andando a implementarli usando Tensorflow, ho notato che BasicLSTMCell richiede un numero di unità (es. num_units) Parametro.

Da questa spiegazione molto approfondita degli LSTM, ho scoperto che una singola unità LSTM è una delle seguenti

Unità LSTM

che in realtà è un'unità GRU.

Presumo che quel parametro num_unitsdi BasicLSTMCellsi riferisca a quanti di questi vogliamo collegarci l'un l'altro in un livello.

Ciò lascia la domanda: cos'è una "cellula" in questo contesto? Una "cellula" equivale a uno strato in una normale rete neurale feed-forward?


Sono ancora confuso, stavo leggendo colah.github.io/posts/2015-08-Understanding- LSTMs e lo capisco bene. Come si applica il termine cellula rispetto a quell'articolo? Sembra che una cella LSTM nell'articolo sia un vettore come in Tensorflow, giusto?
Pinocchio,

Risposte:


17

La terminologia è purtroppo incoerente. num_unitsin TensorFlow è il numero di stati nascosti, ovvero la dimensione di nelle equazioni .ht

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

La definizione di cellula in questo pacchetto differisce dalla definizione usata in letteratura. In letteratura, cell si riferisce a un oggetto con un singolo output scalare. La definizione in questo pacchetto si riferisce ad una matrice orizzontale di tali unità.

"LSTM layer" è probabilmente più esplicito, ad esempio :

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
    […]

Ah, vedo, quindi una "cella" è un num_unitarray orizzontale dimensionato di celle LSTM interconnesse. Ha senso. Quindi allora sarebbe analogo a un livello nascosto in una rete feed-forward standard allora?

* Unità di stato LSTM

@rec È corretto
Franck Dernoncourt,

1
Ad esempio, @Sycorax, se l'ingresso della rete neurale è una serie temporale con 10 fasi temporali, la dimensione orizzontale ha 10 elementi.
Franck Dernoncourt,

1
Sono ancora confuso, stavo leggendo colah.github.io/posts/2015-08-Understanding- LSTMs e lo capisco bene. Come si applica il termine cellula rispetto a quell'articolo? Sembra che una cella LSTM nell'articolo sia un vettore come in Tensorflow, giusto?
Pinocchio,

4

La maggior parte dei diagrammi LSTM / RNN mostra solo le celle nascoste ma mai le unità di quelle celle. Da qui la confusione. Ogni livello nascosto ha celle nascoste, pari al numero di passaggi temporali. Inoltre, ogni cella nascosta è composta da più unità nascoste, come nel diagramma seguente. Pertanto, la dimensionalità di una matrice di livelli nascosti in RNN è (numero di passi temporali, numero di unità nascoste).

inserisci qui la descrizione dell'immagine


4

Sebbene il problema sia quasi lo stesso della mia risposta in questa risposta , vorrei illustrare questo problema, che oggi mi ha confuso un po 'nel modello seq2seq (grazie alla risposta di @Franck Dernoncourt), nel grafico. In questo semplice diagramma dell'encoder:

inserisci qui la descrizione dell'immagine

hio


Credo num_units = nin questa figura
notilas

-1

A mio avviso, cell significa un nodo come cellula nascosta che è anche chiamato nodo nascosto, per il modello LSTM multistrato, il numero di celle può essere calcolato da time_steps * num_layers e num_units è uguale a time_steps


-1

Quella unità in Keras è la dimensione dello spazio di output, che è uguale alla lunghezza del ritardo (time_step) a cui la rete sta ricorrendo.

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

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.