Blame

36084c lugonthier 2026-07-02 14:39:19
Add new content and images for Linear Models, Regularization, SVMs, and Decision Trees - Added images for linear regression, logistic regression, and perceptron. - Introduced a new section on Regularization and High-Dimensional Inference with detailed explanations and images. - Added content on Support Vector Machines, including definitions, loss functions, and kernel methods. - Created a new section on Decision Trees and Ensemble Methods, covering CART, bagging, random forests, and boosting. - Included relevant images to illustrate concepts in Decision Trees and Ensemble Methods.
1
# 7. Initialisation et disparition du gradient
2
3
Les réseaux profonds sont difficiles à entraîner parce que la rétropropagation multiplie une jacobienne par couche, si bien qu'un signal peut se contracter ou exploser géométriquement avec la profondeur. Ce module explique d'où vient cette instabilité, pourquoi une initialisation naïve des poids l'aggrave, et les deux remèdes qui rendent l'entraînement profond routinier : l'initialisation préservant la variance (Xavier et He) et l'écrêtage du gradient.
4
5
**Objectifs**
6
- Écrire la rétropropagation comme un produit de jacobiennes par couche et voir quand elle disparaît ou explose.
7
- Relier l'effet à la saturation des activations vue au chapitre 3.
8
- Expliquer pourquoi les initialisations à zéro et mal mises à l'échelle échouent.
9
- Dériver la cible de variance que satisfont les initialisations Xavier et He.
10
- Appliquer l'écrêtage du gradient pour maîtriser les gradients explosifs.
11
- Choisir un initialiseur à partir de la fonction d'activation.
12
13
## 7.1 Pourquoi la profondeur est instable
14
15
### 7.1.1 Le produit des jacobiennes
16
17
Rappelons la passe avant du chapitre 6 : la couche $l$ calcule $z^{[l]} = W^{[l]} a^{[l-1]} + b^{[l]}$ et $a^{[l]} = g^{[l]}(z^{[l]})$, avec $a^{[0]} = x$ et $\hat{y} = a^{[L]}$. La rétropropagation renvoie le gradient de la perte de la sortie jusqu'à la couche $l$ par la règle de dérivation en chaîne. Le signal d'erreur $\delta^{[l]} = \partial L / \partial z^{[l]}$ obéit à la récurrence $\delta^{[l]} = (W^{[l+1]})^T \delta^{[l+1]} \odot g'^{[l]}(z^{[l]})$, donc en la déroulant depuis la couche supérieure $L$ jusqu'à la couche $l$ on obtient un produit :
18
19
$$\boxed{ \frac{\partial L}{\partial z^{[l]}} = \left( \prod_{k=l+1}^{L} \operatorname{diag}\!\left(g'^{[k-1]}(z^{[k-1]})\right) (W^{[k]})^T \right) \frac{\partial L}{\partial z^{[L]}} }$$
20
21
Chaque facteur est une jacobienne de couche : une matrice de poids $W^{[k]}$ combinée à la matrice diagonale $\operatorname{diag}(g'(z))$ des pentes d'activation. Le gradient qui atteint la couche $l$ est ce produit entier agissant sur l'erreur de la couche supérieure.
22
23
### 7.1.2 Disparition et explosion
24
25
Un produit de nombreux facteurs est régi par leur amplitude typique. Notons $\rho$ la taille typique (une norme spectrale) d'un facteur $W^{[k]} \odot \operatorname{diag}(g')$. À travers $L - l$ couches, le signal se met à l'échelle à peu près comme $\rho^{\,L-l}$ :
26
27
$$\boxed{ \left\| \frac{\partial L}{\partial z^{[l]}} \right\| \;\approx\; \rho^{\,L-l} \left\| \frac{\partial L}{\partial z^{[L]}} \right\| }$$
28
29
Si $\rho < 1$ de façon constante, le gradient se contracte vers zéro à mesure qu'il remonte (la **disparition du gradient**), si bien que les premières couches se mettent à peine à jour et cessent en pratique d'apprendre. Si $\rho > 1$, il croît sans limite (l'**explosion du gradient**), si bien que les mises à jour dépassent leur cible et que la perte diverge vers `NaN`. Seul $\rho \approx 1$ maintient le signal vivant à travers la profondeur.
30
31
![Amplitude du gradient selon la profondeur pour des gains par couche faibles, stables et élevés](/fr/Deep%20Learning/07%20Initialization%20and%20vanishing%20gradients/a/gradient-flow.png)
32
33
*Amplitude du gradient selon la profondeur : des poids mal mis à l'échelle la font disparaître ou exploser, tandis qu'une initialisation préservant la variance la maintient proche de un.*
34
35
*Remarque :* le même produit s'applique en avant pour les activations elles-mêmes. Si les sorties des couches se contractent ou croissent géométriquement, le réseau ne peut représenter rien d'utile avant même qu'un gradient ne soit calculé, on veut donc que le signal avant et le gradient arrière soient tous deux proches de l'échelle unité.
36
37
### 7.1.3 Le lien avec la saturation
38
39
Le facteur $g'(z)$ relie directement ce phénomène à la saturation vue au chapitre 3. La sigmoïde et $\tanh$ s'aplatissent pour de grands $|z|$, donc leurs dérivées y tombent proche de zéro.
40
41
| Activation | $g'(z)$ | pente maximale | pente en saturation |
42
| --- | --- | --- | --- |
43
| sigmoïde | $g(z)(1-g(z))$ | $0.25$ | $\to 0$ |
44
| $\tanh$ | $1 - \tanh^2(z)$ | $1$ | $\to 0$ |
45
| ReLU | $1$ pour $z>0$, sinon $0$ | $1$ | $0$ du côté mort |
46
47
*Remarque :* la pente de la sigmoïde ne dépasse jamais $0.25$, donc chaque couche multiplie le signal arrière par au plus un quart. Empilez dix couches sigmoïdes et le gradient est mis à l'échelle par au plus $0.25^{10} \approx 10^{-6}$ avant même de considérer un poids. C'est pourquoi les empilements profonds d'unités saturantes s'entraînent mal, et pourquoi ReLU (pente $1$ du côté actif) est devenue le choix par défaut.
48
49
## 7.2 Mauvaises initialisations
50
51
### 7.2.1 Tout à zéro
52
53
Poser $W^{[l]} = 0$ (ou toute valeur qui rend identiques toutes les unités d'une couche) casse l'apprentissage par **symétrie**. Si deux unités d'une couche démarrent avec les mêmes poids et voient la même entrée, elles calculent la même activation et reçoivent le même gradient, donc elles se mettent à jour de façon identique et restent identiques pour toujours. La couche se comporte alors comme une seule unité, quelle que soit sa largeur. L'initialisation aléatoire existe précisément pour briser cette symétrie afin que les unités puissent se spécialiser.
54
55
### 7.2.2 Mauvaise échelle
56
57
Même avec des poids aléatoires qui brisent la symétrie, la **variance** importe. Considérons une unité linéaire $z = \sum_{j=1}^{n_{\text{in}}} W_j a_j$ avec des poids et des entrées indépendants et de moyenne nulle. Sa variance est une somme de $n_{\text{in}}$ termes indépendants :
58
59
$$\boxed{ \operatorname{Var}(z) = n_{\text{in}} \cdot \operatorname{Var}(W) \cdot \operatorname{Var}(a) }$$
60
61
Si $n_{\text{in}} \cdot \operatorname{Var}(W) > 1$, la variance du signal croît couche après couche et explose, et si elle est $< 1$, la variance décroît et disparaît. Pour maintenir $\operatorname{Var}(z) \approx \operatorname{Var}(a)$ d'une couche à l'autre, il faut $n_{\text{in}} \cdot \operatorname{Var}(W) \approx 1$, ce qui fixe la variance des poids à environ $1 / n_{\text{in}}$. Cette seule condition est le germe des deux initialiseurs ci-dessous.
62
63
## 7.3 Initialisation préservant la variance
64
65
### 7.3.1 Xavier / Glorot
66
67
Glorot et Bengio équilibrent la passe avant ($\operatorname{Var}(W) = 1/n_{\text{in}}$) contre la passe arrière ($\operatorname{Var}(W) = 1/n_{\text{out}}$) en faisant la moyenne des deux, ce qui donne l'initialisation de Xavier :
68
69
$$\boxed{ \operatorname{Var}(W^{[l]}) = \frac{2}{n_{\text{in}} + n_{\text{out}}} }$$
70
71
Ici $n_{\text{in}} = n_{l-1}$ est le fan-in et $n_{\text{out}} = n_l$ est le fan-out de la couche. Xavier est dérivée en supposant que l'activation est à peu près linéaire près de l'origine, elle convient donc aux activations **symétriques, de pente unité** comme $\tanh$ et la sigmoïde.
72
73
### 7.3.2 He
74
75
ReLU annule en moyenne la moitié de ses entrées, donc elle divise par deux la variance de ce qui passe. L'initialisation de He compense par un facteur deux :
76
77
$$\boxed{ \operatorname{Var}(W^{[l]}) = \frac{2}{n_{\text{in}}} }$$
78
79
C'est la bonne cible pour **ReLU et ses variantes** (leaky ReLU, ELU, GELU). En pratique, on tire les poids d'une gaussienne de cette variance, ou d'une distribution uniforme d'étendue correspondante, et on fixe le biais $b^{[l]}$ à zéro.
80
81
*Remarque :* c'est le biais qui démarre à zéro, pas les poids. Un biais nul ne crée pas de symétrie (les poids diffèrent déjà), et il maintient la pré-activation initiale centrée de sorte que l'activation démarre dans sa région réactive plutôt qu'en saturation.
82
83
### 7.3.3 Le mécanisme
84
85
![Chaîne de raisonnement des poids aléatoires vers un entraînement profond stable](/fr/Deep%20Learning/07%20Initialization%20and%20vanishing%20gradients/a/init-reasoning.svg)
86
87
*L'initialisation préservant la variance maintient le signal et le gradient proches de l'échelle unité à travers la profondeur.*
88
89
Choisir la variance est un correctif unique au début de l'entraînement. Il positionne le réseau de sorte que le produit de jacobiennes de la section 7.1 ait des facteurs proches de $1$, mais rien ne l'y maintient à mesure que les poids bougent pendant l'entraînement. C'est ce que traite le module suivant.
90
91
## 7.4 Gradients explosifs et écrêtage
92
93
Une bonne initialisation maîtrise la disparition des gradients et réduit fortement les explosions, mais des explosions peuvent tout de même apparaître pendant l'entraînement, en particulier dans les réseaux récurrents où la même matrice de poids est réutilisée à chaque pas de temps. Le remède standard est l'**écrêtage du gradient** : remettre à l'échelle le vecteur gradient entier $g$ pour que sa norme ne dépasse jamais un seuil $\tau$.
94
95
$$\boxed{ g \leftarrow g \cdot \min\!\left(1, \frac{\tau}{\lVert g \rVert}\right) }$$
96
97
Lorsque $\lVert g \rVert \le \tau$, le facteur vaut $1$ et le gradient n'est pas touché. Lorsque $\lVert g \rVert > \tau$, le gradient est ramené à une norme exactement égale à $\tau$ tout en conservant sa direction, si bien qu'un unique pas énorme ne peut pas faire exploser les poids.
98
99
*Remarque :* l'écrêtage par la norme globale (remettant à l'échelle le vecteur entier ensemble) préserve la direction de la mise à jour, alors qu'écrêter chaque coordonnée indépendamment vers $[-\tau, \tau]$ peut fausser la direction. L'écrêtage par norme globale est le choix par défaut habituel.
100
101
## 7.5 Choisir un initialiseur
102
103
Accordez l'initialiseur à l'activation de la couche qu'il alimente.
104
105
| Activation | Initialiseur recommandé | Variance des poids |
106
| --- | --- | --- |
107
| ReLU, leaky ReLU, ELU, GELU | He | $2 / n_{\text{in}}$ |
108
| $\tanh$ | Xavier / Glorot | $2 / (n_{\text{in}} + n_{\text{out}})$ |
109
| sigmoïde | Xavier / Glorot | $2 / (n_{\text{in}} + n_{\text{out}})$ |
110
| softmax / sortie linéaire | Xavier / Glorot | $2 / (n_{\text{in}} + n_{\text{out}})$ |
111
112
*Remarque :* l'initialisation et l'écrêtage ne gèrent le signal qu'aux extrémités de l'entraînement et lors des grands pas. Deux remèdes structurels le gardent maîtrisé tout du long : la **normalisation** recentre et remet à l'échelle les activations à chaque couche, et les **connexions résiduelles** ajoutent un raccourci qui laisse le gradient contourner entièrement le produit de jacobiennes.
113
114
*Une bonne initialisation maintient le signal bien mis à l'échelle au pas zéro, mais les statistiques dérivent au fil de l'entraînement. Le module suivant les garde sous contrôle à chaque pas grâce à la normalisation.*
115
116
---
117
Suivant : [Normalisation](/fr/Deep%20Learning/08%20Normalization) · [Vue d'ensemble du cours](/fr/Deep%20Learning)