Blame
|
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 |  |
|||||||
| 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 |  |
|||||||
| 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) |
|||||||
