Eu estudo os LSTMs há um tempo. Eu entendo em alto nível como tudo funciona. No entanto, ao implementá-los usando o Tensorflow, notei que o BasicLSTMCell requer um número de unidades (ou seja num_units
) parâmetro.
A partir desta explicação minuciosa dos LSTMs, concluí que uma única unidade LSTM é uma das seguintes
que é realmente uma unidade GRU.
Eu suponho que o parâmetro num_units
do BasicLSTMCell
está se referindo a quantos deles queremos conectar um ao outro em uma camada.
Isso deixa a questão - o que é uma "célula" nesse contexto? Uma "célula" é equivalente a uma camada em uma rede neural de alimentação normal?
Respostas:
Infelizmente, a terminologia é inconsistente.ht
num_units
em TensorFlow é o número de estados ocultos, ou seja, a dimensão de nas equações que você forneceu.Além disso, em https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/api_docs/python/functions_and_classes/shard9/tf.nn.rnn_cell.RNNCell.md :
"Camada LSTM" é provavelmente mais explícita, por exemplo :
fonte
num_unit
matriz horizontal de células LSTM interconectadas. Faz sentido. Então, seria análogo a uma camada oculta em uma rede feed-forward padrão?A maioria dos diagramas de LSTM / RNN mostra apenas as células ocultas, mas nunca as unidades dessas células. Daí a confusão. Cada camada oculta possui células ocultas, até o número de etapas de tempo. Além disso, cada célula oculta é composta de várias unidades ocultas, como no diagrama abaixo. Portanto, a dimensionalidade de uma matriz de camada oculta na RNN é (número de etapas de tempo, número de unidades ocultas).
fonte
Embora o problema seja quase o mesmo que eu respondi nesta resposta , gostaria de ilustrar esse problema, que também me confundiu hoje no modelo seq2seq (graças à resposta de @Franck Dernoncourt), no gráfico. Neste diagrama simples do codificador:
Cada acima é a mesma célula em diferentes etapas no tempo (célula GRU ou LSTM que a da sua pergunta) e os vetores de peso (sem viés) na célula são do mesmo tamanho de (num_units / num_hidden ou state_size ou output_size ) .hEu
fonte
num_units = n
nesta figuraNa minha opinião, célula significa um nó, como célula oculta, também chamada de nó oculto, para o modelo LSTM multicamada, o número de células pode ser calculado por time_steps * num_layers, e o num_units é igual a time_steps
fonte
Essas unidades em Keras são a dimensão do espaço de saída, que é igual à duração do atraso (time_step) ao qual a rede está recorrendo.
https://keras.io/layers/recurrent/
fonte