Partie 6
Le Transformer et DrBERT
Un Transformer reçoit une suite de tokens et rend un vecteur par token, en empilant des blocs d'attention et de MLP. Entrée : embedding + vecteur de place. Un bloc = attention multi-têtes, puis MLP (celui de J1, appliqué à chaque vecteur séparément), chacun suivi d'un « + » (connexion résiduelle) et d'une normalisation (qui ramène les nombres de chaque vecteur à la même échelle). Le modèle de ce cours en a 12 : 110 031 360 paramètres.
| Niveau | Ce que c'est | Dans DrBERT |
|---|---|---|
| Transformer | blocs empilés | 12 blocs |
| Bloc | attention multi-têtes + MLP | 1 + 1 |
| Attention multi-têtes | têtes en parallèle, sorties mises bout à bout puis couche dense | 12 × 64 = 768 |
| Tête | une attention complète (W_Q, W_K, W_V) | q, k, v de 64 composantes |
Pourquoi plusieurs têtes ? Une tête n'a qu'un jeu de poids, donc une seule façon de choisir les tokens qui comptent. Avec 12, un token peut donner du poids à une négation dans une tête et à son voisin dans une autre (12 blocs × 12 têtes = 144 têtes).
Le + : la connexion résiduelle
sortie = x + Attention(x). Le bloc ne remplace pas x : il calcule une correction et l'ajoute. Pour « toux » : [1 ; 1] + [0,79 ; 0,79] = [1,79 ; 1,79]. Vers l'avant, l'entrée n'est jamais perdue (si l'attention n'a rien à ajouter, elle rend ≈ 0). Vers l'arrière, la dérivée de x + Attention(x) par rapport à x vaut 1 + celle d'Attention : la pente passe même si celle de l'attention est presque nulle, comme dans la mémoire du LSTM. Condition : la sortie a la même taille que l'entrée.
Deux calculs : la somme composante par composante (x et att ont la même taille, sinon la somme est impossible), puis la pente sur 12 blocs. Chaque bloc multiplie la pente par sa dérivée : d sans connexion, 1 + d avec. Le but est de voir pourquoi 12 blocs sans le « + » rendraient l'apprentissage impossible (0,0112 est minuscule).
À toi de coder
Apprendre sans étiquettes : deviner des tokens cachés
110 millions de poids pour 1 514 résumés : comme hier, il faut partir d'un réseau déjà entraîné, mais ici sur des textes sans étiquettes. Le pré-entraînement par tokens masqués (masked language modeling) :
- Dans chaque texte, on choisit au hasard 15 % des tokens ; la plupart sont remplacés par
<mask>. - Pour chaque
<mask>, une couche dense et une softmax donnent une probabilité à chacun des 32 005 sous-mots. - Perte : −log de la probabilité du vrai token (J1). N'importe quel texte sert de données.
L'attention lit le contexte à gauche et à droite du masque.
Une dernière manipulation avant de passer à DrBERT : la perte du pré-entraînement. Une probabilité proche de 1 pour le vrai token donne une perte proche de 0 ; une petite probabilité donne une grosse perte. C'est pour cela que −log convient : elle punit fort les paris sûrs et faux. Tu enchaînes : choisir le plus probable (max avec une clé), puis la perte du vrai token pour deux cas.
À toi de coder
DrBERT, extraction ou fine-tuning
DrBERT-7GB (Labrak et al., 2023) : pré-entraîné par tokens masqués sur NACHOS (7 Go de textes médicaux en français), 12 blocs de 12 têtes, vecteurs de 768 composantes, 110 millions de paramètres, 32 005 sous-mots, jusqu'à 512 tokens, licence Apache 2.0. Repère publié sur MorFITT, DrBERT entièrement réentraîné : F1 pondéré de 68,70 % sur le test.
Pour nos 12 spécialités, on garde les 12 blocs et leurs poids, on remplace la tête qui devine les tokens (32 005 sorties) par la nôtre : moyenne masquée, couche dense 768 → 12, 12 sigmoïdes.
| Façon | Ce qui apprend | Poids appris |
|---|---|---|
| Extraction | DrBERT ne bouge pas : ses vecteurs se calculent une fois. Seule la tête apprend. | 9 228 |
| Fine-tuning | On réentraîne aussi DrBERT ; ici seulement son dernier bloc (tout sur processeur). | 7 097 100 |