<meta charset="utf-8" /><meta http-equiv="content-security-policy" content=""><meta name="hf:doc:metadata" content="{&quot;local&quot;:&quot;comment-fonctionnent-les-modles-transformers&quot;,&quot;sections&quot;:[{&quot;local&quot;:&quot;court-historique-des-transformers&quot;,&quot;title&quot;:&quot;Court historique des Transformers&quot;},{&quot;local&quot;:&quot;transformers-des-modles-du-langage&quot;,&quot;title&quot;:&quot;Transformers, des modèles du langage&quot;},{&quot;local&quot;:&quot;les-modles-transformers-sont-normes&quot;,&quot;title&quot;:&quot;Les modèles Transformers sont énormes&quot;},{&quot;local&quot;:&quot;le-transfer-learning&quot;,&quot;title&quot;:&quot;Le Transfer Learning&quot;},{&quot;local&quot;:&quot;architecture-gnrale&quot;,&quot;title&quot;:&quot;Architecture générale&quot;},{&quot;local&quot;:&quot;introduction&quot;,&quot;title&quot;:&quot;Introduction&quot;},{&quot;local&quot;:&quot;les-couches-dattention&quot;,&quot;title&quot;:&quot;Les couches d&#39;attention&quot;},{&quot;local&quot;:&quot;larchitecture-originelle&quot;,&quot;title&quot;:&quot;L&#39;architecture originelle&quot;},{&quot;local&quot;:&quot;architectures-contre-checkpoints&quot;,&quot;title&quot;:&quot;Architectures contre checkpoints&quot;}],&quot;title&quot;:&quot;Comment fonctionnent les modèles Transformers ?&quot;}" data-svelte="svelte-1phssyn">
	<link rel="stylesheet" href="/docs/course/pr_131/fr/_app/assets/pages/__layout.svelte-4e40f570.css">
	<link rel="modulepreload" href="/docs/course/pr_131/fr/_app/start-a454088d.js">
	<link rel="modulepreload" href="/docs/course/pr_131/fr/_app/chunks/vendor-1e8b365d.js">
	<link rel="modulepreload" href="/docs/course/pr_131/fr/_app/chunks/paths-4b3c6e7e.js">
	<link rel="modulepreload" href="/docs/course/pr_131/fr/_app/pages/__layout.svelte-05c2fb0c.js">
	<link rel="modulepreload" href="/docs/course/pr_131/fr/_app/pages/chapter1/4.mdx-48ebeaf9.js">
	<link rel="modulepreload" href="/docs/course/pr_131/fr/_app/chunks/Youtube-c2a8cc39.js">
	<link rel="modulepreload" href="/docs/course/pr_131/fr/_app/chunks/IconCopyLink-483c28ba.js"> 





<h1 class="relative group"><a id="comment-fonctionnent-les-modles-transformers" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#comment-fonctionnent-les-modles-transformers"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a>
	<span>Comment fonctionnent les modèles Transformers ?
	</span></h1>

<p>Dans cette partie, nous allons jeter un coup d’oeil à l’architecture des modèles Transformers.</p>
<h2 class="relative group"><a id="court-historique-des-transformers" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#court-historique-des-transformers"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a>
	<span>Court historique des Transformers
	</span></h2>

<p>Voici quelques dates clefs dans la courte histoire des modèles Transformers :</p>
<div class="flex justify-center"><img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/transformers_chrono.svg" alt="A brief chronology of Transformers models.">
<img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/transformers_chrono-dark.svg" alt="A brief chronology of Transformers models."></div>
<p><a href="https://arxiv.org/abs/1706.03762" rel="nofollow">L’architecture Transformer</a> a été présentée en Juin 2017. La recherche initiale portait sur les tâches de traduction. Cela s’est suivi par la présentation de plusieurs modèles influents, dont :</p>
<ul><li><p><strong>Juin 2018</strong>: <a href="https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf" rel="nofollow">GPT</a>, le premier modèle Transformer pré-entraîné, utilisé pour fine-tuning sur différentes tâches de NLP et ayant obtenu des résultats à l’état de l’art</p></li>
<li><p><strong>Octobre 2018</strong>: <a href="https://arxiv.org/abs/1810.04805" rel="nofollow">BERT</a>, autre modèle large pré-entraîné, ayant été construit pour produire de meilleurs résumés de texte (plus de détails dans le chapitre suivant !)</p></li>
<li><p><strong>Février 2019</strong>: <a href="https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf" rel="nofollow">GPT-2</a>, une version améliorée (et plus grande) de GPT qui n’a pas été directement rendu publique pour cause de raisons éthiques</p></li>
<li><p><strong>Octobre 2019</strong>: <a href="https://arxiv.org/abs/1910.01108" rel="nofollow">DistilBERT</a>, une version distillée de BERT étant 60% plus rapide, 40% plus légère en mémoire, et conservant tout de même 97% performances initiales de BERT</p></li>
<li><p><strong>Octobre 2019</strong>: <a href="https://arxiv.org/abs/1910.13461" rel="nofollow">BART</a> et <a href="https://arxiv.org/abs/1910.10683" rel="nofollow">T5</a>, deux modèles larges pré-entraînés utilisant la même architecture que le modèle Transformer originel (les premiers à faire cela)</p></li>
<li><p><strong>Mai 2020</strong>, <a href="https://arxiv.org/abs/2005.14165" rel="nofollow">GPT-3</a>, une version encore plus grande que GPT-2 ayant des performances très bonnes sur une variété de tâches ne nécessitant pas de fine-tuning (appellé <em>zero-shot learning</em>)</p></li></ul>
<p>Cette liste est loin d’être exhaustive, et permet juste de mettre en lumière certains modèles Transformers. Plus largement, ces modèles peuvent être regroupés en trois catégories :</p>
<ul><li>GPT-like (aussi appelé modèles Transformers <em>auto-regressif</em>)  </li>
<li>BERT-like (aussi appelé modèles Transformers <em>auto-encodeur</em>)</li>
<li>BART/T5-like (aussi appelé modèles Transformers <em>séquence-à-séquence</em>)</li></ul>
<p>Nous verrons plus en profondeur ces familles de modèles plus tard.</p>
<h2 class="relative group"><a id="transformers-des-modles-du-langage" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#transformers-des-modles-du-langage"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a>
	<span>Transformers, des modèles du langage
	</span></h2>

<p>Tous les modèles Transformers mentionné ci-dessus (GPT, BERT, BART, T5, etc.) ont été entraînés comme des <em>modèles du langage</em>. Cela signifie qu’ils ont été entraînés sur une large quantité de textes bruts en mode auto-supervisé. L’apprentissage auto-supervisé est un type d’entraînement où l’objectif est automatiquement déterminé par les entrées du modèle. Cela veut dire qu’une labellisation des données par des humains n’est pas nécessaire !</p>
<p>Ce type de modèle développe une compréhension statistique du langage sur lequel il est entraîné, mais cela n’est pas adapté à une tâche spécifique. A cause de cela, le modèle pré-entraîné doit ensuite suivre une procédure de <em>transfer learning</em>. Durant cette procédure, le modèle est fine-tuné en mode supervisé — en utilisant des données labellisées par un human — sur une tâche donnée.</p>
<p>Un exemple de tâche est la prédiction du prochain mot de la phrase en ayant lu les <em>n</em> mots précédents. Ce procédé s’appelle <em>modélisation du langage causal</em> car les prédictions dépendent des entrées précédentes et actuelles, mais pas des suivantes.</p>
<div class="flex justify-center"><img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/causal_modeling.svg" alt="Example of causal language modeling in which the next word from a sentence is predicted.">
<img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/causal_modeling-dark.svg" alt="Example of causal language modeling in which the next word from a sentence is predicted."></div>
<p>Un autre exemple est la <em>modélisation du langage contextuel</em>, où me modèle doit prédire un mot masqué dans une phrase.</p>
<div class="flex justify-center"><img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/masked_modeling.svg" alt="Example of masked language modeling in which a masked word from a sentence is predicted.">
<img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/masked_modeling-dark.svg" alt="Example of masked language modeling in which a masked word from a sentence is predicted."></div>
<h2 class="relative group"><a id="les-modles-transformers-sont-normes" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#les-modles-transformers-sont-normes"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a>
	<span>Les modèles Transformers sont énormes
	</span></h2>

<p>En dehors de quelques exceptions (comme DistilBERT), la stratégie générale pour obtenir de meilleure performance consiste à augmenter la taille des modèles ainsi que la quantité de données utilisées pour l’entraînement de ces derniers.</p>
<div class="flex justify-center"><img src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/model_parameters.png" alt="Number of parameters of recent Transformers models" width="90%"></div>
<p>Malheureusement, entraîner un modèle, et particulièrement un modèle large, nécessite une importante quantité de données. Cela devient très coûteux en terme de temps et de ressources de calcul. Cela se traduit même par un impact environnemental, comme le montre le graphique suivant.</p>
<div class="flex justify-center"><img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/carbon_footprint.svg" alt="The carbon footprint of a large language model.">
<img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/carbon_footprint-dark.svg" alt="The carbon footprint of a large language model."></div>
<iframe class="w-full xl:w-4/6 h-80" src="https://www.youtube-nocookie.com/embed/ftWlj4FBHTg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>Et cela présente un projet pour un (gigantesque) modèle mené par une équipe qui essaye consciemment de réduire l’impact environnemental du pré-entraînement. L’empreinte environnemental serait encore plus conséquente s’il fallait lancer beaucoup d’entraînements pour obtenir les meilleurs hyper-paramètres.</p>
<p>Imaginez si à chaque fois qu’une équipe de recherche, qu’une organisation étudiante ou qu’une entreprise voulait entraîner un modèle, ils devaient repartir de zéro. Ceci menerait à des énormes et non-nécessaires coûts environnementaux.</p>
<p>C’est pourquoi le partage des modèles du langage est primordial : partager les poids d’entraînement et construire à partir de ces poids permet de réduire les coûts de calcul globaux ainsi que l’empreinte carbone de toute la communauté.</p>
<h2 class="relative group"><a id="le-transfer-learning" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#le-transfer-learning"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a>
	<span>Le Transfer Learning
	</span></h2>

<iframe class="w-full xl:w-4/6 h-80" src="https://www.youtube-nocookie.com/embed/BqqfQnyjmgg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>Le <em>Pré-entraînement</em> est le fait d’entraîner un modèle de zéro : les poids sont initialisés de manière aléatoire, et l’entraînement débute sans aucune connaissance préalable (ou heuristique).</p>
<div class="flex justify-center"><img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/pretraining.svg" alt="The pretraining of a language model is costly in both time and money.">
<img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/pretraining-dark.svg" alt="The pretraining of a language model is costly in both time and money."></div>
<p>Ce pré-entraînement est habituellement réalisé sur de grande quantité de données. Il nécessite donc un très grand corpus de données, et l’entraînement peut prendre jusqu’à plusieurs semaines.</p>
<p>Le <em>Fine-tuning</em>, d’un autre côté, est un entraînement effectué <strong>après</strong> qu’un modèle ait été pré-entraîné. Pour réaliser le fine-tuning, il faut d’abord récupèrer un modèle du langage pré-entraîné, puis lancé un entraînement sur un jeu de données adapté à la tâche cible. Mais attendez — pourquoi ne pas simplement entraîné un modèle sur la tâche cible ? Voici plusieurs raisons :</p>
<ul><li>Le modèle pré-entraîné a déjà été entraîné sur un jeu de données qui a des similarités avec le jeu de données utilisé pour le fine-tuning. Ainsi le processus de fine-tuning peut bénéficier du savoir acquis par le modèle initial lors du pré-entraînement (par exemple, avec des problèmes de NLP, le modèle pré-entraîné aura une sorte de compréhension statistique de la langue associée à la tâche cible).</li>
<li>Puisque le modèle pré-entraîné a déjà été entraîné sur beaucoup de données, le fine-tuning nécessite beaucoup moins de données pour obtenir des résultats décents.</li>
<li>Pour la même raison, la quantité de temps et de ressources nécessaires pour obtenir de bons résultats est beaucoup moins grande.</li></ul>
<p>Par exemple, il serait possible de tirer prodit d’un modèle pré-entraîné sur la langue anglaise and ensuite fine-tuné sur un corpus arXiv, permettant d’obtenir un modèle basé sur la recherche et la science. Le fine-tuning ne nécessiterait qu’une quantité réduite de données : le savoir acquis par le modèle pré-entraîné est transféré au nouveau modèle, d’où le terme de <em>transfer learning</em>.</p>
<div class="flex justify-center"><img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/finetuning.svg" alt="The fine-tuning of a language model is cheaper than pretraining in both time and money.">
<img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/finetuning-dark.svg" alt="The fine-tuning of a language model is cheaper than pretraining in both time and money."></div>
<p>Le fine-tuning d’un modèle nécessite ainsi moins de temps, de données, d’argent et a un impact environnemental réduit. Il est également possible d’itérer plus rapidement sur différentes stratégies de fine-tuning, puisque l’entraînement est moins contraignant qu’un entraînement complet.</p>
<p>Ce procédé permet également d’obtenir de meilleurs résultats qu’un entraînement de zéro (sauf si on dispose de beaucoup de données), ce qui explique pourquoi il faut toujours essayer de tirer profit d’un modèle pré-entraîné — un qui est le plus proche de la tâche cible — et de le fine-tuner.</p>
<h2 class="relative group"><a id="architecture-gnrale" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#architecture-gnrale"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a>
	<span>Architecture générale
	</span></h2>

<p>Dans cette section, nous allons voir l’architecture générale des modèles Transformers. Pas d’inquiétudes si vous ne comprenez pas tous les concepts; il y a des sections détaillées qui couvrent chaque composants plus tard.</p>
<iframe class="w-full xl:w-4/6 h-80" src="https://www.youtube-nocookie.com/embed/H39Z_720T5s" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<h2 class="relative group"><a id="introduction" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#introduction"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a>
	<span>Introduction
	</span></h2>

<p>Le modèle est principalement composé de deux blocs :</p>
<ul><li><strong>Encodeur (gauche)</strong>: L’encodeur reçoit une entrée et contruit une réprésentation de celle-ci (ses caractéristiques). Cela signifie que le modèle est optimisé pour acquérir une compréhension venant de ces entrées.</li>
<li><strong>Décodeur (droite)</strong>: Le décodeur utilise la réprésentation de l’encodeur (caractéristiques) en plus des autres entrées pour générer une séquence cible. Cela signifie que le modèle est optimisé pour générer des sorties.</li></ul>
<div class="flex justify-center"><img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/transformers_blocks.svg" alt="Architecture of a Transformers models">
<img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/transformers_blocks-dark.svg" alt="Architecture of a Transformers models"></div>
<p>Chacune de ces parties peuvent être utilisées indépendamment, en fonction de la tâche :</p>
<ul><li><strong>Modèles uniquement encodeurs</strong> : Adaptés pour des tâches qui nécessitent une compréhension de l’entrée, comme la classification de phrases et la reconnaissance d’entités nommées.</li>
<li><strong>Modèles uniquement décodeurs</strong> : Adaptés pour les tâches génératives telles que la génération de texte.</li>
<li><strong>Modèles encodeurs-décodeurs</strong> ou <strong>modèles de séquence-à-séquence</strong> : Adaptés aux tâches génératives qui nécessitent une entrée, telles que la traduction ou le résumé de texte.</li></ul>
<p>Nous verrons plus en détails chacune de ces architectures plus tard.</p>
<h2 class="relative group"><a id="les-couches-dattention" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#les-couches-dattention"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a>
	<span>Les couches d&#39;attention
	</span></h2>

<p>Une caractéristique clef des modèles Transformers est qu’ils sont construits avec des couches spéciales appellées <em>couches d’attention</em>. En fait, le titre de la publication qui a présenté l’architecture Transformer est <a href="https://arxiv.org/abs/1706.03762" rel="nofollow">“Attention Is All You Need”</a> ! Nous allons explorer les détails des couches d’attention plus tard dans ce cours; pour le moment, ce qu’il faut retenir est que la couche d’attention va indiquer au modèle les mots, de la phrase d’entrée, sur lesquels porter son attention (et plus ou moins ignorer les autres) lorsqu’il s’agit de construire une représentation de chaque mot.</p>
<p>Pour mettre ceci en contexte, considérons la tâche de traduction de l’anglais vers le français. Étant donné l’entrée “You like this course”, un modèle de traduction devra également s’occuper du mot adjacent “You” pour obtenir la traduction correcte du mot “like”, car en français le verbe “aimer” est conjugué différemment selon l’objet. Le reste de la phrase, cependant, n’est pas utile pour la traduction de ce mot. De même, lors de la traduction de “this”, le modèle devra également faire attention au mot “course”, car “this” se traduit différemment selon que le nom associé est masculin ou féminin. Encore une fois, les autres mots de la phrase n’auront pas d’importance pour la traduction de “this”. Avec des phrases plus complexes (et des règles de grammaire plus complexes), le modèle devrait accorder une attention particulière aux mots qui pourraient apparaître plus loin dans la phrase pour traduire correctement chaque mot.</p>
<p>Le même concept s’applique à n’importe quelle tâche associée au langage naturel : un mot seul est porteur de sens, mais ce sens est profondément affecté par le contexte, qui peut être un ou plusieurs mots se situant avant ou après le mot étudié.</p>
<p>Maintenant que vous avez une idée plus précise des couches d’attentions, nous allons regarder de plus près l’architecture des modèles Transformers.</p>
<h2 class="relative group"><a id="larchitecture-originelle" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#larchitecture-originelle"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a>
	<span>L&#39;architecture originelle
	</span></h2>

<p>L’architecture Transformer a initialement été construite pour des tâches de traduction. Pendant l’entraînement, l’encodeur reçoit des entrées (des phrases) dans une certaine langue, tandis que le décodeur reçoit la même phrase traduite dans la langue cible. Pour l’encodeur, les couches d’attention peuvent utiliser tous les mots d’une phrase (puisque, comme nous venons de le voir, la traduction d’un mot donné peut dépendre de ce qui le suit ou le précède dans la phrase). Le décodeur, quant à lui, fonctionne de façon séquentielle et ne peut porter son attention qu’aux mots déjà traduits dans la phrase (donc, uniquement les mots générés avant le mot en cours). Par exemple, lorsqu’on a prédit les trois premiers mots de la phrase cible, on les donne au décodeur qui utilise alors toutes les entrées de l’encodeur pour essayer de prédire le quatrième mot.</p>
<p>Pour accélérer les choses pendant l’apprentissage (lorsque le modèle a accès aux phrases cibles), le décodeur est alimenté avec la cible entière, mais il n’est pas autorisé à utiliser les mots futurs (s’il avait accès au mot en position 2 lorsqu’il essayait de prédire le mot en position 2, le problème ne serait pas très difficile !). Par exemple, en essayant de prédire le quatrième mot, la couche d’attention n’aura accès qu’aux mots des positions 1 à 3.</p>
<p>L’architecture originale des modèles Transformers ressemblait à ceci, avec l’encodeur à gauche et le décodeur à droite :</p>
<div class="flex justify-center"><img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/transformers.svg" alt="Architecture of a Transformers models">
<img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/transformers-dark.svg" alt="Architecture of a Transformers models"></div>
<p>Notez que la première couche d’attention dans un bloc décodeur porte sont attention à toutes les entrées (passées) du décodeur, mais la seconde couche d’attention utilise la sortie de l’encodeur. Il peut ainsi accéder à toute la phrase d’entrée pour prédire au mieux le mot actuel. Ceci est très utile puisque les différentes langues peuvent avoir des règles grammaticales qui placent les mots dans des ordres différents, ou un contexte fourni plus tard dans la phrase peut être utile pour déterminer la meilleure traduction d’un mot donné.</p>
<p>Le <em>masque d’attention</em> peut également être utilisé dans un modèle encodeur/décodeur pour l’empêcher de porter son attention sur certains mots spéciaux — par exemple, le motde remplissage spécial utilisé pour que toutes les entrées aient la même longueur lors du regroupement de phrases.</p>
<h2 class="relative group"><a id="architectures-contre-checkpoints" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#architectures-contre-checkpoints"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a>
	<span>Architectures contre checkpoints
	</span></h2>

 
En approfondissant l&#39;étude des modèles Transformers dans ce cours, vous verrez des mentions d&#39;*architectures* et de *checkpoints* ainsi que de *modèles*. Ces termes ont tous des significations légèrement différentes :
<ul><li><strong>Architecture</strong>: C’est le squelette du modèle — la définition de chaque couche et chaque opération qui se produit au sein du modèle.</li>
<li><strong>Checkpoints</strong>: Ce sont les poids qui seront chargés dans une architecture donnée.</li>
<li><strong>Model</strong>: C’est un mot valise n’étant pas aussi précis que les mots “architecture” ou “checkpoint”: il peut désigner l’un comme l’autre. Dans ce cours, il sera spécifié <em>architecture</em> ou <em>checkpoint</em> lorsqu’il est nécessaire de réduire l’ambiguité.</li></ul>
<p>Par exemple, BERT est une architecture alors que <code>bert-base-cased</code>, un ensemble de poids entraîné par l’équipe de Google lors de la première sortie de BERT, est un checkpoint. Cependant, il est possible de dire “le modèle BERT” et “le modèle <code>bert-base-cased</code>“.</p>


		<script type="module" data-hydrate="1kb4tc7">
		import { start } from "/docs/course/pr_131/fr/_app/start-a454088d.js";
		start({
			target: document.querySelector('[data-hydrate="1kb4tc7"]').parentNode,
			paths: {"base":"/docs/course/pr_131/fr","assets":"/docs/course/pr_131/fr"},
			session: {},
			route: false,
			spa: false,
			trailing_slash: "never",
			hydrate: {
				status: 200,
				error: null,
				nodes: [
					import("/docs/course/pr_131/fr/_app/pages/__layout.svelte-05c2fb0c.js"),
						import("/docs/course/pr_131/fr/_app/pages/chapter1/4.mdx-48ebeaf9.js")
				],
				params: {}
			}
		});
	</script>
