J'ai étudié le ** Deep Learning2 Natural Language Processing ** à partir de zéro. Il y a ** Attention ** au chapitre 8, mais seulement 4 pages ont été consacrées à ** Transformer **, qui est la base de ** BERT **, qui est actuellement courant.
En fait, ce n'est pas déraisonnable, car Zero Tsuku 2 a été publié en juillet 2018, Transformer en décembre 2017 et BERT en octobre 2018.
Cette fois, je voudrais passer de ** Zero Tsuku 2 Attention ** à l'article de ** Transformer ** ** Attention Is All You Need **, qui peut être considéré comme la base du traitement actuel du langage naturel.
Dans le chapitre 8 Attention de Zero Tsuku 2, afin d'améliorer les performances du ** modèle de traduction Seq2Seq **, ** faites attention au "I" de l'Encoder lors de la traduction de "I" avec Decoder **. Mettre en œuvre Attention **.
Tout d'abord, avec Attention Weight, calculez le ** produit interne ** pour trouver la similitude entre le vecteur «I» du décodeur et chaque vecteur mot de l'encodeur, et multipliez le résultat par ** Softmax ** pour obtenir le ** poids a. ** Demander. Cependant, en donnant la priorité à la facilité de compréhension, le produit interne est calculé par ** multiplication + axe H SUM **.
Ensuite, dans Attention Sum, la ** somme pondérée ** de chaque vecteur de mot de Encoder est calculée à partir du poids a, et ** Context Vector ** est obtenu. Ce vecteur de contexte est un reflet fort du vecteur de mot «je», indiquant que «je» devrait faire attention à «je».
Le processus de mise à zéro 2 donne la priorité à la facilité de compréhension, et est calculé intentionnellement par ** multiplication + axe SOMME ** sans utiliser ** produit interne **. Ensuite, que se passe-t-il si vous calculez correctement en utilisant le produit interne?
Le calcul du poids et le calcul de la somme des poids seront actualisés comme ceci s'ils se présentent sous la forme d'un produit intérieur. C'est plus rationnel, n'est-ce pas?
À propos, dans Attention, en général, la cible à calculer est ** Query **, l'ensemble de vecteurs de mots utilisé pour le calcul de similitude est ** Key ** et l'ensemble de vecteurs utilisé pour le calcul de la somme pondérée est ** Value **. dire. Si vous examinez la figure pour refléter ces derniers,
La cible à calculer ** "I" est Requête **, l'ensemble de vecteurs de mots utilisé pour le calcul de similarité ** hs est Clé ** et l'ensemble de vecteurs utilisé pour le calcul de somme pondérée ** hs est Valeur **. Dans Zero Tsuku 2, la clé et la valeur sont les mêmes, mais rendre les deux indépendants améliorera l'expressivité.
Une autre chose, en général, l'attention est divisée en fonction de l'origine de l'entrée.
Lorsque Qurery et Key / Value proviennent de différents endroits, cela s'appelle ** Sorce Taget Attention **, et lorsque Quety, Key et Value viennent tous du même endroit (Self), cela s'appelle ** Self Attention **. .. Attention avec zéro s'appelle Sorce Taget Attention.
Maintenant, changeons un peu le style d'écriture et ajoutons un terme au format ** Self Attention **.
J'ai ajouté la section ** divisée par la racine dk **. La raison de la division par la racine dk est que s'il y a une valeur trop grande dans le calcul du produit interne, lors de la multiplication par ** Softmax **, les autres valeurs seront 0 et ** le dégradé disparaîtra **, alors évitez cela. Faire. dk est le nombre de dimensions de l'expression distribuée par mot, qui est de 512 dans l'article.
En passant, Transformer n'utilise aucun RNN qui nécessite un traitement séquentiel, et se compose uniquement de Attention qui permet un traitement parallèle. Par conséquent, il n'est pas nécessaire de calculer chaque requête une par une, et ** toutes les requêtes peuvent être calculées en même temps **, de sorte qu'elle peut être exprimée comme suit.
![Capture d'écran 2020-09-04 23.07.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209705/ebf59620-7432-2f75-6714- 4e37375c7af9.png)
Dans le document L'attention est tout ce dont vous avez besoin, cela s'appelle ** Attention au produit scalaire à l'échelle ** et est exprimé par la formule suivante. C'est le cœur de Transformer.
4.Attention Is All You Need Maintenant, pour comprendre l'article ** Attention Is All You Need ** publié en décembre 2017, je vais vous expliquer les chiffres qui apparaissent dans l'article.
Tout d'abord, le diagramme Attention scaled Dot-product. ** Matmul ** est le produit interne et ** Scale ** est la racine dk. ** Mask (opt) ** signifie masquer la partie remplie lorsque le nombre de mots à saisir est inférieur à la longueur de la séquence. Vous pouvez voir qu'il est codé comme la formule Attention (Q, K, V).
Il s'agit de ** Attention multi-têtes **, y compris l'attention du produit scalaire mentionné précédemment. Une sortie de l'étage précédent est entrée comme Q, K, V via trois ** linéaires (couches entièrement connectées) **. En d'autres termes, Q, K et V sont les sorties de l'étape précédente multipliées respectivement par les poids Wq, Wk et Wv, et ces poids sont obtenus par apprentissage.
Un ensemble de requête, clé, valeur est appelé ** tête **. Il est préférable d'avoir plusieurs petites têtes, de calculer l'expression latente pour chacune et de concaténer à la fin, plutôt que d'avoir une seule grosse tête. C'est pourquoi nous utilisons Multi-Head. Dans l'article, la sortie de l'étape précédente est de 512 dimensions, et elle est divisée en 8 par la tête de 64 dimensions.
La configuration globale est le ** modèle de traduction encodeur-décodeur **. Le but est d'arrêter le RNN du calcul séquentiel et de configurer uniquement Attention qui peut effectuer un calcul parallèle pour accélérer le traitement. Nx signifie que la même configuration est répétée N fois, et N = 6 dans le papier.
① Input Embedding Les entrées sont (nombre de lots, nombre de colonnes d'ID de mot). Produit un vecteur converti à l'aide d'une représentation de distribution de mots pré-entraînée (nombre de lots, nombre de colonnes d'ID de mot, nombre de dimensions). Le nombre de dimensions du papier est de 512.
② Positional Encoding Lors du calcul de la somme de poids, ** les informations sur l'ordre des mots sont perdues ** ("Je l'aime" et "elle m'aime" ne peuvent pas être distinguées), donc les informations de position des mots (fonction sin) dans l'expression distribuée Et le modèle de la fonction cos) sont ajoutés pour faciliter l'apprentissage des ** positions relatives des mots **. En d'autres termes, le même mot aura des vecteurs différents s'il se trouve à des endroits différents. La formule des informations de position dans le document est la suivante.
③ Add & Norm Utilisez ** Ignorer la connexion ** pour effectuer la normalisation par ** Normalisation de couche ** et la régularisation par abandon. La normalisation des couches normalise chaque unité de données (phrase) du lot, pas en unités de lot.
④ Feed Foward La sortie de la couche Attention est convertie en entités avec deux couches entièrement connectées.
⑤ Masked Multi-Head Attention Lors du calcul de l’attention de «je», si vous incluez «suis», «a» et «chat», vous pourrez annuler le mot à prédire, afin de rendre le mot précédent dans Key invisible Mettez le masque.
Transformer a été proposé comme modèle de traduction, mais au fur et à mesure que la recherche progressait, il est devenu clair que la capacité de ** Self Attention à extraire le sens des phrases ** était assez puissante, et divers développements ont été réalisés, donc c'est facile. Je vais aborder.
Juin 2018. En utilisant uniquement le côté encodeur de Transformer, les performances ont été améliorées par l'apprentissage en deux étapes de ** pré-apprentissage + réglage fin **. Le pré-apprentissage est ** deviner quel est le mot suivant **, et il est mauvais de connaître les informations futures, donc je masque les phrases suivantes.
C'est un fait bien connu que structurellement, il existe un inconvénient en ce que le contexte arrière ne peut pas être utilisé, et si le contexte arrière peut être utilisé, une amélioration supplémentaire des performances peut être obtenue.
Février 2018. Afin d'utiliser le contexte arrière d'une manière ou d'une autre, j'ai abandonné le mérite du traitement parallèle par Attention et j'ai essayé d'utiliser le contexte arrière en utilisant le LSTM bidirectionnel multicouche. Il s'avère que cela améliore les performances.
Octobre 2018. Une méthode révolutionnaire de traitement du langage naturel ** BERT ** a été annoncée. Bref, en remplaçant le pré-apprentissage GPT par les deux tâches suivantes, nous avons réalisé un traitement parallèle en utilisant le contexte du contexte. Pour ainsi dire, la naissance d'un transformateur bidirectionnel.
** ① Modèle de langage masqué **: résolvez le problème de remplissage du blanc. Choisissez 15% des mots, masquez 80%, remplacez 10% par d'autres mots, laissez 10% tels quels. ** ② Prédiction de la phrase suivante **: détermine si les contextes des deux phrases sont liés.
Recommended Posts