Blame
|
1 | # 3. Fonctions d'activation |
||||||
| 2 | ||||||||
| 3 | Chaque couche calcule une pré-activation $z^{[l]} = W^{[l]} a^{[l-1]} + b^{[l]}$ puis une activation $a^{[l]} = g^{[l]}(z^{[l]})$. Le choix de la non-linéarité $g^{[l]}$ est ce qui rend la profondeur utile. Cette leçon explique pourquoi une fonction $g$ non linéaire est nécessaire, passe en revue les familles sigmoïde, tanh et ReLU, présente la softmax utilisée en sortie et donne des conseils pratiques sur l'activation à choisir. |
|||||||
| 4 | ||||||||
| 5 | **Objectifs** |
|||||||
| 6 | - Montrer qu'un empilement de couches purement linéaires se réduit à une seule application linéaire. |
|||||||
| 7 | - Définir la sigmoïde et la tanh, dériver leurs dérivées et expliquer la saturation. |
|||||||
| 8 | - Passer en revue la famille ReLU (ReLU, leaky ReLU, PReLU, ELU, GELU) et le problème des unités mortes. |
|||||||
| 9 | - Définir la softmax et la placer en sortie plutôt que dans les couches cachées. |
|||||||
| 10 | - Donner une règle empirique simple pour choisir une activation par couche. |
|||||||
| 11 | ||||||||
| 12 | ## 3.1 Pourquoi la non-linéarité est nécessaire |
|||||||
| 13 | ||||||||
| 14 | Supposons que chaque activation soit l'identité, $g^{[l]}(z) = z$. Alors chaque couche se réduit à $a^{[l]} = W^{[l]} a^{[l-1]} + b^{[l]}$, et composer deux d'entre elles donne $W^{[2]}(W^{[1]} x + b^{[1]}) + b^{[2]} = (W^{[2]} W^{[1]}) x + (W^{[2]} b^{[1]} + b^{[2]})$. C'est de nouveau de la forme $W x + b$. Par récurrence, l'ensemble du réseau à $L$ couches se réduit à une seule application affine : |
|||||||
| 15 | ||||||||
| 16 | $$\boxed{ g^{[l]} = \text{identity} \;\Rightarrow\; \hat{y} = W' x + b' }$$ |
|||||||
| 17 | ||||||||
| 18 | avec $W' = W^{[L]} \cdots W^{[1]}$ et $b'$ le biais accumulé. Peu importe le nombre de couches linéaires empilées, le modèle ne peut ajuster qu'une fonction linéaire, donc la profondeur supplémentaire n'apporte rien. Une fonction $g$ non linéaire entre les couches est précisément ce qui brise cet effondrement et permet au réseau de représenter des frontières de décision courbes et des régressions non linéaires. |
|||||||
| 19 | ||||||||
|
20 | *Remarque :* le biais est conservé ici de façon explicite sous la forme $b^{[l]}$, contrairement au cours de Machine Learning où l'ordonnée à l'origine était intégrée dans $w^T x$ via l'entrée augmentée $x_0 = 1$. Dans ce cours de Deep Learning, chaque couche possède sa propre matrice de poids $W^{[l]}$ et son propre vecteur de biais $b^{[l]}$. |
||||||
|
21 | |||||||
| 22 | ## 3.2 Sigmoïde et tanh |
|||||||
| 23 | ||||||||
| 24 |  |
|||||||
| 25 | ||||||||
| 26 | *Fonctions d'activation courantes : la sigmoïde et la tanh, bornées, saturent dans leurs queues, tandis que ReLU et ses variantes restent linéaires pour les entrées positives.* |
|||||||
| 27 | ||||||||
| 28 | ### 3.2.1 Sigmoïde |
|||||||
| 29 | ||||||||
| 30 | La sigmoïde écrase n'importe quelle pré-activation réelle dans l'intervalle ouvert $(0, 1)$ : |
|||||||
| 31 | ||||||||
| 32 | $$\boxed{ \sigma(z) = \frac{1}{1 + e^{-z}} \in (0, 1) }$$ |
|||||||
| 33 | ||||||||
| 34 | Sa dérivée admet la forme close pratique ci-dessous, qui réutilise la valeur avant $\sigma(z)$ déjà calculée : |
|||||||
| 35 | ||||||||
| 36 | $$\boxed{ \sigma'(z) = \sigma(z)\left(1 - \sigma(z)\right) }$$ |
|||||||
| 37 | ||||||||
| 38 | ### 3.2.2 Tanh |
|||||||
| 39 | ||||||||
| 40 | La tangente hyperbolique est une sigmoïde remise à l'échelle et centrée en zéro, dont la sortie est dans $(-1, 1)$. Sa dérivée s'exprime elle aussi à partir de la valeur avant : |
|||||||
| 41 | ||||||||
| 42 | $$\boxed{ \tanh'(z) = 1 - \tanh(z)^2 }$$ |
|||||||
| 43 | ||||||||
| 44 | *Remarque :* $\tanh$ est centrée en zéro alors que $\sigma$ ne l'est pas, si bien que $\tanh$ s'entraîne souvent un peu mieux comme activation cachée. Les deux sont reliées par $\tanh(z) = 2\sigma(2z) - 1$. |
|||||||
| 45 | ||||||||
| 46 | ### 3.2.3 Saturation |
|||||||
| 47 | ||||||||
| 48 | Les deux courbes s'aplatissent dans leurs queues. Pour de grandes valeurs de $|z|$, la sortie est proche d'une constante ($0$ ou $1$ pour $\sigma$, $\pm 1$ pour $\tanh$), donc la dérivée est proche de zéro : $\sigma'(z) \to 0$ et $\tanh'(z) \to 0$. Une unité située dans cette région plate est dite saturée, et elle ne transmet presque aucun gradient vers l'arrière. Lorsque de nombreux facteurs de ce type se multiplient à travers un empilement profond, le gradient tend vers zéro : c'est le problème de disparition du gradient revu dans [Initialisation et disparition du gradient](/fr/Deep%20Learning/07%20Initialization%20and%20vanishing%20gradients). |
|||||||
| 49 | ||||||||
| 50 |  |
|||||||
| 51 | ||||||||
| 52 | *Dérivées des activations : les gradients de la sigmoïde et de la tanh disparaissent dans les queues, tandis que le gradient de ReLU vaut 1 partout où l'unité est active.* |
|||||||
| 53 | ||||||||
| 54 | ## 3.3 La famille ReLU |
|||||||
| 55 | ||||||||
| 56 | L'unité linéaire rectifiée conserve la partie positive de son entrée et annule le reste : |
|||||||
| 57 | ||||||||
| 58 | $$\boxed{ \text{ReLU}(z) = \max(0, z) }$$ |
|||||||
| 59 | ||||||||
| 60 | Sa dérivée vaut $1$ pour $z > 0$ et $0$ pour $z < 0$ (non définie en $z = 0$, prise égale à $0$ ou $1$ par convention). ReLU ne sature pas du côté positif, elle y maintient donc un gradient sain, ce qui explique en grande partie pourquoi elle est devenue l'activation cachée par défaut. Le prix à payer est le problème des unités mortes : si la pré-activation d'une unité est toujours négative sur l'ensemble des données, son gradient est toujours nul et elle cesse complètement d'apprendre. Les variantes ci-dessous sacrifient un peu de simplicité pour adoucir cette défaillance ou lisser le point anguleux à l'origine. |
|||||||
| 61 | ||||||||
| 62 | | nom | formule | dérivée | meurt / sature ? | |
|||||||
| 63 | | --- | --- | --- | --- | |
|||||||
| 64 | | ReLU | $\max(0, z)$ | $1$ if $z>0$ else $0$ | peut mourir (gradient nul pour $z<0$) | |
|||||||
| 65 | | Leaky ReLU | $\max(\alpha z, z)$, $\alpha \approx 0.01$ | $1$ if $z>0$ else $\alpha$ | meurt rarement (petite pente négative) | |
|||||||
| 66 | | PReLU | $\max(\alpha z, z)$, $\alpha$ learned | $1$ if $z>0$ else $\alpha$ | meurt rarement ($\alpha$ appris par canal) | |
|||||||
| 67 | | ELU | $z$ if $z>0$ else $\alpha(e^z - 1)$ | $1$ if $z>0$ else $\alpha e^z$ | sature doucement pour $z\to-\infty$ | |
|||||||
| 68 | | GELU | $z\,\Phi(z)$, $\Phi$ the normal CDF | lisse, proche de $1$ pour de grands $z$ | lisse, pas de mort brutale | |
|||||||
| 69 | ||||||||
| 70 | *Remarque :* leaky ReLU et PReLU ajoutent une petite pente $\alpha$ du côté négatif afin qu'une unité ne soit jamais complètement éteinte. GELU pondère l'entrée par la probabilité $\Phi(z)$ qu'une loi normale standard soit inférieure à $z$, ce qui donne une courbe lisse se comportant comme ReLU pour de grandes valeurs de $|z|$. C'est le choix standard à l'intérieur des Transformers. |
|||||||
| 71 | ||||||||
| 72 | ## 3.4 Softmax pour les sorties multiclasses |
|||||||
| 73 | ||||||||
| 74 | Pour une classification à $K$ classes, la couche finale produit un vecteur $z \in \mathbb{R}^K$ de scores, et la softmax le transforme en une distribution de probabilité sur les classes : |
|||||||
| 75 | ||||||||
| 76 | $$\boxed{ \text{softmax}(z)_k = \frac{e^{z_k}}{\sum_{j=1}^{K} e^{z_j}} }$$ |
|||||||
| 77 | ||||||||
| 78 | Chaque composante appartient à $(0, 1)$ et les composantes somment à $1$, si bien que $\text{softmax}(z)_k$ se lit comme la probabilité prédite de la classe $k$. Le plus grand score devient la classe la plus probable. |
|||||||
| 79 | ||||||||
| 80 | *Remarque :* la softmax a sa place dans la couche de sortie, pas dans une couche cachée. Elle couple chaque unité par le dénominateur partagé (une normalisation sur tout le vecteur), ce qui est exactement ce dont une sortie probabiliste a besoin mais ne constitue pas une non-linéarité cachée utile par unité. Pour une sortie unique ($K = 1$ contre son complément), la softmax se réduit à la sigmoïde. L'association de la softmax avec sa fonction de perte fait l'objet de [Fonctions de perte et couches de sortie](/fr/Deep%20Learning/04%20Loss%20functions%20and%20output%20layers). |
|||||||
| 81 | ||||||||
| 82 | ## 3.5 Choisir une activation |
|||||||
| 83 | ||||||||
| 84 | Un bon choix par défaut : utiliser ReLU ou GELU dans les couches cachées, et choisir l'activation de sortie selon la tâche. Le schéma et le tableau ci-dessous résument la décision. |
|||||||
| 85 | ||||||||
| 86 |  |
|||||||
| 87 | ||||||||
| 88 | *Choisir une activation : ReLU ou GELU pour les couches cachées, et une activation de sortie adaptée à la tâche.* |
|||||||
| 89 | ||||||||
| 90 | | couche / tâche | activation recommandée | raison | |
|||||||
| 91 | | --- | --- | --- | |
|||||||
| 92 | | cachée (par défaut) | ReLU ou GELU | pas de saturation du côté positif, peu coûteuse, entraînement rapide | |
|||||||
| 93 | | cachée (unités mortes) | leaky ReLU ou ELU | conserve un gradient non nul pour $z < 0$ | |
|||||||
| 94 | | sortie, régression | identité (aucune) | la prédiction est une valeur réelle non bornée | |
|||||||
| 95 | | sortie, binaire | sigmoïde | transforme le score en une probabilité dans $(0, 1)$ | |
|||||||
| 96 | | sortie, multiclasse | softmax | transforme les scores en une distribution sur les classes | |
|||||||
| 97 | ||||||||
| 98 | *Remarque :* la sigmoïde et la tanh sont aujourd'hui rarement utilisées comme activations cachées dans les réseaux profonds à propagation avant, précisément à cause de la saturation vue à la Section 3.2.3. Elles subsistent en sortie (sigmoïde) et à l'intérieur des unités récurrentes à portes, où leur plage bornée est justement recherchée. |
|||||||
| 99 | ||||||||
| 100 | *Une fois les non-linéarités par couche fixées, la prochaine leçon associe l'activation de sortie à une fonction de perte adaptée afin que le réseau ait quelque chose à minimiser.* |
|||||||
| 101 | ||||||||
| 102 | --- |
|||||||
| 103 | Suivant : [Fonctions de perte et couches de sortie](/fr/Deep%20Learning/04%20Loss%20functions%20and%20output%20layers) · [Vue d'ensemble du cours](/fr/Deep%20Learning) |
|||||||
