LYCÉE → PRÉPA · L27

Module L27 · Partie K · Ingénierie de l’IA

Les grands modèles de langue : de la prédiction du token suivant à l’assistant.

Un LLM est un transformer décodeur (L25) entraîné à prédire le token suivant sur des milliers de milliards de tokens, puis aligné pour suivre des consignes. Ce chapitre couvre la chaîne complète : tokenisation (BPE), pré-entraînement et ses données, affinage supervisé, RLHF et DPO, décodage, capacités émergentes et limites (hallucinations, raisonnement, mémoire), coûts d’inférence, quantification, et exécution locale — avec la vue mathématique (vraisemblance, entropie, gradient de politique) et la vue informatique (mémoire, débit, latence).

Durée : 4 séances · Prérequis : L11, L15, L16, L25. Objectifs : implémenter BPE ; expliquer SFT/RLHF/DPO avec leurs équations ; échantillonner correctement ; quantifier un modèle ; faire tourner un LLM local et mesurer ; lire InstructGPT, DPO, LLaMA, GPT-4 report.

Ce que vous saurez faire à la fin
  • Coder un tokeniseur BPE et calculer la perplexité d’un modèle.
  • Écrire la fonction objectif de SFT, la récompense de RLHF et la perte de DPO, et expliquer pourquoi DPO évite le modèle de récompense.
  • Choisir température, top-p, pénalités ; comprendre la génération spéculative.
  • Estimer mémoire et débit d’un modèle en fp16/int8/int4 et le servir localement.

Fiche de cours · Définitions

Définitions

Définition (modèle de langue). Une loi de probabilité sur les suites de tokens, factorisée pθ(x₁…xn) = Πt pθ(xt | x<t). Entraîné par maximum de vraisemblance : minimiser −Σ log pθ(xt | x<t) (entropie croisée). Perplexité = exp(perte moyenne par token) : nombre effectif de choix « équiprobables » à chaque position.
Définition (tokenisation BPE). Byte-Pair Encoding : partir des octets (256 symboles), fusionner itérativement la paire la plus fréquente en un nouveau symbole, jusqu’à un vocabulaire de taille V (32 k–256 k). Un texte est ensuite découpé en appliquant les fusions dans l’ordre appris. Un token ≈ 0,75 mot en anglais, moins en français.
Définition (pré-entraînement, SFT, alignement). Pré-entraînement : token suivant sur un corpus web filtré + code + livres. SFT (supervised fine-tuning) : même perte sur des paires (instruction, réponse) écrites par des humains. Alignement par préférences : à partir de comparaisons humaines (réponse A préférée à B), RLHF (modèle de récompense + PPO) ou DPO (optimisation directe).
Définition (RLHF). Entraîner un modèle de récompense rφ(x, y) sur les préférences (modèle de Bradley-Terry), puis optimiser la politique πθ par gradient de politique (PPO, L16) pour maximiser E[rφ] − β·KL(πθ ‖ πref), la pénalité KL empêchant de s’éloigner du modèle SFT.
Définition (DPO). Direct Preference Optimization : réécrit l’objectif RLHF comme une classification directe des paires préférées, sans modèle de récompense ni échantillonnage.
Définition (décodage). Glouton, échantillonnage à température T, top-k, top-p (nucleus), pénalité de répétition, recherche en faisceau ; génération spéculative : un petit modèle propose k tokens, le grand les vérifie en un passage.
Définition (hallucination). Sortie fluide et confiante mais fausse ou non fondée. Cause structurelle : le modèle optimise la plausibilité, pas la vérité ; il n’a pas de représentation de « je ne sais pas » sauf si on la lui apprend.
Définition (quantification). Représenter les poids sur moins de bits (int8, int4) avec des facteurs d’échelle par groupe : mémoire ÷2–4, débit ×2–3, perte de qualité faible si la méthode est calibrée (GPTQ, AWQ, GGUF k-quants).

Fiche de cours · Formules

Formules à connaître

Perte de pré-entraînement : L(θ) = −(1/N) Σt log pθ(xt | x<t) ; perplexité PPL = eL ; en bits par octet : L/(ln 2 · octets/token)
Bradley-Terry : P(yw ≻ yl | x) = σ(r(x, yw) − r(x, yl)) ; perte du modèle de récompense : −log σ(rφ(x, yw) − rφ(x, yl))
Objectif RLHF : maxθ Ex, y∼πθ[rφ(x, y)] − β·Ex[KL(πθ(·|x) ‖ πref(·|x))]
Solution analytique : π*(y|x) = πref(y|x)·exp(r(x, y)/β)/Z(x) ⇒ r(x, y) = β log[π*(y|x)/πref(y|x)] + β log Z(x)
DPO : L = −E[log σ(β log(πθ(yw|x)/πref(yw|x)) − β log(πθ(yl|x)/πref(yl|x)))]
Température : pT(k) ∝ p(k)1/T ; top-p : plus petit ensemble de tokens de masse ≥ p, renormalisé
Mémoire des poids = N × bits/8 : 7B → 14 Go (fp16), 7 Go (int8), 3,5 Go (int4) ; + cache KV (L25) + activations
Débit en lot de 1 ≈ bande passante mémoire / taille des poids ; en lot de B : jusqu’à B fois plus (calcul partagé) tant que le calcul ne sature pas
Génération spéculative : k tokens proposés, acceptés avec probabilité min(1, pgrand/ppetit) ; distribution finale exactement celle du grand modèle
LoRA : W′ = W + BA avec B ∈ ℝd×r, A ∈ ℝr×d, r ≪ d ; paramètres entraînés 2dr au lieu de d² (r = 16, d = 4096 : 0,8 % des poids)

Fiche de cours · Théorèmes et démonstrations

Démonstrations à savoir refaire

Théorème 1 (la perte de pré-entraînement est une entropie croisée, bornée par l’entropie du langage). Ex∼pvrai[−log pθ(x)] = H(pvrai) + KL(pvrai ‖ pθ) ≥ H(pvrai).
−Σ p log q = −Σ p log p + Σ p log(p/q) = H(p) + KL(p ‖ q), et KL ≥ 0 (inégalité de Gibbs : log est concave, Jensen donne Σ p log(q/p) ≤ log Σ q = 0). La perte minimale est l’entropie du langage lui-même (≈ 1 bit par caractère en anglais selon Shannon) — le terme E des lois d’échelle (L25) en est l’estimation : même un modèle infini ne descend pas sous ≈ 1,7 nats/token sur le web. Lire une perte, c’est mesurer une divergence KL au vrai langage.
Théorème 2 (DPO : la récompense implicite). Le maximum de l’objectif RLHF avec pénalité KL est π*(y|x) ∝ πref(y|x)·exp(r(x, y)/β). Par conséquent r s’exprime en fonction de π* et de πref, et la perte de Bradley-Terry sur les préférences devient une perte directe sur πθ (la perte DPO), sans modèle de récompense.
Pour x fixé, maximiser Ey∼π[r(x, y)] − β KL(π ‖ πref) = −β Ey∼π[log π(y|x) − log πref(y|x) − r(x,y)/β] = −β KL(π ‖ π̃) + β log Z(x), où π̃(y|x) = πref(y|x)er/β/Z(x) est une loi normalisée. La KL est minimale (nulle) pour π = π̃ : c’est π*. Inversons : r(x, y) = β log(π*(y|x)/πref(y|x)) + β log Z(x). Dans la différence r(x, yw) − r(x, yl) du modèle de Bradley-Terry, log Z(x) s’annule ; en remplaçant π* par la politique paramétrée πθ, la perte −log σ(rw − rl) devient exactement la perte DPO. On optimise donc directement πθ par descente de gradient sur des paires — stable, sans PPO. Le gradient pondère chaque paire par σ(r̂l − r̂w) : les paires que le modèle classe mal comptent plus.
Théorème 3 (la génération spéculative est exacte). Si le petit modèle propose y ∼ q et que l’on accepte avec probabilité min(1, p(y)/q(y)), en rééchantillonnant sinon selon norm(max(0, p − q)), le token final suit exactement p.
P(token = y) = q(y)·min(1, p(y)/q(y)) + P(rejet)·(p(y) − q(y))⁺/Σz(p(z) − q(z))⁺. Le premier terme vaut min(q(y), p(y)). P(rejet) = 1 − Σz min(q(z), p(z)) = Σz (p(z) − q(z))⁺ (car Σ p = Σ q = 1). Donc P(y) = min(q, p)(y) + (p − q)⁺(y) = p(y). Le gain : k tokens du petit modèle sont vérifiés en un passage du grand (parallèle sur la séquence, L15 Théorème 4) ; si le taux d’acceptation est α, on obtient ≈ (1 − αk+1)/(1 − α) tokens par passage du grand modèle, jusqu’à 2–3× d’accélération quand la génération est limitée par la bande passante.
Théorème 4 (erreur de quantification uniforme). Quantifier des poids de plage [−a, a] sur b bits avec un pas Δ = 2a/(2b − 1) introduit une erreur de variance Δ²/12 par poids ; l’erreur relative sur une sortie wᵀx est ≈ Δ/(√12·σw), indépendante de la dimension.
Erreur uniforme sur [−Δ/2, Δ/2] (L18, Théorème 6) : variance Δ²/12. Pour y = Σ wixi, l’erreur Σ εixi a une variance (Δ²/12)Σ xi², et y a une variance ≈ σw²Σ xi² ; le rapport des écarts-types est Δ/(√12σw). Pour des poids gaussiens (σw ≈ a/3) en int4 (15 pas) : Δ = 2a/15, rapport ≈ (2/15)·3/3,46 ≈ 0,115 — 11 % de bruit relatif par couche, trop pour être naïf : d’où les facteurs d’échelle par groupe de 32–128 poids (a locale, plus petite), la protection des poids « saillants » (AWQ) et la compensation d’erreur (GPTQ), qui ramènent la dégradation de perplexité sous 1–2 %.

01 / Tokeniser

BPE depuis zéro, et ce que cela change pour le modèle

Conséquences : un mot rare est éclaté en morceaux (« inconnu » → plusieurs tokens) ; les nombres sont découpés bizarrement (« 12345 » ≠ « 123 » + « 45 » selon les fusions) — d’où les faiblesses en arithmétique ; le français coûte ≈ 1,5× plus de tokens que l’anglais avec un vocabulaire appris sur de l’anglais ; et le modèle ne voit jamais de lettres : « combien de r dans strawberry » est une question sur des tokens qu’il ne peut pas décomposer.

02 / Aligner

De SFT à DPO : les trois pertes, implémentées sur un modèle jouet

03 / Décoder

Échantillonnage : température, top-p, pénalité — et la génération spéculative vérifiée

Règles pratiques : code et extraction → T ≈ 0–0,3 ; rédaction → 0,7 ; brainstorming → 1,0 avec top-p 0,95. Une pénalité de répétition > 1,2 casse le code (les accolades se répètent légitimement). La graine ne suffit pas à la reproductibilité : le calcul parallèle sur GPU n’est pas déterministe au bit près.

04 / Servir

Vue informatique : mémoire, débit, coût — et faire tourner un LLM chez soi

OutilUsagePoint fort
llama.cpp / OllamaInférence locale CPU/GPU, GGUF quantifiéSimplicité, tourne sur un portable
vLLM, TGI, SGLangServeur haut débitPagedAttention (cache KV paginé), lots continus, spéculatif
Hugging Face transformers + PEFTAffinage (LoRA, QLoRA)Écosystème, modèles ouverts
bitsandbytes, GPTQ, AWQ, llama.cpp k-quantsQuantificationint8/int4 avec ≤ 1–2 % de perte
API (OpenAI, Anthropic, Mistral, Gemini)Modèles frontièresQualité ; coût variable ; données qui sortent

05 / Comprendre

Capacités, limites, et ce que la recherche en dit

Ce qui marche (et pourquoi)

  • Apprentissage en contexte : quelques exemples dans le prompt suffisent — mécanisme des têtes d’induction (L25) et méta-apprentissage implicite pendant le pré-entraînement.
  • Chaîne de raisonnement : « raisonne étape par étape » rallonge la séquence, donc le calcul disponible (limite TC⁰ de L25) ; les modèles « à raisonnement » (o1, R1) sont entraînés par RL à produire ces chaînes.
  • Code, traduction, résumé, extraction structurée : tâches où la vérification est possible ou la donnée abondante.
  • Outils : appeler une calculatrice, une recherche, du code (function calling) compense l’arithmétique et la connaissance figée.

Ce qui ne marche pas (et pourquoi)

  • Hallucinations : optimisation de la plausibilité ; calibration dégradée par le RLHF (GPT-4 report) ; remède partiel : RAG, citations, abstention apprise, vérification.
  • Arithmétique et comptage : tokenisation + profondeur bornée.
  • Connaissance figée : date de coupure ; RAG ou outils.
  • Sensibilité au prompt : reformuler change la réponse (L28 pour la mesurer).
  • Biais et sécurité : reflet du corpus ; jailbreaks ; injection de prompt (L26) ; fuite de données d’entraînement (mémorisation).
  • Coût et empreinte : GPT-4 ≈ 10⁵ fois le coût d’une requête de recherche classique.

Évaluer tout cela rigoureusement : chapitre L32 (métriques) — MMLU, GSM8K, HumanEval, MT-Bench, contamination, et pourquoi les classements publics trompent.

06 / Articles

Les articles à lire

ArticleContributionÀ retenir
Sennrich et al., Neural Machine Translation of Rare Words with Subword Units (BPE), ACL 2016 — 1508.07909BPE pour les sous-motsLe tokeniseur est un choix de modélisation, pas un détail
Brown et al., Language Models are Few-Shot Learners (GPT-3), 2020 — 2005.14165Apprentissage en contexte à l’échelleÉvaluation par prompts ; contamination discutée en annexe
Ouyang et al., Training language models to follow instructions (InstructGPT), 2022 — 2203.02155SFT + modèle de récompense + PPO ; un 1,3B aligné préféré à GPT-3 175BL’alignement vaut plus que la taille pour l’utilité perçue ; « alignment tax »
Bai et al., Constitutional AI, 2022 — 2212.08073Préférences générées par le modèle selon des principes (RLAIF)Réduire l’annotation humaine ; transparence des critères
Rafailov et al., Direct Preference Optimization, NeurIPS 2023 — 2305.18290RLHF sans RL : perte de classification sur les pairesThéorème 2 ; standard pour les modèles ouverts
Wei et al., Chain-of-Thought Prompting, NeurIPS 2022 — 2201.11903Le raisonnement explicite émerge avec la tailleLien avec la profondeur de calcul
Hu et al., LoRA, ICLR 2022 — 2106.09685 ; Dettmers et al., QLoRA, 2023 — 2305.14314Affinage à faible rang ; sur base quantifiée en 4 bitsAffiner un 65B sur un GPU de 48 Go
Leviathan et al., Fast Inference from Transformers via Speculative Decoding, ICML 2023 — 2211.17192Génération spéculative exacteThéorème 3
Kwon et al., Efficient Memory Management for LLM Serving (vLLM, PagedAttention), SOSP 2023 — 2309.06180Cache KV paginé comme une mémoire virtuelleDébit ×2–4 en service
Frantar et al., GPTQ, 2022 — 2210.17323 ; Lin et al., AWQ, 2023 — 2306.00978Quantification post-entraînement 4 bits préciseThéorème 4 et ses remèdes
OpenAI, GPT-4 Technical Report, 2023 — 2303.08774Prédiction des performances par lois d’échelle ; calibration ; évaluationsLe RLHF dégrade la calibration (fig. 8) ; peu de détails techniques : lire ce qui manque
Carlini et al., Extracting Training Data from LLMs, 2021 — 2012.07805Mémorisation et fuite de donnéesDonnées personnelles dans le corpus = risque

TP guidé

TP — Un LLM local, affiné, mesuré (6 h)

Exercices

Exercices auto-corrigés

Exercice 1 — Perplexité et entropie croisée

Écrivez perplexite(probas) (probas : liste des probabilités assignées par le modèle à chaque vrai token) et vérifiez : un modèle parfait a une perplexité de 1 ; un modèle uniforme sur V tokens a V ; la perplexité est la moyenne géométrique des inverses.

Correction
def perplexite(probas): return float(np.exp(-np.mean(np.log(probas))))

Exercice 2 — Gradient de la perte DPO

Pour une paire (w, l), avec h = β[(log πθ(w) − log πref(w)) − (log πθ(l) − log πref(l))], la perte est −log σ(h). Écrivez perte_dpo(theta, ref, w, l, beta) et grad_dpo(...) pour une politique softmax sur V réponses (theta : logits), et vérifiez le gradient par différences finies.

Correction
def perte_dpo(theta, ref, w, l, beta):
    lp, lr = np.log(softmax(theta)), np.log(softmax(ref)); h = beta * ((lp[w] - lr[w]) - (lp[l] - lr[l]))
    return float(np.log(1 + np.exp(-h)))
def grad_dpo(theta, ref, w, l, beta):
    p = softmax(theta); lp, lr = np.log(p), np.log(softmax(ref)); h = beta * ((lp[w] - lr[w]) - (lp[l] - lr[l]))
    s = 1 / (1 + np.exp(h))                           # = 1 − σ(h)
    gw = -p.copy(); gw[w] += 1; gl = -p.copy(); gl[l] += 1
    return -s * beta * (gw - gl)

Exercices

Exercices auto-corrigés (suite)

Exercice 3 — Quantification par groupes

Implémentez quantifier(w, bits, groupe) qui découpe w en groupes consécutifs, calcule pour chacun un facteur d’échelle a = max|w| et quantifie sur 2bits − 1 niveaux symétriques, et dequantifier. Vérifiez que l’erreur relative RMS diminue quand le groupe rétrécit, et qu’elle est ≈ Δ/(√12·σ) (Théorème 4) pour un grand groupe.

Correction
def quantifier(w, bits, groupe):
    n = (2 ** bits - 1) // 2                                   # niveaux −n..n (int4 : −7..7)
    W = w.reshape(-1, groupe); pas = np.abs(W).max(1) / n + 1e-12   # une échelle (le pas Δ) par groupe
    return np.clip(np.round(W / pas[:, None]), -n, n).astype(int), pas
def dequantifier(q, echelles, groupe): return (q * echelles[:, None]).reshape(-1)

Ce que stocke un fichier GGUF/GPTQ : les entiers sur 4 bits et un pas (fp16) par groupe de 32 à 128 poids — soit ≈ 4,5 bits par poids en moyenne.

Exercice 4 — Top-p et budget de contexte

a) Écrivez top_p(p, seuil) renvoyant les indices retenus (masse cumulée ≥ seuil, plus petit ensemble). b) Écrivez tokens_max_reponse(ctx, prompt_tokens, marge=64) et cout(tokens_in, tokens_out, prix_in, prix_out) (prix par million).

Correction
def top_p(p, seuil):
    o = np.argsort(-p); c = np.cumsum(p[o]); k = int(np.searchsorted(c, seuil - 1e-12)) + 1; return list(o[:k])
def tokens_max_reponse(ctx, prompt_tokens, marge=64): return max(0, ctx - prompt_tokens - marge)
def cout(tokens_in, tokens_out, prix_in, prix_out): return (tokens_in * prix_in + tokens_out * prix_out) / 1e6

Fiche de cours · Exercices corrigés

Exercices corrigés (rédaction)

Exercice 1. Pourquoi la pénalité KL est-elle indispensable dans l’objectif RLHF ? Que se passe-t-il avec β → 0 ?
Correction. Le modèle de récompense rφ n’est qu’une approximation apprise sur un nombre fini de comparaisons ; hors de la distribution des réponses vues, il est arbitraire. Sans KL (β → 0), la politique optimale concentre toute sa masse sur les réponses qui maximisent rφ, y compris ses erreurs : c’est le reward hacking (réponses longues, flatteuses, formules répétées, ou incohérentes qui exploitent une faille du juge) — loi de Goodhart. La KL ancre πθ à πref (SFT), là où rφ est fiable ; β règle le compromis. Le Théorème 2 montre que la solution reste proportionnelle à πref : une réponse impossible pour le modèle SFT reste impossible.
Exercice 2. Un modèle de 70 B en int4 avec GQA (8 têtes KV, dk = 128, 80 couches) doit servir 16 conversations simultanées de 8 000 tokens sur un GPU de 80 Go. Est-ce possible ? Quel est le débit approximatif si la bande passante est de 3 To/s ?
Correction. Poids : 70·10⁹ × 0,5 octet = 35 Go. Cache KV par token : 2 × 80 × 8 × 128 × 2 octets = 328 Ko ; par conversation de 8 000 tokens : 2,6 Go ; pour 16 : 42 Go. Total 77 Go — juste (activations et fragmentation : PagedAttention nécessaire) ; en pratique 12 conversations. Débit : chaque étape de décodage lit les 35 Go de poids une fois pour les 16 requêtes (lot) : 3·10¹²/35·10⁹ ≈ 86 étapes/s × 16 ≈ 1 370 tokens/s au total, ≈ 86 tokens/s par utilisateur, tant que le calcul (2 × 70·10⁹ × 16 = 2,2 TFLOP par étape, ≈ 2 ms sur 1 PFLOP/s) reste inférieur au temps de lecture (12 ms) — c’est le cas ; le lot est donc « gratuit » jusqu’à ≈ 6× plus grand.
Exercice 3. Un assistant RLHF est moins bien calibré qu’un modèle de base (GPT-4 report). Expliquer ce que signifie « calibré » et pourquoi l’alignement dégrade la calibration.
Correction. Calibré : parmi les réponses auxquelles le modèle assigne une probabilité 0,7, environ 70 % sont correctes (diagramme de fiabilité, L32). Le modèle de base, entraîné par maximum de vraisemblance, est une estimation de densité : ses probabilités reflètent les fréquences du corpus, donc sont bien calibrées. Le RLHF optimise une récompense de préférence humaine, qui favorise les réponses assurées et tranchées (les humains préfèrent la confiance) : le modèle apprend à concentrer sa masse, indépendamment de sa connaissance réelle — sur-confiance. Remèdes : température de calibration, entraînement explicite à l’abstention et à l’expression d’incertitude, ou lire les probabilités du modèle de base pour la décision et laisser le modèle aligné pour la formulation.

Vérification

Qu’est-ce que DPO supprime par rapport au RLHF classique ?

Deux questions supplémentaires

1. Pourquoi les LLM comptent-ils mal les lettres ? Ils voient des tokens BPE, pas des caractères ; « strawberry » est un ou deux tokens opaques.

2. Pourquoi la génération en lot est-elle presque gratuite ? Le décodage est limité par la lecture des poids ; un lot partage cette lecture entre les requêtes.

Référence

Les mots à retenir

MotDéfinition
BPETokenisation par fusions de paires fréquentes ; vocabulaire de 32 k–256 k.
Perplexitéexp(entropie croisée moyenne) ; nombre effectif de choix par token.
SFTAffinage supervisé sur des démonstrations.
RLHFModèle de récompense + gradient de politique avec pénalité KL.
DPOOptimisation directe des préférences, sans modèle de récompense.
Température / top-pContrôle de l’entropie de l’échantillonnage.
Génération spéculativePetit modèle propose, grand vérifie ; loi exacte.
QuantificationPoids en int8/int4 par groupes avec échelles ; mémoire ÷2–4.
LoRAAffinage par matrices de rang faible ajoutées aux poids.

Suite

Le modèle est là. Comment lui parler pour obtenir ce que vous voulez — et le prouver.

Le prompt engineering n’est pas de la magie : c’est du conditionnement, mesurable. Chapitre suivant : techniques, mathématiques du few-shot, et surtout l’évaluation systématique des prompts.

← L26SommaireL28 : prompt engineering →