Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1261,6 +1261,28 @@
"print(\"Exercice a completer (decommentez et remplacez les TODO).\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Contre-sens usuels sur les optimisateurs\n",
"\n",
"Six confusions revenaient dans le carnet 3.2 et qu'il vaut mieux trancher net :\n",
"\n",
"| terme | ce qu'on croit souvent | ce qu'il faut retenir |\n",
"|---|---|---|\n",
"| **GD vs Adam (MLP)** | \"Adam est toujours mieux\" | Au comparatif MLP (3.2 cellule 18), l'ordre final est **RMSProp (0,059) < Adam (0,061) < GD (0,070)** : Adam gagne de peu face à GD sur ce paysage (et RMSProp gagne face à Adam) ; le débat \"GD vs Adam\" dépend du régime (déterministe vs mini-batch) et de la métrique (loss finale vs vitesse). |\n",
"| **Schedule LR** | \"le schedule aide toujours à être utile\" | En full-batch déterministe il **coûte** encore la descente (3.2 cellule 23) ; en mini-batch bruité il *casse le plancher de bruit* (cellule 25). Le schedule n'est pas un bien libre. |\n",
"| **Momentum / Nesterov** | \"c'est la même chose avec un pas d'avance\" | Nesterov évalue le gradient aux paramètres *extrapolés* (après application du momentum), pas aux paramètres courants. L'écart est mesurable en convergence sur terrain vallonné. |\n",
"| **Adagrad / RMSProp** | \"Adagrad est plus stable\" | Adagrad accumule les carrés de gradient sans borne, son learning rate meurt en fin d'entraînement (cf. **Conclusion** : *« meurt de son accumulation infinie »*). RMSProp répare par moyenne glissante — un meilleur défaut par défaut. |\n",
"| **Correction de biais Adam** | \"détail d'implémentation\" | Sans elle les estimateurs des deux moments sont nuls aux premiers pas et l'optimiseur n'avance pas. C'est le premier point de diagnostic en cas de stagnation. |\n",
"| **Validation bit-à-bit** | \"comparaison approchée suffit\" | 3.2 mesure des écarts `1.11e-16` à `0.00e+00` à float64 près — l'écart de l'ordre du epsilon machine est la *preuve* que l'implémentation est correcte, pas une coïncidence. À comparer aux tolérances standard de validation numérique quand on relâche la contrainte bit-à-bit. |\n",
"\n",
"Le point commun aux six : la *mesure* tranche ce que l'intuition seule laisse ouvert.\n",
""
],
"id": "c28-contresens-optim-3.2"
},
{
"cell_type": "markdown",
"id": "a42bc71c",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -947,6 +947,28 @@
"Rappel de périmètre : ce classement vaut pour un surapprentissage **d'origine annotation**. Un autre type de bruit (géométrie complexe, distribution décalée) re-classe les mécanismes — l'exercice 3 en donne le protocole.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 5.5 Contre-sens usuels sur la régularisation\n",
"\n",
"Six confusions revenaient dans le carnet 3.3 et qu'il vaut mieux trancher net :\n",
"\n",
"| terme | ce qu'on croit souvent | ce qu'il faut retenir |\n",
"|---|---|---|\n",
"| **Dropout** | \"à l'évaluation aussi on coupe\" | En évaluation on garde *tous* les neurones, et l'**inverted dropout** (scaling `1/(1-p)` à l'entraînement) conserve l'espérance de l'activation. Couper à l'évaluation reviendrait à multiplier l'activation par `(1-p)` non compensé. |\n",
"| **L2 vs decay** | \"c'est la même chose\" | Équivalentes en SGD simple, **elles divergent avec momentum** (3.3 cellules 16-17). Mesure à λ=3e-3 et momentum 0.9 : ‖W‖ final de **8.81** (L2 dans la loss) contre **22.43** (decay dans l'update) — rapport 2,5×. La vélocité amplifie le terme L2 d'un facteur `1/(1-m)` ≈ 10. |\n",
"| **Early stopping** | \"ça régularise par underfitting\" | Ce n'est *pas* une régularisation au sens classique — il ne touche ni à la loss ni au gradient, c'est un **contrôle de trajectoire** (3.3 cellule 20). Le meilleur epoch *existait* dans l'optimisation ; l'early stopping garantit qu'on le livre. |\n",
"| **Mémorisation** | \"le surapprentissage est un défaut du modèle\" | Le carnet 3.3 construit le surapprentissage *avant* de le corriger (cellule 2) — 17 000 paramètres pour 100 points, ratio 170:1. La toxicité vient de ce qui est mémorisé (12 labels faux), pas de la mémorisation elle-même : sur labels parfaits, le même réseau mémorise sans dégât. |\n",
"| **Weight decay = L2** | \"le weight decay force les poids petits\" | Sur SGD simple oui ; avec momentum**, le terme L2 entre dans la vélocité et la force de rappel effective devient `λ/(1-m)` — d'où la norme écrasée à 3.3 cellule 17. Le **decay dans l'update** (style AdamW) reste insensible à la vélocité. |\n",
"| **Dropout = régularisation** | \"le dropout force à apprendre des features redondantes\" | Le carnet le décrit comme un entraînement **implicite d'un ensemble** de réseaux partageant leurs poids (3.3 cellule 8). Le bénéfice ne vient pas de la redondance mais de la variance entre les sous-réseaux à l'inférence. |\n",
"\n",
"Le point commun aux six : la *mesure* tranche ce que l'intuition seule laisse ouvert. Le tableau multi-seed cellule 23 (3 graines, écart-types de `±0.0%` à `±2.2%`) est ce qui permet d'annoncer les decay, comme 3.2 annonçait un gain d'optimiseur.\n",
""
],
"id": "c24-contresens-regul-3.3"
},
{
"cell_type": "markdown",
"id": "sec6hdr33",
Expand Down Expand Up @@ -1129,4 +1151,4 @@
},
"nbformat": 4,
"nbformat_minor": 5
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2406,6 +2406,28 @@
"print(\"Exercice a completer (remplacez les TODO).\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 8.5 Contre-sens usuels sur l'attention et le Transformer\n",
"\n",
"Six confusions revenaient dans le carnet 3.4 et qu'il vaut mieux trancher net :\n",
"\n",
"| terme | ce qu'on croit souvent | ce qu'il faut retenir |\n",
"|---|---|---|\n",
"| **Q, K, V** | \"trois réseaux distincts avec trois rôles\" | Trois **projections apprises** de la *même entrée* (3.4 cellule 10) : ce ne sont pas des modules séparés, c'est la même matrice x projetée par W_Q, W_K, W_V en trois espaces de même dimension `d`. |\n",
"| **Multi-têtes** | \"plus de têtes = plus de capacité\" | Chaque tête est de taille `d/h` — *plus de têtes* dilue la dimension par tête. La mesure 3.4 (PREUVE D'ÉQUIVALENCE cellules 18-21) compare aux **mêmes poids**, ce qui rend la comparaison vérifiable. |\n",
"| **Masque causal** | \"il suffit de mettre les poids futurs à 0\" | Le masque s'applique **avant le softmax** sur les logits `(Q·Kᵀ) / √d`, sinon le softmax renormalise les poids futurs à 0 et la position i regarde quand même un mélange non causal. 3.4 cellule 11 insiste sur ce point d'implémentation. |\n",
"| **Encodage positionnel** | \"il faut un réseau qui apprend les positions\" | L'encodage **sinusoïdal** (Vaswani 2017) est fixé par des sin/cos à des fréquences géométriquement espacées — pas de paramètre appris. Le carnet 3.4 l'implémente en NumPy pur (cellules 5-7). |\n",
"| **Softmax = distribution** | \"le softmax donne des probabilités d'attention\" | Le softmax donne une distribution *sur les positions d'entrée* vues par une position de sortie donnée — c'est une distribution d'attention, pas une probabilité au sens bayésien. |\n",
"| **Self-attention = RNN** | \"l'attention remplace les RNN\" | L'attention **traite tous les éléments de la séquence simultanément** (parallélisme), le RNN les traite séquentiellement. La contrepartie du carnet : sans encodage positionnel, l'attention voit un sac de mots (cellule 2), pas une séquence. |\n",
"\n",
"Le point commun aux six : l'implémentation from-scratch tranche ce que l'intuition laisse ouvert, et la **PREUVE D'ÉQUIVALENCE** (3.4 cellules 18-21, aux mêmes poids) est l'organe de validation.\n",
""
],
"id": "c40-contresens-attn-3.4"
},
{
"cell_type": "markdown",
"id": "sec9-pont",
Expand Down Expand Up @@ -2528,4 +2550,4 @@
},
"nbformat": 4,
"nbformat_minor": 5
}
}
Loading
Loading