Que se passe-t-il lorsque nous alimentons une matrice 2D dans une couche LSTM

8

Supposons que j'alimente une matrice 2D de forme (99,13) en entrée d'une couche LSTM. J'ai n nombre de fichiers, où chacun contient (99,13) des vecteurs de taille. J'ai décidé de considérer 13 comme le nombre de fonctionnalités et 99 comme les pas de temps.

(Lors de l'implémentation avec Keras, j'ai ajouté la couche LSTM comme première couche. Et j'ai défini le output_dim de la couche sur 100)

Mais je ne peux pas comprendre comment les choses se passent réellement au sein du réseau lorsque nous fournissons une entrée comme ci-dessus. J'ai les questions suivantes, auxquelles je ne peux pas répondre moi-même.

  1. Quel type de valeurs fournissons-nous en entrée aux cellules LSTM? ( xt , ht-1 utilisés comme entrées dans la cellule sont toujours des vecteurs? Dans mon cas, xt a-t-il la forme de [1,13]?)
  2. Lorsque nous disons que nous avons une couche LSTM comme première couche du mode l, alimente-t-elle le premier vecteur d'entrée à toutes les cellules de la couche donnée? (Par exemple: alimenter la première image de taille 13 (sur 99 images) à toutes les n cellules LSTM de la première couche?) De même, continue-t-il à alimenter toutes les lignes de la matrice d'entrée à chaque pas de temps?
  3. Quel type de valeur une cellule LSTM génère-t-elle à chaque pas de temps ? (Considérons-nous l'état de la cellule comme la sortie correcte du nœud? S'agit-il d'une valeur unique ou d'un vecteur? S'il s'agit d'un vecteur, quelles sont les dimensions? Existe-t-il un moyen de deviner les dimensions? J'ai supposé ht comme vecteur)
  4. Qu'entend-on par output_dim (dimension de sortie) d'une couche donnée? Doit-il toujours être le nombre de nœuds dans la couche suivante?

Veuillez ne pas mettre cela en attente ou directement à d'autres groupes. Je pense que ces questions sont liées à l'apprentissage automatique et à rnn. J'ai lu des articles de recherche, mais je n'ai pas pu avoir une idée claire de la façon dont les choses fonctionnent vraiment au sein du réseau LSTM.

udani
la source

Réponses:

1

1) Xsont vos entrées, si vous avez 99 pas de temps, alors vous avez 99 vecteurs de taille 13 chacun. Par conséquent, votre entrée à chaque pas de temps est un vecteur de taille 13. Vous aurez besoin d'un état caché de départ, sauf si vous avez une raison de le faire, sinon votre état caché de début peut être tous des 0. La taille de ce vecteur est un hyperparamètre que vous choisissez.

2) Gardez à l'esprit qu'il n'y a pas 99 cellules LSTM, il n'y a qu'une seule cellule LSTM qui est réutilisée 99 fois pour chaque pas de temps. La cellule LSTM conserve un état caché et un état de cellule en son sein qu'elle passe à l'étape de temps suivante. Mais il n'y a qu'un seul ensemble de paramètres en cours d'apprentissage. Ces paramètres doivent pouvoir gérer tous les pas de temps, sous réserve de l'entrée actuelle, de l'état caché et de l'état de la cellule.

3) L'état de cellule n'est pas une sortie, mais il est transmis en tant qu'entrée au pas de temps suivant. L'état caché h_tsera transmis à la sortie ainsi qu'au pas de temps suivant.

4) Je ne suis pas sûr, j'ai besoin d'une référence au terme output_dim.

Ceci est un excellent tutoriel sur les LSTM: http://colah.github.io/posts/2015-08-Understanding-LSTMs/

David Parks
la source
0

Qu'entend-on par output_dim (dimension de sortie) d'une couche donnée? Doit-il toujours être le nombre de nœuds dans la couche suivante?

output_dim = dimension des états cachés LSTM.

Franck Dernoncourt
la source