Module L15 · Partie H · Intelligence artificielle
Comment fonctionne un grand modèle de langage.
ChatGPT, Claude, Gemini : des transformeurs, entraînés à prédire le mot suivant. Ce module part du modèle de langue le plus simple (compter les paires de lettres), passe par les plongements et les réseaux récurrents, puis construit le mécanisme d’attention et un mini-transformeur en NumPy. À la fin, vous aurez entraîné dans la page un modèle qui génère des noms de robots plausibles — et vous saurez ce qui se passe derrière chaque réponse d’un assistant IA.
Durée : 4 séances · Prérequis : L14. Objectifs : modèle de langue et perplexité, tokenisation, plongements (embeddings), RNN et leurs limites, attention (Q, K, V), attention multi-têtes et masquage causal, blocs transformeurs, pré-entraînement / ajustement / RLHF (vue d’ensemble), lois d’échelle, limites et questions ouvertes.
Ce que vous saurez faire à la fin
- Expliquer et coder le calcul d’attention et sa complexité en O(n²).
- Entraîner un modèle de langue au niveau caractère et en générer des textes.
- Lire l’architecture d’un transformeur (GPT) et situer chaque composant.
- Discuter les limites (hallucinations, contexte, coût) avec des arguments techniques.
Références : « Attention Is All You Need » (Vaswani et al., 2017), « The Illustrated Transformer » (Alammar), « Let’s build GPT » et « makemore » (Karpathy), cours CS224n (Stanford), Dive into Deep Learning chapitres 9-11.
Fiche de cours · Définitions
Deep learning et transformers : définitions
Fiche de cours · Formules
Formules à connaître
| Architecture | Données | Inductive bias | Coût par couche |
|---|---|---|---|
| MLP | Vecteurs | Aucun | O(d²) |
| CNN | Images, signaux | Localité, translation | O(n·k²·C²) |
| RNN / LSTM | Séquences | Ordre, récurrence | O(n·d²), séquentiel |
| Transformer | Séquences, images (patchs), graphes | Aucun sur la position (ajouté), tout-à-tout | O(n²d + nd²), parallèle |
Fiche de cours · Théorèmes et démonstrations
Démonstrations à savoir refaire (1/2)
Fiche de cours · Théorèmes et démonstrations
Démonstrations à savoir refaire (2/2)
Fiche de cours · Méthodes
Méthodes et pièges
Pièges : oublier le masque causal en génération (le modèle « triche » à l’entraînement puis échoue) ; tokenisation différente entre entraînement et inférence ; fenêtre de contexte dépassée silencieusement ; comparer des modèles à des nombres de tokens vus différents ; confondre « le modèle produit une phrase plausible » et « vraie ».
Fiche de cours · Exercices corrigés
Exercices corrigés
01 / Modèles de langue
Le modèle le plus simple : compter les bigrammes
Ce qu’est un modèle de langue
Une distribution de probabilité sur le prochain symbole sachant les précédents : P(x_t | x_1 … x_{t−1}). Générer = tirer au sort selon cette distribution, symbole après symbole. Évaluer = mesurer la probabilité que le modèle attribue à des textes réels (perplexité : « entre combien de choix le modèle hésite »). Le bigramme ne regarde que la lettre précédente ; GPT regarde des milliers de mots. Mais l’objectif, la génération et l’évaluation sont identiques. Le fameux « prédire le mot suivant » est exactement ceci, à grande échelle.
01 / Modèles de langue
Plongements : des symboles aux vecteurs
Dans un LLM, la table E a ~100 000 lignes (les tokens : morceaux de mots) et 4 000 à 16 000 colonnes. Les fameuses analogies « roi − homme + femme ≈ reine » (word2vec, 2013) viennent de ce que les plongements appris par prédiction du contexte capturent des régularités sémantiques — sans qu’on les ait programmées.
02 / Séquences
Réseau récurrent : un état qui résume le passé, et pourquoi il oublie
Le gradient qui disparaît, encore
Pour relier la sortie au temps t à l’entrée au temps t − k, le gradient traverse k fois Wh et tanh′ (≤ 1) : il s’évanouit (ou explose) exponentiellement en k. Un RNN simple ne retient guère plus de 10-20 pas. Les LSTM (1997) et GRU ajoutent des « portes » qui laissent passer l’information sans la multiplier — ils ont dominé la traduction et la parole jusqu’en 2017. Mais ils restent séquentiels : impossible de paralléliser sur la longueur, donc lents à entraîner sur des milliards de mots. L’attention résout les deux problèmes.
03 / Attention
L’attention : chaque position interroge toutes les autres
Lire l’attention comme une base de données floue
Chaque position émet une requête (« que cherche-je ? »), une clé (« que contiens-je ? ») et une valeur (« que transmets-je ? »). Le score requête·clé mesure la pertinence ; le softmax en fait des poids ; la sortie est la somme pondérée des valeurs. Contrairement au RNN, la position 100 accède à la position 1 en un pas, sans dégradation ; et tout se calcule par des produits matriciels parallèles. Le prix : n² scores. D’où les recherches sur l’attention linéaire, les fenêtres glissantes, FlashAttention (même calcul, mémoire optimisée) et les « états » façon RNN qui reviennent (Mamba) — un front de recherche actif.
03 / Attention
Multi-têtes, position, bloc transformeur
Anatomie de GPT
- Tokenisation (BPE) : le texte devient des entiers (morceaux de mots).
- Plongement de token + plongement de position (sans lui, l’attention ne sait pas l’ordre : c’est un ensemble, pas une séquence).
- N blocs : attention causale multi-têtes → MLP, chacun avec normalisation et résiduel.
- Tête de sortie : projection vers le vocabulaire, softmax, entropie croisée sur le token suivant.
Les têtes multiples permettent d’attendre à plusieurs choses à la fois (syntaxe, coréférence, position). Le MLP « par position » stocke l’essentiel des connaissances factuelles. Les résiduels et la normalisation (module L14) rendent 96 blocs entraînables.
03 / Attention
Entraîner un mini-transformeur avec autodiff : générer des noms de robots
Un transformeur complet — plongements, position, attention causale, MLP, normalisations, résiduels, Adam — en 60 lignes, avec ses gradients dérivés à la main (l’attention et la normalisation sont les deux dérivations délicates : comparez-les aux formules des modules L14 et L12). La perte descend, les noms générés ressemblent aux noms d’entraînement sans les copier. GPT-2 est ce code avec d = 768, 12 blocs et 40 Go de texte.
04 / Les grands modèles
Du transformeur à l’assistant : pré-entraînement, ajustement, RLHF
| Étape | Données | Objectif | Résultat |
|---|---|---|---|
| 1. Pré-entraînement | Des milliers de milliards de tokens (web, livres, code) | Prédire le token suivant | Un modèle « de base » qui complète du texte, sait beaucoup, mais n’obéit pas |
| 2. Ajustement supervisé (SFT) | Dizaines de milliers de dialogues écrits par des humains | Imiter les réponses | Un modèle qui répond aux instructions |
| 3. Apprentissage par préférences (RLHF / DPO) | Paires de réponses classées par des humains | Maximiser la préférence humaine (module L16) | Un assistant utile, honnête, inoffensif — en principe |
Lois d’échelle et émergence
Kaplan (2020) et Hoffmann (« Chinchilla », 2022) ont montré que la perte suit des lois de puissance en fonction des paramètres, des données et du calcul, et qu’il faut ≈ 20 tokens par paramètre pour un entraînement efficace. Des capacités (arithmétique à plusieurs chiffres, raisonnement en chaîne) apparaissent à certaines tailles sans avoir été programmées — « émergence », dont la réalité statistique est débattue. Coût : GPT-4 ≈ 1025 opérations, des dizaines de millions de dollars et des mégawatts. Sur votre PC : un modèle de 7 milliards de paramètres quantifié en 4 bits tourne sur une carte graphique grand public (llama.cpp).
Ce qu’un LLM ne fait pas
- Il ne « sait » pas ce qui est vrai : il produit le token le plus probable. D’où les hallucinations, réduites mais pas éliminées par RLHF et la recherche documentaire (RAG).
- Il ne calcule pas : l’arithmétique est apprise par cœur, mal ; d’où l’appel à des outils (calculatrice, Python) — ce que fait cet assistant que vous utilisez.
- Son contexte est fini (n² oblige) ; il n’a pas de mémoire entre les conversations sauf si on la lui donne.
- Ses biais sont ceux de ses données ; son « alignement » est un problème de recherche ouvert (module L24).
04 / Les grands modèles
Au-delà du texte : vision, robotique, modèles génératifs
Le transformeur est devenu l’architecture universelle : texte (GPT), images (ViT, DALL·E), son (Whisper), protéines (AlphaFold 2), jeux (AlphaStar), robots (RT-2). La raison profonde : c’est un opérateur générique sur des ensembles de vecteurs, qui apprend lui-même quelles relations comptent. Comprendre ses limites — et ce qui viendra après — est l’un des sujets de recherche les plus actifs au monde.
Cours
Cours 1 — Modèles de langue : définition, factorisation, évaluation
Définition. Un modèle de langue attribue une probabilité à toute suite de tokens x1…xT. Par la règle de la chaîne (probabilités, L11), P(x1..T) = Πt P(xt | x1..t−1) : il suffit de modéliser « le suivant sachant le passé ». Un modèle n-gramme tronque le passé aux n−1 derniers tokens (Markov d’ordre n−1) ; un réseau récurrent le résume dans un état ; un transformeur regarde tout le contexte (borné par la fenêtre).
| Mesure | Formule | Interprétation |
|---|---|---|
| Entropie croisée | H = −(1/T) Σ log2 P(xt | passé) | Bits par token ; ce qu’on minimise à l’entraînement |
| Perplexité | 2H (ou eH en nats) | « Nombre de choix équiprobables équivalent » ; uniforme sur V tokens : V |
| Repères | GPT-2 : ≈ 20-30 de perplexité par mot sur WikiText ; humains ≈ 10-12 | Plus bas = meilleur ; dépend du tokeniseur et du corpus, donc à comparer à tokeniseur égal |
Échantillonner. À la génération, tirer selon P (température 1), ou aplatir/aiguiser avec une température τ : P ∝ exp(logits/τ) — τ → 0 : argmax (déterministe, répétitif) ; τ > 1 : plus créatif, plus d’erreurs. Top-k / top-p : ne tirer que parmi les k meilleurs / la masse p. Ces réglages expliquent le comportement des assistants IA.
Cours
Cours 2 — Exemple travaillé : dériver la passe arrière de l’attention
Avant. S = QKᵀ/√d, A = softmax(S) (par ligne), O = AV. Notons dO = ∂J/∂O (donné par la couche suivante).
- Traverser O = AV : dA = dO Vᵀ, dV = Aᵀ dO (règles de la couche affine, L14).
- Traverser le softmax par ligne : pour une ligne a = softmax(s), la jacobienne est diag(a) − a aᵀ, donc dS = a ⊙ (dA − ⟨dA, a⟩) — le terme ⟨dA, a⟩ = Σj dAj aj est soustrait à toute la ligne. En matrices : dS = A ⊙ (dA − rowsum(dA ⊙ A)).
- Traverser S = QKᵀ/√d : dQ = dS K/√d, dK = dSᵀ Q/√d.
- Masque causal : les positions masquées ont a = 0, donc dS = 0 : rien à faire de plus.
Vérification (comme toujours) par différences finies sur une petite matrice — c’est exactement ce que fait la cellule du mini-transformeur du cours (méthode attention_causale). Coût : mêmes produits n×n que l’avant ; mémoire O(n²) pour stocker A — d’où FlashAttention, qui recalcule A par blocs dans la passe arrière plutôt que de la garder.
Cours
Cours 3 — Utiliser un LLM comme composant : API, prompts, RAG, agents, évaluation
| Technique | Principe | Quand | Piège |
|---|---|---|---|
| Prompt structuré | Rôle, tâche, format de sortie (JSON), exemples (few-shot) | Toujours | Ambiguïté → réponses variables ; tester sur 50 cas |
| Chaîne de pensée | Demander les étapes avant la réponse | Raisonnement, calcul | Plus long, plus cher ; les étapes peuvent être fausses mais la réponse juste, et l’inverse |
| RAG | Chercher des documents (plongements + similarité cosinus) et les mettre dans le contexte | Connaissances privées ou récentes | Qualité de la recherche ; le modèle peut ignorer ou contredire le contexte |
| Outils / fonctions | Le modèle émet un appel (calculatrice, SQL, API du robot), le programme l’exécute et renvoie le résultat | Calcul exact, actions | Valider chaque appel avant exécution ; jamais d’action irréversible sans confirmation |
| Agent | Boucle observer → réfléchir → agir, avec mémoire | Tâches multi-étapes | Boucles infinies, coûts, dérive ; borner le nombre d’étapes |
| Ajustement (fine-tuning, LoRA) | Réentraîner quelques paramètres sur vos données | Style, format, domaine étroit | Coût, données étiquetées, oubli |
| Évaluation | Jeu de test avec réponses attendues ; métriques automatiques + relecture humaine ; LLM-juge avec prudence | Avant tout déploiement | Contamination (le test est dans les données d’entraînement) |
Règle pour un robot piloté par LLM : le modèle propose, un programme classique vérifie (plage des commandes, sécurité, L21) et exécute. Le LLM n’est jamais dans la boucle de sécurité.
TP guidé
TP — nanoGPT sur vos propres textes, puis un modèle local avec outils (sur PC, 3 h)
- Corpus. Un fichier texte de 1 à 5 Mo : vos notes de cours, un livre du domaine public (Gutenberg), des paroles…
wc -c corpus.txt. Tokeniseur caractère (L15) puis BPE maison (défi ★) : comparez le nombre de tokens. - nanoGPT.
git clone https://github.com/karpathy/nanoGPT; suivez le README « quick start » (Shakespeare caractère) ; entraînez 5 minutes sur CPU (--device=cpu --compile=False, blocs et couches réduits). Lisezmodel.pyligne à ligne : retrouvezCausalSelfAttention,MLP,Block, les plongements de position — exactement le mini-transformeur du cours, en PyTorch. - Votre corpus. Adaptez
data/; entraînez ; échantillonnez avec plusieurs températures ; mesurez la perplexité sur une partie tenue à l’écart. Faites varier une chose à la fois (taille du contexte, nombre de têtes, dimension) et notez la perte de validation. - Modèle local. Installez Ollama (ou llama.cpp) et un modèle ouvert de 3 à 8 milliards de paramètres. Mesurez tokens/s. Écrivez un script Python qui l’interroge via son API HTTP (L08) : prompt structuré, sortie JSON, 20 questions de test avec réponses attendues, taux de réussite.
- Outils. Ajoutez deux « outils » : une calculatrice et une fonction
etat_robot()(simulée). Le modèle doit répondre par un appel JSON{"outil": …, "args": …}que votre programme exécute, puis renvoyer le résultat au modèle. Testez : « quelle est la distance du robot au mur multipliée par 3 ? ». Comptez les échecs de format et ajoutez une validation + une relance. - Livrable. Dépôt : corpus (ou lien), configuration nanoGPT, courbes de perte, échantillons commentés, script d’évaluation du modèle local avec taux de réussite, et une page « ce que le modèle fait bien / mal et pourquoi (taille de contexte, tokenisation, connaissances) ».
Exercices
Exercices auto-corrigés — modèles de langue
Exercice 1 — Trigramme lissé et perplexité
Écrivez Trigramme : entraînement par comptage sur des mots (préfixe de deux tokens « <s> <s> », fin « </s> »), probabilité avec lissage additif α, log_prob(phrase) et perplexite(phrases) (en base e, par token, fin de phrase comprise). Vérifiez que la perplexité sur le corpus d’entraînement est plus basse que sur des phrases nouvelles, et qu’un α plus grand la rapproche de |V|.
Correction
class Trigramme:
def __init__(self, phrases, alpha=0.1):
self.alpha = alpha; self.c3 = Counter(); self.c2 = Counter(); self.vocab = {"</s>"}
for ph in phrases:
t = ["<s>", "<s>"] + ph.split() + ["</s>"]; self.vocab |= set(t[2:])
for a, b, c in zip(t, t[1:], t[2:]): self.c3[(a, b, c)] += 1; self.c2[(a, b)] += 1
def prob(self, w1, w2, w3): return (self.c3[(w1, w2, w3)] + self.alpha) / (self.c2[(w1, w2)] + self.alpha * len(self.vocab))
def log_prob(self, phrase):
t = ["<s>", "<s>"] + phrase.split() + ["</s>"]
return sum(math.log(self.prob(a, b, c)) for a, b, c in zip(t, t[1:], t[2:]))
def perplexite(self, phrases):
n = sum(len(p.split()) + 1 for p in phrases); return math.exp(-sum(self.log_prob(p) for p in phrases) / n)Exercice 2 — Plongements de position sinusoïdaux et attention relative
a) positions_sinus(n, d) : la matrice de l’article (« Attention Is All You Need », §3.5) : PE[pos, 2i] = sin(pos/100002i/d), PE[pos, 2i+1] = cos(…). b) Montrez numériquement que PE[pos+k] est une fonction linéaire de PE[pos] pour k fixé : pour chaque paire (2i, 2i+1), une rotation de l’angle k·ωi. Écrivez decaler(PE_pos, k, d) qui applique ces rotations et vérifiez qu’on retrouve PE[pos+k].
Correction
def positions_sinus(n, d):
pos = np.arange(n)[:, None]; i = np.arange(0, d, 2)[None, :]; ang = pos / 10000 ** (i / d)
PE = np.zeros((n, d)); PE[:, 0::2] = np.sin(ang); PE[:, 1::2] = np.cos(ang); return PE
def decaler(pe, k, d):
out = pe.copy()
for j, i in enumerate(range(0, d, 2)):
w = 1 / 10000 ** (i / d); c, s = np.cos(k * w), np.sin(k * w)
sn, cs = pe[i], pe[i + 1]
out[i], out[i + 1] = sn * c + cs * s, cs * c - sn * s # sin(a+b), cos(a+b)
return outExercices
Exercices auto-corrigés — attention et génération
Exercice 3 — Attention multi-têtes avec masque de remplissage (padding)
Dans un lot, les séquences ont des longueurs différentes : on complète par des tokens de remplissage qui ne doivent recevoir aucune attention. Écrivez attention_multi(X, Wq, Wk, Wv, Wo, h, masque) où masque (n,) vaut True pour les positions réelles : les colonnes de remplissage reçoivent −∞ avant le softmax. Vérifiez que la sortie des positions réelles ne change pas quand on modifie les vecteurs des positions de remplissage.
Correction
def attention_multi(X, Wq, Wk, Wv, Wo, h, masque):
n, d = X.shape; dk = d // h
Q, K, V = [(X @ Wm).reshape(n, h, dk).transpose(1, 0, 2) for Wm in (Wq, Wk, Wv)]
S = Q @ K.transpose(0, 2, 1) / np.sqrt(dk); S = np.where(masque[None, None, :], S, -1e9)
A = np.exp(S - S.max(-1, keepdims=True)); A /= A.sum(-1, keepdims=True)
return (A @ V).transpose(1, 0, 2).reshape(n, d) @ WoExercice 4 — Recherche en faisceau (beam search)
Avec le modèle Trigramme de l’exercice 1, écrivez beam_search(modele, largeur, max_len) qui génère la phrase la plus probable (log-prob totale) en gardant à chaque étape les largeur meilleures hypothèses ; comparez à la génération gloutonne (largeur 1). Une hypothèse est terminée quand elle émet </s>.
Correction
def beam_search(m, largeur=3, max_len=8):
faisceau = [(["<s>", "<s>"], 0.0)]; finis = []
for _ in range(max_len + 1):
cand = []
for seq, lp in faisceau:
for w in m.vocab:
p = lp + math.log(m.prob(seq[-2], seq[-1], w))
if w == "</s>": finis.append((seq[2:], p))
else: cand.append((seq + [w], p))
faisceau = sorted(cand, key=lambda c: -c[1])[:largeur]
if not faisceau: break
return max(finis, key=lambda c: c[1])05 / Défis
Défi ★ — Tokenisation BPE
Consigne
Implémentez l’algorithme Byte-Pair Encoding : partir des caractères, fusionner itérativement la paire adjacente la plus fréquente en un nouveau token, 30 fois, sur le corpus de noms. Affichez le vocabulaire obtenu et la tokenisation de « vortexon ». Puis encodez et décodez un texte : vérifiez que décoder(encoder(t)) == t. Pourquoi les LLM comptent-ils mal les lettres d’un mot ?
Correction (extrait)
from collections import Counter
mots = [list(m) + ["_"] for m in corpus.split()]
fusions = []
for _ in range(30):
paires = Counter((a, b) for m in mots for a, b in zip(m, m[1:]))
if not paires: break
(a, b), _ = paires.most_common(1)[0]; fusions.append((a, b))
mots = [[*m] for m in mots]
for m in mots:
i = 0
while i < len(m) - 1:
if m[i] == a and m[i + 1] == b: m[i:i + 2] = [a + b]
else: i += 1
def encoder(texte):
m = list(texte)
for a, b in fusions:
i = 0
while i < len(m) - 1:
if m[i] == a and m[i + 1] == b: m[i:i + 2] = [a + b]
else: i += 1
return m
print(fusions[:10]); print(encoder("vortexon"))Un LLM voit « vortexon » comme [« vor », « tex », « on »] : il n’a jamais vu les lettres individuellement, d’où ses difficultés à compter les « r » dans « strawberry » — une limite d’interface, pas d’intelligence.
05 / Défis
Défi ★★ — Visualiser l’attention et sonder le modèle
Consigne
1) Modifiez attention_causale pour stocker la matrice A ; après entraînement, affichez-la (imshow) pour le nom « pulsar » : quelles positions regardent quoi ? 2) Ajoutez une 2e tête d’attention (séparer Q, K, V en deux moitiés) et comparez les matrices des deux têtes. 3) « Sonde » linéaire : entraînez une régression logistique (module L13) sur les activations de la couche cachée pour prédire « la lettre courante est une voyelle » : le modèle a-t-il appris cette notion sans qu’on la lui donne ?
Piste
Pour 3) : collectez pour chaque (nom, position) le vecteur x.v après le bloc (24 dimensions) et l’étiquette voyelle/consonne de la lettre à cette position ; entraînez logistique ; une exactitude nettement supérieure à la fréquence des voyelles montre que l’information est linéairement décodable dans les représentations. C’est la méthode de l’interprétabilité mécanistique, un domaine de recherche jeune : comprendre ce que les modèles ont appris en lisant leurs activations (Anthropic, OpenAI, DeepMind y consacrent des équipes).
05 / Défis
Défi ★★★ — Esprit prépa : complexité, contexte long et le retour des récurrences
Consigne
1) Mesurez le temps de la passe avant de Attention pour n = 64, 128, 256, 512, 1024 : vérifiez le O(n²) (et O(n² d) en mémoire pour A). 2) Implémentez l’attention linéaire : remplacer softmax(QKᵀ)V par φ(Q)(φ(K)ᵀV) avec φ(x) = elu(x) + 1 ; montrez que le coût devient O(n d²) et que, en causal, elle s’écrit comme une récurrence (un « état » d × d mis à jour à chaque token — exactement un RNN !). 3) Comparez la qualité (perte) sur les noms de robots avec l’attention softmax. 4) Lisez le résumé de « Mamba » (Gu & Dao, 2023) ou de « RWKV » et expliquez en quoi ces modèles sont des RNN qui s’entraînent comme des transformeurs. Quel est l’enjeu pour un robot qui doit traiter un flux de capteurs de plusieurs heures ?
Correction (extrait : attention linéaire causale comme récurrence)
def phi(x): return np.where(x > 0, x, np.exp(x) - 1) + 1 # elu + 1 > 0
def attention_lineaire_causale(Q, K, Vv):
n, dk = Q.shape; S = np.zeros((dk, Vv.shape[1])); z = np.zeros(dk); out = np.zeros_like(Vv)
for t in range(n): # récurrence : état S (dk × dv), normaliseur z
S += np.outer(phi(K[t]), Vv[t]); z += phi(K[t])
out[t] = phi(Q[t]) @ S / (phi(Q[t]) @ z + 1e-9)
return out
n, dk = 8, 4; Q, K, Vv = [rng.normal(0, 1, (n, dk)) for _ in range(3)]
# Version « parallèle » équivalente pour vérifier (masque causal explicite)
A = np.tril(phi(Q) @ phi(K).T); A /= A.sum(1, keepdims=True)
print(np.allclose(A @ Vv, attention_lineaire_causale(Q, K, Vv)))L’état S résume tout le passé en d×d nombres : coût constant par token, contexte illimité — comme un RNN — mais entraînable en parallèle par la forme matricielle. Le prix est une capacité de « rappel exact » plus faible que le softmax (qui peut pointer précisément une position). Pour un robot, un modèle à état constant est la seule option pour un flux continu ; c’est pourquoi ces architectures (SSM, Mamba, xLSTM) sont très étudiées en robotique et en traitement du signal. Question ouverte : quelle est la bonne combinaison ?
06 / Vérification
Pourquoi un transformeur a-t-il besoin de plongements de position ?
Deux questions supplémentaires
1. Pourquoi le RNN oublie-t-il les positions lointaines ? Le gradient traverse k multiplications par Wh et tanh′ : il décroît exponentiellement en k.
2. Que mesure la perplexité ? exp de l’entropie croisée moyenne : le nombre effectif de choix entre lesquels le modèle hésite à chaque token.
Référence
Les mots à retenir
| Mot | Définition |
|---|---|
| Modèle de langue | P(token suivant | contexte). |
| Perplexité | exp(entropie croisée moyenne). |
| Token / BPE | Unité de texte ; fusions de paires fréquentes. |
| Plongement | Vecteur appris par symbole. |
| RNN / LSTM | État récurrent ; portes contre l’oubli. |
| Attention (Q, K, V) | softmax(QKᵀ/√d)V ; O(n²). |
| Masque causal | Interdire de voir le futur. |
| Multi-têtes | Plusieurs attentions en parallèle, concaténées. |
| Bloc transformeur | Attention + MLP, avec normalisation et résiduels. |
| SFT / RLHF | Ajustement supervisé / par préférences humaines. |
| Lois d’échelle | Perte en loi de puissance du calcul, des données, des paramètres. |
| Attention linéaire / SSM | Coût linéaire, forme récurrente. |
Pour continuer
Vous savez ce qu’il y a dans un LLM
Module suivant : l’apprentissage par renforcement — apprendre par essais et récompenses : bandits, Q-learning, gradient de politique, et le lien avec la robotique et le RLHF.
À faire chez soi
- Suivre « Let’s build GPT: from scratch, in code, spelled out » (Karpathy, 2 h) en codant en PyTorch.
- Lire « Attention Is All You Need » (10 pages) et « The Illustrated Transformer ».
- Faire tourner un modèle ouvert (Llama, Mistral, Qwen) en local avec llama.cpp ou Ollama ; mesurer sa perplexité sur un texte de votre choix.