Dans cette vidéo, nous allons étudier l'architecture du décodeur. Un exemple d'architecture populaire composée uniquement d'un
décodeur est le GPT-2. Afin de comprendre le fonctionnement les décodeurs, nous vous recommandons de regarder la vidéo
concernant les encodeurs : ils sont extrêmement similaires aux décodeurs. On peut utiliser un décodeur pour la plupart
des mêmes tâches qu'un encodeur, mais avec, généralement, une petite perte de performances.
Prenons la même approche que nous avons adoptée avec l'encodeur pour essayer de comprendre les
différences architecturales entre un encodeur et un décodeur. Nous allons utiliser un petit exemple, en utilisant trois mots.
Nous les passons par le décodeur. Nous récupérons une représentation numérique de chaque mot. Ici,
par exemple, le décodeur convertit les trois mots « Welcome to NYC » en ces trois
séquences de chiffres. Le décodeur sort exactement une séquence de nombres par
mot d'entrée. Cette représentation numérique peut également être appelée « vecteur de caractéristiques » ou « tenseur de caractéristiques ».
Plongeons dans cette représentation. Il contient un vecteur par mot passé
par le décodeur. Chacun de ces vecteurs est une représentation numérique du mot
en question. La dimension de ce vecteur est définie par l'architecture du modèle.
Là où le décodeur diffère de l'encodeur, c'est principalement par son mécanisme d'auto-attention.
Il utilise ce qu'on appelle l'auto-attention masquée. Ici par exemple, si nous nous concentrons sur le mot
« to », nous verrons que son vecteur n'est absolument pas modifié par le mot « NYC ». C'est parce que
tous les mots à droite (également appelés le contexte droit) du mot sont masqués.
Plutôt que de bénéficier de tous les mots à gauche et à droite, c'est-à-dire le
contexte bidirectionnel, les décodeurs n'ont accès qu'aux mots à leur gauche. Le mécanisme d'auto-attention masquée
diffère du mécanisme d'auto-attention en utilisant un masque supplémentaire pour masquer
le contexte de chaque côté du mot : la représentation numérique du mot ne sera pas
affectée par les mots dans le contexte masqué. Alors quand faut-il utiliser un décodeur ? Les décodeurs,
comme les encodeurs, peuvent être utilisés comme modèles autonomes. Comme ils génèrent une représentation numérique,
ils peuvent également être utilisés dans une grande variété de tâches. Cependant, la force d'un décodeur
réside dans la manière dont un mot a accès à son contexte gauche. Les décodeurs, n'ayant accès
qu'à leur contexte de gauche, sont intrinsèquement bons pour la génération de texte : la capacité de générer
un mot, ou une séquence de mots, à partir d'une séquence de mots connue. En NLP, c'est ce qu'on appelle la
modélisation causale du langage. Prenons un exemple. Voici un exemple du fonctionnement de la modélisation causale du langage
: nous commençons par un mot initial, qui est « My ». Nous l'utilisons comme entrée pour le
décodeur. Le modèle sort un vecteur de dimension 768. Ce vecteur contient des informations sur
la séquence, qui est ici un seul mot. Nous appliquons une petite transformation à
ce vecteur pour qu'il corresponde à tous les mots connus par le modèle (une association que nous verrons
plus tard, appelée tête de modélisation de langage). Nous identifions que le modèle croit que le
mot suivant le plus probable est « name ». Nous prenons ensuite ce nouveau mot et l'ajoutons à la
séquence initiale. De « Mon », nous sommes maintenant à « Mon nom ». C'est là qu'intervient l'aspect autorégressif. Les
modèles autorégressifs réutilisent leurs sorties passées comme entrées dans les étapes suivantes.
Encore une fois, nous effectuons exactement la même opération : nous analysons cette séquence dans le décodeur
et récupérons le mot suivant le plus probable. Dans ce cas, c'est le mot « is ». Nous répétons
l'opération jusqu'à ce que nous soyons satisfaits. À partir d'un seul mot, nous avons maintenant généré une
phrase complète. Nous décidons de nous arrêter là, mais nous pourrions continuer un moment. Par exemple
le GPT-2 a une taille de contexte maximale de 1024. Nous pourrions donc éventuellement générer jusqu'à 1024 mots,
et le décodeur aurait encore une mémoire des premiers mots de la séquence !