1
votes

Comprendre l'algèbre linéaire de l'attention de Bahdanau

L'attention additive de Bahdanau est reconnue comme la deuxième partie de l'équation 4 dans l'image ci-dessous.


entrez la description de l'image ici


J'essaie de comprendre les formes des matrices w1 , w2 , ht , hs et v afin de comprendre comment ce mécanisme est utilisé dans cet article

  1. ht et hs peuvent-ils avoir des dimensions finales différentes? dire (taille du lot, unités totales) et (taille du lot, fenêtre de temps). L'équation 8 dans l'article mentionné ci-dessus semble faire cela.

  2. L'équation 8 de l'article ci-dessus a la notation ci-dessous:

    entrez la description de l'image ici

à quoi cela s'étend-il exactement?

W1 . concatenation(ht-1, ct-1)

ou

(W1 . ht-1) + (W1 . Ct-1)

J'ai vu les deux être utilisés. Toute explication rapide des formes de matrice ci-dessus est très appréciée.


1 commentaires

Vous pouvez lire l'article original pour plus de détails: arxiv.org/pdf/1409.0473.pdf


3 Réponses :


0
votes

J'ai trouvé cela plus utile où il montre la sortie de chaque équation et comment la forme de l'encodeur et du décodeur. Flux de calcul des poids d'attention à Bahdanau Attention entrez la description de l'image ici

Nous pouvons voir que vous pouvez obtenir une forme différente d'encodeur ou de décodeur et Attention se concentre sur les parties les plus importantes de la séquence au lieu de la séquence entière dans son ensemble. En outre, vous pouvez utiliser ce code où il montre comment appliquer ces équations

FC = couche entièrement connectée (dense) EO = sortie du codeur H = état caché X = entrée du décodeur

score = FC(tanh(FC(EO) + FC(H)))


2 commentaires

La fonction tanh () du diagramme ne correspond pas à votre tanh. le vôtre n'a pas l'état du décodeur. laquelle est correcte?


Vous pouvez vous référer aux références ci-dessus pour mieux comprendre car la forme du codeur et du décodeur peut être différente. L'état caché du décodeur et les sorties du codeur passeront par leur couche linéaire individuelle et auront leurs propres poids pouvant être entraînés individuellement.



0
votes

Pour répondre plus directement à vos questions:

  1. ht et hs peuvent avoir une forme différente. L'important est qu'après la multiplication de la matrice, ils sont les mêmes, sinon ils ne peuvent pas être additionnés. Autrement dit, W1 et W2 doivent être mappés à la même taille de dimension.
  2. Cela doit être considéré comme une concaténation de h et c . Je ne pense pas que multiplier les deux par la même matrice et ajouter a beaucoup de sens.

Remarque: la partie 1) peut également être implémentée en concanténant ht et hs dans la dimension d'entité et en appliquant une seule multiplication matricielle. Cela peut être plus efficace que deux autres.


1 commentaires

Merci pour cela. Donc ht peut être (Aucun, 1, 32) égal à (taille du lot, 1, unités) et hs peut être (Aucun, 5, 10) égal à (taille du lot, fenêtre de temps, fonctionnalités)? Mais de cette façon je ne peux pas concaténer dans la 3ème dimension comme tu l'as dit. parce que la 2ème dimension des deux ne sont pas égales.



1
votes

Peut-être que comprendre cela avec un exemple spécifique peut vous aider: disons que vous avez un tweet de 19 mots et que vous souhaitez le convertir dans une autre langue. Vous créez des plongements pour les mots, puis vous les passez à travers une couche LSTM bidirectionnelle de 128 unités. L'encodeur génère désormais 19 états cachés de 256 dimensions pour chaque tweet. Disons que le décodeur est unidirectionnel et comporte 128 unités. Il commence à traduire les mots tout en produisant en parallèle un état caché à chaque pas de temps.

Vous voulez maintenant attirer l'attention de Bahdanau sur l'équation ci-dessus. Vous souhaitez alimenter s_tminus1 du décodeur et tous les états cachés de l'encodeur (hj) et souhaitez obtenir le contexte en suivant les étapes suivantes:

générer v * (w * s_tminus1 + u * hj)

Prenez un softmax de ce qui précède pour obtenir les 19 poids d'attention pour chaque tweet, puis multipliez ces poids d'attention par les états cachés de l'encodeur pour obtenir la somme pondérée qui n'est rien d'autre que le contexte.

Notez que dans le modèle Bahdanau, le décodeur doit être unidirectionnel. Ensuite, les formes seraient les suivantes:

Supposons que n = 10 unités pour la couche d'alignement afin de déterminer w, u. Alors: les formes pour s_tminus1 et hj seraient (?, 128) et (?, 19,256). Notez que s_tminus1 est l'état caché du décodeur unique à t-1 et hj sont les 19 états cachés du codeur bidirectionnel.

Nous devons étendre stminus1 à (?, 1,128) pour l'addition qui suit plus tard le long de l'axe des temps. Les poids de couche pour w, u, v seront automatiquement déterminés par le cadre comme (?, 128,10), (?, 256,10) et (?, 10,1) respectivement. Remarquez comment self.w (stminus1) fonctionne en (?, 1,10). Ceci est ajouté à chacun des self.u (hj) pour donner une forme de (?, 19,10). Le résultat est transmis à self.v et la sortie est (?, 19,1) qui est la forme que nous voulons - un ensemble de 19 poids. Softmaxing cela donne des poids d'attention.

Multiplier ce poids d'attention avec chaque état caché de l'encodeur et additionner renvoie le contexte.

J'espère que cela clarifie les formes des différents tenseurs et formes de poids.

Pour répondre à vos autres questions - les dimensions de ht et hs peuvent être différentes, comme indiqué dans l'exemple ci-dessus. Quant à votre autre question, j'ai vu les 2 vecteurs être concaténés et ensuite un seul poids appliqué sur eux .. du moins c'est ce que je me souviens avoir lu dans l'article original


0 commentaires