subtitles/fr/06_transformer-models-decoders.srt (126 lines of code) (raw):

1 00:00:03,860 --> 00:00:09,750 Dans cette vidéo, nous allons étudier l'architecture du décodeur. Un exemple d'architecture populaire composée uniquement d'un 2 00:00:09,750 --> 00:00:15,809 décodeur est le GPT-2. Afin de comprendre le fonctionnement les décodeurs, nous vous recommandons de regarder la vidéo 3 00:00:15,809 --> 00:00:21,640 concernant les encodeurs : ils sont extrêmement similaires aux décodeurs. On peut utiliser un décodeur pour la plupart 4 00:00:21,640 --> 00:00:26,429 des mêmes tâches qu'un encodeur, mais avec, généralement, une petite perte de performances. 5 00:00:26,429 --> 00:00:31,769 Prenons la même approche que nous avons adoptée avec l'encodeur pour essayer de comprendre les 6 00:00:31,769 --> 00:00:38,969 différences architecturales entre un encodeur et un décodeur. Nous allons utiliser un petit exemple, en utilisant trois mots. 7 00:00:38,969 --> 00:00:46,550 Nous les passons par le décodeur. Nous récupérons une représentation numérique de chaque mot. Ici, 8 00:00:46,550 --> 00:00:51,739 par exemple, le décodeur convertit les trois mots « Welcome to NYC » en ces trois 9 00:00:51,739 --> 00:00:57,750 séquences de chiffres. Le décodeur sort exactement une séquence de nombres par 10 00:00:57,750 --> 00:01:05,290 mot d'entrée. Cette représentation numérique peut également être appelée « vecteur de caractéristiques » ou « tenseur de caractéristiques ». 11 00:01:05,290 --> 00:01:09,590 Plongeons dans cette représentation. Il contient un vecteur par mot passé 12 00:01:09,590 --> 00:01:14,830 par le décodeur. Chacun de ces vecteurs est une représentation numérique du mot 13 00:01:14,830 --> 00:01:21,810 en question. La dimension de ce vecteur est définie par l'architecture du modèle. 14 00:01:21,810 --> 00:01:28,400 Là où le décodeur diffère de l'encodeur, c'est principalement par son mécanisme d'auto-attention. 15 00:01:28,400 --> 00:01:34,090 Il utilise ce qu'on appelle l'auto-attention masquée. Ici par exemple, si nous nous concentrons sur le mot 16 00:01:34,090 --> 00:01:40,170 « to », nous verrons que son vecteur n'est absolument pas modifié par le mot « NYC ». C'est parce que 17 00:01:40,170 --> 00:01:45,560 tous les mots à droite (également appelés le contexte droit) du mot sont masqués. 18 00:01:45,560 --> 00:01:50,729 Plutôt que de bénéficier de tous les mots à gauche et à droite, c'est-à-dire le 19 00:01:50,729 --> 00:02:01,229 contexte bidirectionnel, les décodeurs n'ont accès qu'aux mots à leur gauche. Le mécanisme d'auto-attention masquée 20 00:02:01,229 --> 00:02:06,310 diffère du mécanisme d'auto-attention en utilisant un masque supplémentaire pour masquer 21 00:02:06,310 --> 00:02:12,110 le contexte de chaque côté du mot : la représentation numérique du mot ne sera pas 22 00:02:12,110 --> 00:02:18,730 affectée par les mots dans le contexte masqué. Alors quand faut-il utiliser un décodeur ? Les décodeurs, 23 00:02:18,730 --> 00:02:24,610 comme les encodeurs, peuvent être utilisés comme modèles autonomes. Comme ils génèrent une représentation numérique, 24 00:02:24,610 --> 00:02:30,410 ils peuvent également être utilisés dans une grande variété de tâches. Cependant, la force d'un décodeur 25 00:02:30,410 --> 00:02:35,420 réside dans la manière dont un mot a accès à son contexte gauche. Les décodeurs, n'ayant accès 26 00:02:35,420 --> 00:02:40,280 qu'à leur contexte de gauche, sont intrinsèquement bons pour la génération de texte : la capacité de générer 27 00:02:40,280 --> 00:02:46,120 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 28 00:02:46,120 --> 00:02:52,150 modélisation causale du langage. Prenons un exemple. Voici un exemple du fonctionnement de la modélisation causale du langage 29 00:02:52,150 --> 00:02:59,240 : nous commençons par un mot initial, qui est « My ». Nous l'utilisons comme entrée pour le 30 00:02:59,240 --> 00:03:06,330 décodeur. Le modèle sort un vecteur de dimension 768. Ce vecteur contient des informations sur 31 00:03:06,330 --> 00:03:11,650 la séquence, qui est ici un seul mot. Nous appliquons une petite transformation à 32 00:03:11,650 --> 00:03:17,019 ce vecteur pour qu'il corresponde à tous les mots connus par le modèle (une association que nous verrons 33 00:03:17,019 --> 00:03:22,650 plus tard, appelée tête de modélisation de langage). Nous identifions que le modèle croit que le 34 00:03:22,650 --> 00:03:29,720 mot suivant le plus probable est « name ». Nous prenons ensuite ce nouveau mot et l'ajoutons à la 35 00:03:29,720 --> 00:03:35,560 séquence initiale. De « Mon », nous sommes maintenant à « Mon nom ». C'est là qu'intervient l'aspect autorégressif. Les 36 00:03:35,560 --> 00:03:42,689 modèles autorégressifs réutilisent leurs sorties passées comme entrées dans les étapes suivantes. 37 00:03:42,689 --> 00:03:49,280 Encore une fois, nous effectuons exactement la même opération : nous analysons cette séquence dans le décodeur 38 00:03:49,280 --> 00:03:57,459 et récupérons le mot suivant le plus probable. Dans ce cas, c'est le mot « is ». Nous répétons 39 00:03:57,459 --> 00:04:03,049 l'opération jusqu'à ce que nous soyons satisfaits. À partir d'un seul mot, nous avons maintenant généré une 40 00:04:03,049 --> 00:04:08,870 phrase complète. Nous décidons de nous arrêter là, mais nous pourrions continuer un moment. Par exemple 41 00:04:08,870 --> 00:04:16,919 le GPT-2 a une taille de contexte maximale de 1024. Nous pourrions donc éventuellement générer jusqu'à 1024 mots, 42 00:04:16,919 --> 00:04:20,125 et le décodeur aurait encore une mémoire des premiers mots de la séquence !