Aller au contenu principal

Lire « Attention Is All You Need » : l’article original du Transformer

En 2017, Vaswani et sept coauteurs, pour la plupart alors chez Google Brain ou Google Research, publient Attention Is All You Need et présentent le Transformer. L’article porte sur la traduction automatique, et son modèle est un encodeur–décodeur ; la plupart des grands modèles de langage actuels n’en conservent que la moitié décodeur. Ce contexte facilite la lecture : les auteurs se demandaient si un modèle de traduction pouvait se passer entièrement de récurrence et de convolution, pas comment construire un modèle conversationnel.

La suite reprend l’ordre de l’article. Les numéros de section, de tableau et d’équation renvoient à la version 7 sur arXiv. Les exemples chiffrés de l’attention elle-même se trouvent dans Mécanisme d'attention ; les composants modernes comme RMSNorm, RoPE, GQA et SwiGLU sont traités dans Transformers : architecture originale et blocs modernes et ne sont pas repris ici.

Le problème de 2017 : la récurrence fait attendre l’entraînement​

La section 1 part de l’état de l’art de l’époque : les réseaux récurrents, LSTM et GRU en tête, dominaient la modélisation du langage et la traduction automatique. Un modèle récurrent calcule position après position : l’état caché hth_t dépend de ht−1h_{t-1} et de l’entrée à la position tt. Les auteurs soulignent que ce calcul intrinsèquement séquentiel empêche toute parallélisation au sein d’un exemple d’entraînement. Le problème s’aggrave avec la longueur des séquences, puisque la mémoire limite aussi le nombre d’exemples par lot. Les astuces de factorisation et le calcul conditionnel avaient amélioré l’efficacité, mais la contrainte fondamentale du calcul séquentiel demeurait.

L’attention faisait déjà partie des modèles de traduction. Elle relie directement deux positions quelle que soit leur distance, mais on l’employait presque toujours avec un réseau récurrent. L’article propose de supprimer complètement la récurrence et de s’appuyer uniquement sur l’attention pour établir des dépendances globales entre l’entrée et la sortie.

La section 2 situe le Transformer par rapport à une autre famille de modèles qui réduisait déjà le calcul séquentiel. L’Extended Neural GPU, ByteNet et ConvS2S utilisent des convolutions pour calculer en parallèle les représentations de toutes les positions. Dans ces modèles, cependant, le nombre d’opérations nécessaires pour relier deux positions quelconques croît avec leur distance, linéairement pour ConvS2S et logarithmiquement pour ByteNet, ce qui rend les dépendances lointaines plus difficiles à apprendre. Le Transformer ramène ce nombre à une constante. Les auteurs en indiquent aussi le prix : moyenner les positions pondérées par l’attention réduit la « résolution effective », et c’est ce que l’attention multi-têtes doit compenser.

L’article vise donc deux choses à la fois : la part de l’entraînement qui peut s’exécuter en parallèle, et la longueur du chemin qu’un signal doit parcourir entre deux positions éloignées. Le tableau 1 de la section 4 exprime ces deux points en termes de complexité.

L’architecture telle que l’article la définit​

La section 3 reprend le cadre général des modèles de transduction de séquences. L’encodeur transforme une séquence de symboles d’entrée (x1,…,xn)(x_1,\dots,x_n) en représentations continues z=(z1,…,zn)\mathbf z=(z_1,\dots,z_n). À partir de z\mathbf z, le décodeur produit une séquence de sortie (y1,…,ym)(y_1,\dots,y_m) symbole par symbole. Chaque étape est autorégressive : les symboles déjà produits servent d’entrée supplémentaire pour générer le suivant.

Transformer original : encodeur à gauche, décodeur masqué à droite, reliés par l’attention croisée.Voir l’image en grand

L’encodeur est à gauche, le décodeur à droite ; le N× à côté de chaque pile signifie que la même couche est répétée N=6N=6 fois. Les flèches qui contournent chaque sous-couche sont des connexions résiduelles, et « Add & Norm » signifie qu’on additionne d’abord, puis qu’on applique la normalisation de couche. Des trois entrées de la sous-couche d’attention centrale du décodeur, deux viennent de la sortie de l’encodeur et une du décodeur lui-même.

La section 3.1 décrit les deux piles. L’encodeur compte N=6N=6 couches identiques, chacune formée de deux sous-couches : une auto-attention multi-têtes et un réseau feed-forward entièrement connecté appliqué position par position. Le décodeur compte lui aussi N=6N=6 couches et ajoute une troisième sous-couche, qui applique une attention multi-têtes à la sortie de la pile d’encodeurs.

Chaque sous-couche est entourée d’une connexion résiduelle suivie d’une normalisation de couche ; la sortie d’une sous-couche vaut donc

LayerNorm⁡(x+Sublayer⁡(x)).\operatorname{LayerNorm}\big(x+\operatorname{Sublayer}(x)\big).

La normalisation vient après l’addition résiduelle, un ordre qu’on appellera plus tard Post-Norm. Pour que ces additions soient possibles, toutes les sous-couches et les deux couches d’embedding produisent des sorties de dimension dmodel=512d_{\text{model}}=512.

L’auto-attention du décodeur est masquée pour qu’une position ne puisse pas regarder les positions suivantes. Combiné au décalage d’une position des embeddings de sortie, ce masque garantit que la prédiction pour la position ii ne dépend que des sorties connues aux positions inférieures à ii. Pour apprendre au modèle à produire [A, B, EOS], par exemple, on donne au décodeur [BOS, A, B] : la position qui prédit B ne voit que BOS et A.

Trois usages de l’attention dans le modèle​

La section 3.2.3 recense trois endroits où le modèle utilise l’attention multi-têtes. Le calcul est le même dans les trois cas ; seules changent la provenance des requêtes, des clés et des valeurs, et les positions visibles :

UsageRequêtes issues deClés et valeurs issues deChaque position voit
Auto-attention de l’encodeurSortie de la couche précédente de l’encodeurMême sourceToutes les positions de la couche précédente de l’encodeur
Auto-attention du décodeurSortie de la couche précédente du décodeurMême sourceLes positions jusqu’à elle-même incluse
Attention encodeur–décodeurSortie de la couche précédente du décodeurSortie de l’encodeurToutes les positions de la séquence d’entrée

La troisième est ce qu’on appelle habituellement l’attention croisée ; elle reprend l’attention encodeur–décodeur typique des modèles séquence-à-séquence antérieurs. Le masque du décodeur est appliqué à l’intérieur de l’attention par produit scalaire mis à l’échelle : avant le softmax, toute valeur correspondant à une connexion interdite est fixée à −∞-\infty, si bien que son poids vaut exactement zéro.

Attention par produit scalaire mis à l’échelle : pourquoi réduire les scores​

La section 3.2 définit l’attention sobrement : elle associe à une requête et à un ensemble de paires clé–valeur une sortie, somme pondérée des valeurs, où chaque poids est calculé par une fonction de compatibilité entre la requête et la clé correspondante. La section 3.2.1 prend le produit scalaire comme fonction de compatibilité. En regroupant plusieurs requêtes dans une matrice QQ, et les clés et valeurs dans KK et VV, on obtient l’équation (1) :

Attention⁡(Q,K,V)=softmax⁡ ⁣(QK⊤dk)V.\operatorname{Attention}(Q,K,V)=\operatorname{softmax}\!\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)V.

dkd_k est la dimension des requêtes et des clés, dvd_v celle des valeurs. Les deux fonctions d’attention les plus courantes à l’époque étaient l’attention additive et l’attention par produit scalaire ; la seconde ne diffère de l’équation ci-dessus que par le facteur 1/dk1/\sqrt{d_k}. Leur complexité théorique est comparable, mais le produit scalaire s’appuie sur des multiplications matricielles très optimisées et s’avère bien plus rapide et plus économe en mémoire.

Pourquoi ce facteur ? Des expériences citées par l’article montrent que les deux mécanismes se valent pour de petites valeurs de dkd_k, mais que l’attention additive l’emporte sur le produit scalaire non mis à l’échelle quand dkd_k grandit. Les auteurs soupçonnent que, pour dkd_k grand, les produits scalaires prennent de grandes valeurs et poussent le softmax vers des régions où ses gradients sont extrêmement faibles. Une note de bas de page donne la raison : si les composantes de qq et kk sont des variables aléatoires indépendantes de moyenne 0 et de variance 1, alors q⋅k=∑i=1dkqikiq\cdot k=\sum_{i=1}^{d_k}q_ik_i a une moyenne de 0 et une variance de dkd_k. Diviser par dk\sqrt{d_k} ramène la variance à 1.

Avec le dk=64d_k=64 de l’article, l’écart type d’un produit scalaire vaut environ 8. Supposons deux clés avec des scores non mis à l’échelle de 8 et 0. Le softmax attribue à la première un poids d’environ 0,9997, presque une distribution one-hot, et sa dérivée p(1−p)p(1-p) tombe à environ 0,0003. Divisés par 8, les scores deviennent 1 et 0, les poids environ 0,73 et 0,27, et la dérivée environ 0,20. Ce n’est qu’un calcul à la main. L’article présente l’explication par les gradients comme une hypothèse et ne lui consacre aucune expérience.

La figure ci-dessous applique le même calcul à une phrase de sept mots. Pour que l’arithmétique reste lisible, ses vecteurs n’ont que deux dimensions : les scores y sont divisés par 2\sqrt2, alors que l’article divise par 64=8\sqrt{64}=8. Activez le masque causal pour voir comment l’auto-attention du décodeur cache les mots suivants, ou passez à « Les deux têtes » pour un avant-goût de la concaténation multi-têtes de la section suivante.

L’attention dans une phrase

Choisissez le mot qui interroge (la requête). Chaque étape ajoute une partie du calcul.

Mot requête

Chaque ligne est une requête, chaque colonne une clé. Chaque ligne est un softmax distinct qui totalise 100 %. Sélectionnez une ligne pour faire de ce mot la requête.

q(il) = [2.2, 0]

Clékq·k/√2Poids
Le[0.2, 0]0.314.0%
chat[2, 0.4]3.1166%
dormait[0.3, 1.6]0.474.7%
car[0, 0.2]0.002.9%
il[1, 0.3]1.5614%
était[0.1, 0.5]0.163.4%
fatigué[0.4, 1.4]0.625.5%

Tête 1 : le sens · Somme pondérée

Lechatdormaitcarilétaitfatiguéo(il)

Sortie o1 = Σ w·v = [2.67, 1.16]

Tête 1 : le sens · Toutes les requêtes

LechatdormaitcarilétaitfatiguéLe10201710141216chat5133269926dormait555741558car821208131019il466531435était73614615814fatigué554941559

Les vecteurs sont choisis à la main pour rendre deux motifs lisibles. Dans un modèle entraîné, les têtes sont rarement aussi nettes.

Attention multi-têtes : huit têtes de 64 dimensions​

Plutôt que d’appliquer une seule fonction d’attention à des requêtes, clés et valeurs de dimension dmodeld_{\text{model}}, la section 3.2.2 les projette hh fois, avec des projections apprises différentes, vers dkd_k, dkd_k et dvd_v dimensions. Elle calcule l’attention en parallèle sur chaque projection, concatène les hh sorties de dimension dvd_v, puis applique une dernière projection :

MultiHead⁡(Q,K,V)=Concat⁡(head1,…,headh) WO,headi=Attention⁡(QWiQ, KWiK, VWiV).\begin{aligned} \operatorname{MultiHead}(Q,K,V)&=\operatorname{Concat}(\mathrm{head}_1,\dots,\mathrm{head}_h)\,W^O,\\ \mathrm{head}_i&=\operatorname{Attention}(QW_i^Q,\,KW_i^K,\,VW_i^V). \end{aligned}

Les matrices de projection ont pour formes WiQ,WiK∈Rdmodel×dkW_i^Q,W_i^K\in\mathbb R^{d_{\text{model}}\times d_k}, WiV∈Rdmodel×dvW_i^V\in\mathbb R^{d_{\text{model}}\times d_v} et WO∈Rhdv×dmodelW^O\in\mathbb R^{hd_v\times d_{\text{model}}}. L’article utilise h=8h=8 têtes, chacune avec dk=dv=dmodel/h=64d_k=d_v=d_{\text{model}}/h=64.

Suivons les formes pour une phrase de 10 tokens. L’entrée mesure 10×51210\times512. Chaque tête la projette en requêtes, clés et valeurs de 10×6410\times64, calcule une matrice de poids 10×1010\times10 et produit une sortie 10×6410\times64. Concaténer les huit têtes redonne 10×51210\times512, que l’on multiplie par la matrice 512×512512\times512 WOW^O. Comme chaque tête est plus petite, le coût total reste proche de celui d’une attention à une seule tête en pleine dimension. Avec ces formes, une sous-couche d’attention multi-têtes contient quatre matrices de 512×512512\times512, soit 1 048 576 poids.

L’argument des auteurs est que l’attention multi-têtes permet au modèle de prêter attention conjointement à des informations issues de sous-espaces de représentation différents, à des positions différentes ; avec une seule tête, la moyenne efface ces distinctions. Les lignes (A) du tableau 3 mettent cette affirmation à l’épreuve, comme on le verra plus bas.

Les trois autres composants​

Réseaux feed-forward position par position​

Selon la section 3.3, chaque couche de l’encodeur et du décodeur contient aussi un réseau feed-forward entièrement connecté, appliqué à chaque position séparément et de manière identique. Il se compose de deux transformations linéaires séparées par une ReLU, équation (2) :

FFN⁡(x)=max⁡(0, xW1+b1) W2+b2.\operatorname{FFN}(x)=\max(0,\,xW_1+b_1)\,W_2+b_2.

Les positions d’une même couche partagent leurs paramètres, tandis que chaque couche a les siens ; l’article note qu’on peut aussi y voir deux convolutions de noyau 1. L’entrée et la sortie ont dmodel=512d_{\text{model}}=512 dimensions, la couche interne dff=2048d_{ff}=2048. À cette taille, W1W_1 et W2W_2 totalisent 2×512×2048=2 097 1522\times512\times2048=2\,097\,152 poids, environ le double des poids de projection d’une sous-couche d’attention. Le titre affirme que l’attention suffit, pourtant, dans chaque couche de l’encodeur, le FFN compte deux fois plus de poids que l’attention ; il faut la seconde sous-couche d’attention du décodeur pour que les deux s’équilibrent à peu près. L’attention fait circuler l’information entre les positions ; le FFN traite ensuite chaque position isolément.

Embeddings et partage des poids​

La section 3.4 utilise des embeddings appris pour convertir les tokens d’entrée et de sortie en vecteurs de dimension dmodeld_{\text{model}}, et la transformation linéaire apprise habituelle suivie d’un softmax pour convertir la sortie du décodeur en probabilités du token suivant. L’article partage une même matrice de poids entre les deux couches d’embedding et la transformation linéaire qui précède le softmax ; dans les couches d’embedding, il multiplie ces poids par dmodel\sqrt{d_{\text{model}}} (environ 22,6). L’article ne justifie pas ce facteur.

Partager une même table d’embeddings entre langue source et langue cible suppose que les deux utilisent le même vocabulaire. C’est le cas pour l’anglais–allemand : la section 5.1 indique que les phrases sont encodées par byte-pair encoding (BPE), avec un vocabulaire source–cible partagé d’environ 37 000 tokens. Les pratiques générales de tokenisation et de vocabulaire sont décrites dans Tokenisation et représentations du texte dans un modèle.

Encodage positionnel sinusoïdal​

Sans récurrence ni convolution, le modèle a besoin d’une autre source d’information sur la position relative ou absolue des tokens pour exploiter leur ordre. La section 3.5 ajoute des « encodages positionnels » aux embeddings d’entrée, à la base des piles de l’encodeur et du décodeur. Ces encodages ont la même dimension dmodeld_{\text{model}} que les embeddings, ce qui permet de les additionner. L’article utilise des sinus et cosinus de fréquences différentes :

PE(pos, 2i)=sin⁡ ⁣(pos100002i/dmodel),PE(pos, 2i+1)=cos⁡ ⁣(pos100002i/dmodel).\begin{aligned} PE_{(pos,\,2i)}&=\sin\!\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right),\\ PE_{(pos,\,2i+1)}&=\cos\!\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right). \end{aligned}

pospos désigne la position et ii la dimension. Chaque dimension de l’encodage correspond à une sinusoïde, sinus pour les dimensions paires et cosinus pour les impaires, chaque paire partageant une fréquence ; les longueurs d’onde forment une progression géométrique de 2π2\pi à 10000⋅2π10000\cdot2\pi. À la position 1, la première paire de dimensions vaut sin⁡1≈0,841\sin 1\approx0{,}841 et cos⁡1≈0,540\cos 1\approx0{,}540. Pour la dernière paire (i=255i=255), le dénominateur vaut environ 9647 et le sinus n’atteint qu’environ 0,0001. Les premières dimensions varient vite avec la position, les dernières lentement ; ensemble, elles distinguent un grand nombre de positions.

Les auteurs ont choisi cette fonction parce qu’ils supposaient qu’elle permettrait au modèle d’apprendre facilement à porter attention selon la position relative : pour tout décalage fixe kk, PEpos+kPE_{pos+k} s’écrit comme une fonction linéaire de PEposPE_{pos}. Pour une seule fréquence ω\omega, c’est la formule d’addition des angles. Passer de (sin⁡ωp,cos⁡ωp)(\sin\omega p,\cos\omega p) à (sin⁡ω(p+k),cos⁡ω(p+k))(\sin\omega(p+k),\cos\omega(p+k)) revient à appliquer une matrice de rotation 2×22\times2 qui ne dépend que de kk.

L’article a aussi essayé des embeddings positionnels appris et obtenu des résultats presque identiques (tableau 3, ligne (E)). Il a gardé la version sinusoïdale parce qu’elle « pourrait » permettre au modèle d’extrapoler à des séquences plus longues que celles vues à l’entraînement. C’est une attente des auteurs ; l’article ne présente aucune expérience d’extrapolation.

Pourquoi l’auto-attention : lire le tableau 1​

La section 4 compare les couches d’auto-attention aux couches récurrentes et convolutives sur une même tâche : transformer une séquence de longueur variable (x1,…,xn)(x_1,\dots,x_n) en une autre de même longueur (z1,…,zn)(z_1,\dots,z_n), avec xi,zi∈Rdx_i,z_i\in\mathbb R^d. Elle retient trois critères : la complexité de calcul totale par couche ; la part du calcul parallélisable, mesurée par le nombre minimal d’opérations séquentielles ; et la longueur du chemin entre dépendances lointaines dans le réseau. Plus les chemins que doivent parcourir les signaux, en propagation avant comme arrière, sont courts, plus les dépendances lointaines sont faciles à apprendre.

Dans le tableau 1, nn est la longueur de la séquence, dd la dimension de représentation, kk la taille du noyau de convolution et rr la taille du voisinage de l’auto-attention restreinte :

Type de coucheComplexité par coucheOpérations séquentiellesLongueur maximale de chemin
Auto-attentionO(n2⋅d)O(n^2\cdot d)O(1)O(1)O(1)O(1)
RécurrenteO(n⋅d2)O(n\cdot d^2)O(n)O(n)O(n)O(n)
ConvolutiveO(k⋅n⋅d2)O(k\cdot n\cdot d^2)O(1)O(1)O(log⁡kn)O(\log_k n)
Auto-attention restreinteO(r⋅n⋅d)O(r\cdot n\cdot d)O(1)O(1)O(n/r)O(n/r)

Commençons par les deux dernières colonnes. Une couche d’auto-attention relie toutes les positions avec un nombre constant d’opérations séquentielles ; une couche récurrente en demande O(n)O(n). La position 50 doit attendre les 49 états qui la précèdent, et un signal parti du mot 1 traverse 49 mises à jour d’état avant d’atteindre le mot 50. En auto-attention, ces deux positions sont reliées directement au sein d’une seule couche.

Passons à la complexité. Les couches d’auto-attention sont plus rapides que les couches récurrentes quand la longueur nn de la séquence est inférieure à la dimension dd. Les auteurs notent que c’est le plus souvent le cas pour les représentations de phrases des meilleurs modèles de traduction, à base de word-pieces ou de byte-pairs. Prenons d=512d=512 : pour n=50n=50, n2d=1 280 000n^2d=1\,280\,000 contre nd2=13 107 200nd^2=13\,107\,200, soit un ordre de grandeur de moins pour l’auto-attention ; pour n=2000n=2000, le premier terme passe à 2,048×1092{,}048\times10^9, environ quatre fois le second. Le O(1)O(1) du tableau signifie que le travail d’une couche peut s’exécuter en parallèle, pas que l’auto-attention est bon marché. Pour les séquences très longues, les auteurs proposent de restreindre l’attention à un voisinage de taille rr centré sur la position de sortie, au prix d’une longueur maximale de chemin portée à O(n/r)O(n/r), et renvoient cette piste à des travaux ultérieurs.

La ligne des convolutions mérite une explication. Une seule couche convolutive de largeur de noyau k<nk\lt n ne relie pas toutes les paires de positions. Il faut pour cela empiler O(n/k)O(n/k) couches avec des noyaux contigus, ou O(log⁡kn)O(\log_k n) avec des convolutions dilatées, ce qui allonge les chemins les plus longs. Les couches convolutives coûtent en général kk fois plus que les couches récurrentes. Les convolutions séparables réduisent la complexité à O(k⋅n⋅d+n⋅d2)O(k\cdot n\cdot d+n\cdot d^2), mais même avec k=nk=n, cela équivaut à une couche d’auto-attention suivie d’une couche feed-forward position par position, soit exactement la combinaison retenue par le Transformer.

Les auteurs signalent un avantage secondaire : l’auto-attention pourrait rendre les modèles plus interprétables. Dans les visualisations de l’annexe, différentes têtes semblent apprendre des tâches différentes, et certaines paraissent suivre la structure syntaxique et sémantique des phrases ; plusieurs têtes de la couche 5, par exemple, relient « making » au lointain « more difficult ». Ce que prouvent réellement les poids d’attention est une autre question, traitée dans la partie consacrée à leur interprétation dans Mécanisme d'attention.

Configuration d’entraînement​

La section 5 détaille l’entraînement. Les durées et les coûts d’entraînement du tableau 2 découlent directement du matériel et du nombre d’étapes décrits ici.

Données, matériel et durée​

Section 5.1 : l’anglais–allemand utilise le jeu de données standard WMT 2014, environ 4,5 millions de paires de phrases, avec un vocabulaire BPE partagé d’environ 37 000 tokens. L’anglais–français utilise le jeu WMT 2014 anglais–français, bien plus grand, de 36 millions de phrases, avec un vocabulaire de 32 000 word-pieces. Les paires de phrases sont regroupées par longueur approximative, chaque lot contenant environ 25 000 tokens source et 25 000 tokens cible.

Section 5.2 : tous les modèles ont été entraînés sur une seule machine équipée de 8 GPU NVIDIA P100. Les modèles de base prenaient environ 0,4 seconde par étape et ont été entraînés pendant 100 000 étapes, soit environ 12 heures. Les grands modèles prenaient 1,0 seconde par étape et ont été entraînés pendant 300 000 étapes, soit environ 3,5 jours.

Optimiseur et préchauffage du taux d’apprentissage​

La section 5.3 utilise Adam avec β1=0,9\beta_1=0{,}9, β2=0,98\beta_2=0{,}98 et ϵ=10−9\epsilon=10^{-9}. Le taux d’apprentissage varie avec l’étape d’entraînement ss selon l’équation (3), où ww est le nombre d’étapes de préchauffage :

lrate=dmodel−0.5⋅min⁡(s−0.5, s⋅w−1.5).\text{lrate}=d_{\text{model}}^{-0.5}\cdot\min\left(s^{-0.5},\ s\cdot w^{-1.5}\right).

Le taux augmente linéairement pendant les ww premières étapes, puis décroît proportionnellement à l’inverse de la racine carrée du numéro d’étape. L’article fixe w=4000w=4000. Avec dmodel=512d_{\text{model}}=512, le taux culmine à l’étape 4000 à (512×4000)−0,5≈7,0×10−4(512\times4000)^{-0{,}5}\approx7{,}0\times10^{-4} et n’est plus que d’environ 1,4×10−41{,}4\times10^{-4} à l’étape 100 000.

Régularisation​

La section 5.4 décrit le dropout résiduel et le lissage des étiquettes. Le dropout résiduel s’applique à la sortie de chaque sous-couche avant qu’elle soit ajoutée à l’entrée de la sous-couche et normalisée, ainsi qu’aux sommes des embeddings et des encodages positionnels dans les deux piles. Le modèle de base utilise Pdrop=0,1P_{drop}=0{,}1. Le lissage des étiquettes utilise ϵls=0,1\epsilon_{ls}=0{,}1 et déplace pendant l’entraînement une partie de la probabilité cible du bon token vers les autres. Selon l’article, il dégrade la perplexité, car le modèle apprend à être moins sûr de lui, mais améliore la précision et le score BLEU. Les lignes (D) du tableau 3 montrent cet effet.

Résultats​

Traduction automatique : tableau 2​

La section 6.1 rapporte les scores BLEU sur newstest2014. Voici les chiffres du tableau 2 ; le coût d’entraînement est exprimé en opérations en virgule flottante (FLOPs), et les cellules vides le sont aussi dans l’original :

ModèleBLEU EN-DEBLEU EN-FRCoût EN-DECoût EN-FR
ByteNet23,75
Deep-Att + PosUnk39,21,0⋅10201{,}0\cdot10^{20}
GNMT + RL24,639,922,3⋅10192{,}3\cdot10^{19}1,4⋅10201{,}4\cdot10^{20}
ConvS2S25,1640,469,6⋅10189{,}6\cdot10^{18}1,5⋅10201{,}5\cdot10^{20}
MoE26,0340,562,0⋅10192{,}0\cdot10^{19}1,2⋅10201{,}2\cdot10^{20}
Deep-Att + PosUnk Ensemble40,48,0⋅10208{,}0\cdot10^{20}
GNMT + RL Ensemble26,3041,161,8⋅10201{,}8\cdot10^{20}1,1⋅10211{,}1\cdot10^{21}
ConvS2S Ensemble26,3641,297,7⋅10197{,}7\cdot10^{19}1,2⋅10211{,}2\cdot10^{21}
Transformer (base)27,338,13,3⋅10183{,}3\cdot10^{18}(fusionné avec la cellule de gauche)
Transformer (grand)28,441,82,3⋅10192{,}3\cdot10^{19}(fusionné avec la cellule de gauche)

En anglais–allemand, le grand modèle dépasse de plus de 2,0 points BLEU les meilleurs résultats publiés jusque-là, ensembles compris, et atteint 28,4 ; même le modèle de base surpasse tous les modèles et ensembles publiés auparavant. En anglais–français, le grand modèle dépasse tous les modèles uniques publiés, pour moins d’un quart du coût d’entraînement du meilleur modèle précédent. Le grand modèle anglais–français utilisait un dropout de 0,1 au lieu des 0,3 habituels du grand modèle. Le score anglais–français comporte une incohérence : le résumé et le tableau 2 indiquent 41,8, alors que le texte de la section 6.1 indique 41,0.

La colonne des coûts est une estimation, pas une mesure. L’article multiplie la durée d’entraînement, le nombre de GPU et une estimation de la puissance soutenue en simple précision de chaque GPU, en retenant 9,5 TFLOPS pour un P100. Douze heures sur 8 GPU donnent environ 3,3×10183{,}3\times10^{18} pour le modèle de base, et 3,5 jours environ 2,3×10192{,}3\times10^{19} pour le grand modèle, ce qui correspond au tableau. Dans l’original, chaque Transformer n’a qu’un seul chiffre de coût, qui s’étend sur les colonnes anglais–allemand et anglais–français.

La même section précise le décodage. Les modèles de base font la moyenne des 5 derniers points de contrôle, enregistrés toutes les 10 minutes ; les grands modèles, des 20 derniers. La recherche en faisceau utilise une largeur de 4 et une pénalité de longueur α=0,6\alpha=0{,}6. La longueur maximale de sortie vaut la longueur d’entrée plus 50, avec arrêt anticipé quand c’est possible.

Variantes du modèle : tableau 3​

La section 6.2 modifie le modèle de base un aspect à la fois et l’évalue sur le jeu de développement anglais–allemand newstest2013, avec recherche en faisceau mais sans moyenne de points de contrôle. Les perplexités (PPL) sont calculées par word-piece et ne se comparent pas à des perplexités par mot. C’est pourquoi le BLEU du modèle de base vaut ici 25,8, à ne pas comparer directement aux 27,3 obtenus sur le jeu de test au tableau 2. Les valeurs non indiquées dans le tableau 3 sont celles du modèle de base :

LigneModificationPPL (dev)BLEU (dev)Paramètres (×10⁶)
baseN=6N=6, dmodel=512d_{\text{model}}=512, dff=2048d_{ff}=2048, h=8h=8, dk=dv=64d_k=d_v=64, Pdrop=0,1P_{drop}=0{,}1, ϵls=0,1\epsilon_{ls}=0{,}1, 100K étapes4,9225,865
(A)h=1h=1, dk=dv=512d_k=d_v=5125,2924,9
(A)h=4h=4, dk=dv=128d_k=d_v=1285,0025,5
(A)h=16h=16, dk=dv=32d_k=d_v=324,9125,8
(A)h=32h=32, dk=dv=16d_k=d_v=165,0125,4
(B)dk=16d_k=165,1625,158
(B)dk=32d_k=325,0125,460
(C)N=2N=26,1123,736
(C)N=4N=45,1925,350
(C)N=8N=84,8825,580
(C)dmodel=256d_{\text{model}}=256, dk=dv=32d_k=d_v=325,7524,528
(C)dmodel=1024d_{\text{model}}=1024, dk=dv=128d_k=d_v=1284,6626,0168
(C)dff=1024d_{ff}=10245,1225,453
(C)dff=4096d_{ff}=40964,7526,290
(D)Pdrop=0,0P_{drop}=0{,}05,7724,6
(D)Pdrop=0,2P_{drop}=0{,}24,9525,5
(D)ϵls=0,0\epsilon_{ls}=0{,}04,6725,3
(D)ϵls=0,2\epsilon_{ls}=0{,}25,4725,7
(E)Embedding positionnel appris au lieu des sinusoïdes4,9225,7
grandN=6N=6, dmodel=1024d_{\text{model}}=1024, dff=4096d_{ff}=4096, h=16h=16, Pdrop=0,3P_{drop}=0{,}3, 300K étapes4,3326,4213

Chaque groupe établit un point :

  • (A) Nombre de têtes : le calcul reste constant pendant que varient le nombre de têtes et leurs dimensions. Une seule tête fait perdre 0,9 point BLEU par rapport au meilleur réglage, et la qualité baisse aussi avec trop de têtes.
  • (B) Taille des clés : réduire dkd_k dégrade la qualité. Les auteurs y voient l’indice qu’évaluer la compatibilité n’est pas simple et qu’une fonction plus élaborée que le produit scalaire pourrait aider.
  • (C) Taille : les modèles plus grands font mieux, comme prévu.
  • (D) Régularisation : le dropout aide beaucoup à éviter le surapprentissage ; sans lui, le BLEU tombe à 24,6. Supprimer le lissage des étiquettes donne une perplexité plus basse (4,67) mais fait baisser le BLEU de 25,8 à 25,3, comme l’annonce la section 5.4.
  • (E) Encodage positionnel : embeddings positionnels appris et sinusoïdes donnent des résultats presque identiques.

Analyse syntaxique en constituants de l’anglais : tableau 4​

Pour vérifier que le Transformer se généralise au-delà de la traduction, la section 6.3 l’applique à l’analyse syntaxique en constituants de l’anglais. La sortie de cette tâche est soumise à de fortes contraintes structurelles et nettement plus longue que l’entrée ; de plus, les modèles séquence-à-séquence récurrents n’avaient pas atteint l’état de l’art avec peu de données.

Les auteurs ont entraîné un Transformer à 4 couches avec dmodel=1024d_{\text{model}}=1024. Un premier réglage n’utilise que la partie Wall Street Journal (WSJ) du Penn Treebank, environ 40 000 phrases d’entraînement, avec un vocabulaire de 16K. Un réglage semi-supervisé ajoute les corpus à haute confiance et BerkeleyParser, environ 17 millions de phrases, avec un vocabulaire de 32K. Seul un petit nombre d’expériences sur le jeu de développement de la section 22 a servi à choisir le dropout (d’attention et résiduel), les taux d’apprentissage et la largeur du faisceau ; tous les autres paramètres sont ceux du modèle de base de traduction anglais–allemand. À l’inférence, la longueur maximale de sortie passe à la longueur d’entrée plus 300, avec une largeur de faisceau de 21 et α=0,3\alpha=0{,}3 dans les deux réglages.

Le tableau 4 donne le F1 sur la section 23 du WSJ :

AnalyseurEntraînementF1 WSJ 23
Vinyals & Kaiser et al. (2014)WSJ seul, discriminatif88,3
Petrov et al. (2006)WSJ seul, discriminatif90,4
Zhu et al. (2013)WSJ seul, discriminatif90,4
Dyer et al. (2016)WSJ seul, discriminatif91,7
Transformer (4 couches)WSJ seul, discriminatif91,3
Zhu et al. (2013)semi-supervisé91,3
Huang & Harper (2009)semi-supervisé91,3
McClosky et al. (2006)semi-supervisé92,1
Vinyals & Kaiser et al. (2014)semi-supervisé92,1
Transformer (4 couches)semi-supervisé92,7
Luong et al. (2015)multitâche93,0
Dyer et al. (2016)génératif93,3

L’article conclut que, sans réglage propre à la tâche, le modèle fait mieux que tous les modèles publiés auparavant à l’exception de la Recurrent Neural Network Grammar (RNNG, Dyer et al. 2016). Ligne par ligne : avec le WSJ seul, 91,3 reste sous les 91,7 de la RNNG ; dans le groupe semi-supervisé, 92,7 est le meilleur score ; les résultats multitâche (93,0) et de la RNNG générative (93,3) sont plus élevés, mais reposent sur d’autres modes d’entraînement. Contrairement aux modèles séquence-à-séquence récurrents, le Transformer dépasse le BerkeleyParser (Petrov et al. 2006, 90,4) même entraîné sur les seules 40 000 phrases du WSJ.

Ce qui a tenu et ce qui a changé​

Les calculs centraux de l’article ont pour l’essentiel survécu tels quels : la formule de l’attention par produit scalaire mis à l’échelle, la concaténation et la projection de sortie de l’attention multi-têtes, les connexions résiduelles, les couches feed-forward position par position et l’entraînement de toutes les positions en parallèle. Ce qui a changé tient surtout à la façon d’assembler ces pièces :

  • Topologie : de nombreux grands modèles de langage ne conservent que la pile du décodeur, sans encodeur ni attention croisée. La visibilité du contexte et les têtes de sortie des trois familles sont décrites dans Encoder, Decoder et Encoder–Decoder ; les règles de génération token par token, dans Génération autorégressive et décodage.
  • Place de la normalisation : Xiong et al. (2020) ont analysé l’agencement Post-LN de l’article. À l’initialisation, les gradients des paramètres proches de la couche de sortie sont grands, si bien qu’un taux d’apprentissage élevé rend l’entraînement instable ; ils expliquent ainsi la nécessité du préchauffage. Avec la normalisation déplacée à l’intérieur de la branche résiduelle (Pre-LN), un entraînement sans préchauffage atteint des résultats comparables. Les modèles modernes emploient couramment Pre-Norm et RMSNorm, comme le décrit la partie sur les blocs de Transformers.
  • Information de position : après les sinusoïdes sont venus les positions absolues apprises, les biais de position relative et RoPE. RoPE encode la position absolue par une matrice de rotation tout en intégrant explicitement la dépendance à la position relative dans le calcul de l’auto-attention. Le tableau sur la position de Transformers compare où agit chaque méthode.
  • Têtes et cache : lors d’une génération token par token, les clés et valeurs des positions antérieures sont mises en cache. L’attention multi-requêtes (MQA) et l’attention à requêtes groupées (GQA) font partager à plusieurs têtes de requête un nombre réduit de têtes clé/valeur pour réduire ce cache ; voir Variantes de l’attention et compression du cache KV.
  • FFN : la ReLU cède souvent la place à GELU ou à des variantes à portes comme SwiGLU ; voir Activations et réseaux feed-forward à portes.
  • Longueur des séquences : l’hypothèse du tableau 1, nn inférieur à dd, ne tient plus pour les longs contextes, où le terme en n2n^2 devient le coût principal. Des noyaux comme FlashAttention abaissent le pic de mémoire, mais l’attention exacte reste quadratique en calcul. Les estimations détaillées de formes et de mémoire se trouvent dans Transformers.

Dans leur conclusion, les auteurs fixent trois pistes : appliquer le Transformer à d’autres modalités d’entrée et de sortie que le texte ; étudier une attention locale et restreinte pour traiter efficacement de grandes entrées et sorties comme les images, l’audio et la vidéo ; rendre la génération moins séquentielle. Le code d’entraînement et d’évaluation a été publié dans tensor2tensor.

Explorer les liensOuvrir le réseau