L'attention additive de Bahdanau est reconnue comme la deuxième partie de l'équation 4 dans l'image ci-dessous.
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
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.
L'équation 8 de l'article ci-dessus a la notation ci-dessous:
à 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.
3 Réponses :
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.
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)))
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.
Pour répondre plus directement à vos questions:
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.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.
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.
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
Vous pouvez lire l'article original pour plus de détails: arxiv.org/pdf/1409.0473.pdf