56 votos

Comprender las unidades LSTM frente a las células

Llevo un tiempo estudiando los LSTM. Entiendo a alto nivel cómo funciona todo. Sin embargo, al ir a implementarlos usando Tensorflow me he dado cuenta de que BasicLSTMCell requiere un número de unidades (es decir num_units ).

Desde este explicación muy completa de los LSTM, he deducido que un solo Unidad LSTM es uno de los siguientes

LSTM unit

que en realidad es una unidad del GRU.

Supongo que el parámetro num_units de la BasicLSTMCell se refiere a cómo de estos queremos conectar entre sí en una capa.

Esto nos lleva a preguntarnos qué es una "célula" en este contexto. ¿Es una "célula" equivalente a una capa en una red neuronal normal de avance?

30voto

Franck Dernoncourt Puntos 2128

La terminología es, por desgracia, incoherente. num_units en TensorFlow es el número de estados ocultos, es decir, la dimensión de $h_t$ en las ecuaciones que has dado.

Además, desde https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/api_docs/python/functions_and_classes/shard9/tf.nn.rnn_cell.RNNCell.md :

La definición de célula en este paquete difiere de la definición utilizada en la literatura. En la literatura, celda se refiere a un objeto con una sola salida escalar. La definición en este paquete se refiere a una matriz horizontal de tales unidades.

"La capa LSTM" es probablemente más explícita, ejemplo :

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

14voto

user14042 Puntos 18

La mayoría de los diagramas LSTM/RNN sólo muestran las celdas ocultas, pero nunca las unidades de esas celdas. De ahí la confusión. Cada capa oculta tiene celdas ocultas, tantas como el número de pasos de tiempo. Y además, cada celda oculta está formada por múltiples unidades ocultas, como en el diagrama de abajo. Por lo tanto, la dimensionalidad de una matriz de capa oculta en RNN es (número de pasos de tiempo, número de unidades ocultas).

enter image description here

7voto

nunya Puntos 21

Aunque la cuestión es casi la misma que respondí en esta respuesta Me gustaría ilustrar esta cuestión, que también me confundió un poco hoy en el modelo seq2seq (gracias a la respuesta de @Franck Dernoncourt), en el gráfico. En este sencillo diagrama del codificador:

enter image description here

Cada $h_i$ arriba es la misma célula en diferentes pasos de tiempo (célula ya sea GRU o LSTM como la de su pregunta) y los vectores de peso (no sesgo) en la célula son del mismo tamaño de (num_units/ número_oculto o tamaño_de_estado o tamaño_de_salida ).

La RNN es un tipo especial de modelo gráfico en el que los nodos forman una lista dirigida, como se explica en la sección 4 de este documento: Redes neuronales supervisadas para la clasificación de estructuras . Podemos pensar en num_units como el número de etiquetas en el CRF (aunque el CRF no está dirigido), y las matrices( $W$ en el gráfico de la pregunta) son todos compartidos a través de todos los pasos de tiempo como la matriz de transición en CRF.

4voto

Anita Puntos 1

En keras.layers.LSTM(units, activation='tanh', ....) El units se refiere al dimensionalidad o duración del estado oculto o el longitud del vector de activación se pasa a la siguiente célula/unidad LSTM - la siguiente célula/unidad LSTM es la "imagen verde de arriba con las puertas, etc. de http://colah.github.io/posts/2015-08-Understanding-LSTMs/

El siguiente célula/unidad LSTM (es decir, la caja verde con puertas, etc. de http://colah.github.io/posts/2015-08-Understanding-LSTMs/ ) NO es lo mismo que el units en keras.layers.LSTM(units, activation='tanh', ....)

El units también se denominan a veces latent dimensions . A continuación, una explicación detallada de la units Parámetro LSTM:

https://zhuanlan.zhihu.com/p/58854907

0voto

Tom Anderson Puntos 111

En mi opinión, célula significa un nodo como célula oculta que también se llama nodo oculto, para el modelo LSTM multicapa, el número de células puede ser calculado por time_steps*num_layers, y el num_units es igual a time_steps

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X