Entendendo unidades LSTM vs. células

32

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

Unidade LSTM

que é realmente uma unidade GRU.

Eu suponho que o parâmetro num_unitsdo BasicLSTMCellestá 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?

nbro
fonte
Ainda estou confuso, estava lendo colah.github.io/posts/2015-08-Understanding-LSTMs e entendo isso muito bem. Como o termo célula se aplica a esse artigo? Parece que uma célula LSTM no artigo é um vetor como no Tensorflow, certo?
Pinóquio

Respostas:

17

Infelizmente, a terminologia é inconsistente. num_unitsem TensorFlow é o número de estados ocultos, ou seja, a dimensão de nas equações que você forneceu.ht

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 :

A definição de célula neste pacote difere da definição usada na literatura. Na literatura, célula refere-se a um objeto com uma única saída escalar. A definição neste pacote refere-se a uma matriz horizontal de tais unidades.

"Camada LSTM" é provavelmente mais explícita, por exemplo :

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
fonte
Ah, entendo, então uma "célula" é uma num_unitmatriz horizontal de células LSTM interconectadas. Faz sentido. Então, seria análogo a uma camada oculta em uma rede feed-forward padrão?
* Unidades de estado LSTM
@rec Isso é correto
Franck Dernoncourt
1
@ Sycorax, por exemplo, se a entrada da rede neural for uma série temporal com 10 etapas de tempo, a dimensão horizontal terá 10 elementos.
Franck Dernoncourt
1
Ainda estou confuso, estava lendo colah.github.io/posts/2015-08-Understanding-LSTMs e entendo isso muito bem. Como o termo célula se aplica a esse artigo? Parece que uma célula LSTM no artigo é um vetor como no Tensorflow, certo?
Pinóquio
4

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).

insira a descrição da imagem aqui

Garima Jain
fonte
4

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:

insira a descrição da imagem aqui

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

Lerner Zhang
fonte
Acredito que num_units = nnesta figura
notilas
-1

Na 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

user210864
fonte
-1

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.

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

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

notilas
fonte