He estado estudiando LSTM por un tiempo. Entiendo a alto nivel cómo funciona todo. Sin embargo, al implementarlos usando Tensorflow, he notado que BasicLSTMCell requiere un número de unidades (es decir num_units
) parámetro.
A partir de esta explicación muy detallada de los LSTM, he deducido que una sola unidad LSTM es una de las siguientes
que en realidad es una unidad GRU.
Supongo que el parámetro num_units
de BasicLSTMCell
se refiere a cuántos de estos queremos conectar entre sí en una capa.
Eso deja la pregunta: ¿qué es una "célula" en este contexto? ¿Es una "célula" equivalente a una capa en una red neuronal de alimentación normal?
Respuestas:
La terminología es lamentablemente inconsistente.ht
num_units
en TensorFlow es el número de estados ocultos, es decir, la dimensión de en las ecuaciones que proporcionó.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 "capa LSTM" es probablemente más explícita, por ejemplo :
fuente
num_unit
matriz horizontal de tamaño de celdas LSTM interconectadas. Tiene sentido. Entonces, ¿sería análogo a una capa oculta en una red de alimentación estándar?La mayoría de los diagramas LSTM / RNN solo muestran las celdas ocultas pero nunca las unidades de esas celdas. De ahí la confusión. Cada capa oculta tiene celdas ocultas, tanto como el número de pasos de tiempo. Y además, cada celda oculta está compuesta de múltiples unidades ocultas, como en el diagrama a continuación. 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).
fuente
Aunque el problema es casi el mismo que respondí en esta respuesta , me gustaría ilustrar este problema, 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 diagrama de codificador simple:
fuente
num_units = n
en esta figuraEn mi opinión, celda significa un nodo como celda oculta, que también se llama nodo oculto, para el modelo LSTM multicapa, el número de celdas se puede calcular mediante time_steps * num_layers, y el número de unidades es igual a time_steps
fuente
Que las unidades en Keras es la dimensión del espacio de salida, que es igual a la duración del retraso (time_step) a la que recurre la red.
https://keras.io/layers/recurrent/
fuente