Tengo problemas para comprender la documentación del módulo LSTM de PyTorch (y también RNN y GRU, que son similares). En cuanto a los resultados, dice:

Salidas: salida, (h_n, c_n)

  • output (seq_len, batch, hidden_size * num_directions): tensor que contiene las características de salida (h_t) de la última capa del RNN, para cada t. Si se ha dado una antorcha.nn.utils.rnn.PackedSequence como entrada, la salida también será una secuencia empaquetada.
  • h_n (num_layers * num_directions, batch, hidden_size): tensor que contiene el estado oculto para t = seq_len
  • c_n (num_layers * num_directions, batch, hidden_size): tensor que contiene el estado de la celda para t = seq_len

Parece que las variables output y h_n dan los valores del estado oculto. ¿h_n solo proporciona redundantemente el último paso de tiempo que ya está incluido en output, o hay algo más que eso?

55
Nathaniel 17 ene. 2018 a las 16:54

3 respuestas

La mejor respuesta

Hice un diagrama. Los nombres siguen los documentos PyTorch, aunque cambié el nombre de {{X0 }} a w.

output comprende todos los estados ocultos en la última capa ("última" en cuanto a profundidad, no en cuanto al tiempo). (h_n, c_n) comprende los estados ocultos después del último paso de tiempo, t = n , por lo que podría introducirlos en otro LSTM.

LSTM diagram

La dimensión del lote no está incluida.

111
nnnmmm 24 ene. 2018 a las 11:29

Realmente depende del modelo que use y de cómo interpretará el modelo. La salida puede ser:

  • un solo estado oculto de celda LSTM
  • varios estados ocultos de celdas LSTM
  • todas las salidas de estados ocultos

Salida, casi nunca se interpreta directamente. Si la entrada está codificada, debe haber una capa softmax para decodificar los resultados.

Nota: En el modelado de idiomas, los estados ocultos se utilizan para definir la probabilidad de la siguiente palabra, p (w t + 1 | w 1 , ..., w t ) = softmax (Wh t + b).

3
prosti 11 feb. 2019 a las 12:12

El estado de salida es el tensor de todo el estado oculto de cada paso de tiempo en el RNN (LSTM), y el estado oculto devuelto por el RNN (LSTM) es el último estado oculto del último paso de tiempo de la secuencia de entrada. Puede verificar esto recopilando todos los estados ocultos de cada paso y comparándolos con el estado de salida (siempre que no esté usando pack_padded_sequence).

0
Jibin Mathew 7 feb. 2019 a las 06:51