Fonctions d'activation
Identity, sigmoïde, ReLU, tanh : pourquoi elles existent, ce qu'elles donnent, et comment choisir.
Aux chapitres 1 et 2 tu as croisé la fonction d’activation dans la formule sans qu’on lui consacre vraiment de temps. C’est l’objet de ce chapitre. On va voir pourquoi elle est mathématiquement indispensable, comparer les quatre classiques (Identity, sigmoïde, ReLU, tanh) et apprendre à les choisir.
Pourquoi a-t-on besoin d’une fonction non-linéaire
La démonstration qui justifie tout le reste
Imaginons un réseau à deux couches sans fonction d’activation, donc avec remplacée par l’identité. La sortie de la première couche est :
La sortie de la seconde couche, appliquée à , donne :
En posant et , on retrouve :
C’est une simple couche affine. Ajouter des couches sans non-linéarité ne sert mathématiquement à rien : on peut toujours réduire le tout à une seule couche équivalente. C’est la raison d’être de la fonction d’activation.
Cet argument se reproduit à chaque transition entre couches. C’est pourquoi on insère après chaque couche cachée, et pas seulement à la sortie : si une seule paire de couches contiguës n’a pas de non-linéarité entre elles, ces deux couches collapsent en une seule, et la profondeur perd à nouveau de l’intérêt.
Ce qu’on demande à une fonction d’activation
Pour être utilisable en pratique, une fonction doit cocher plusieurs cases :
- Non-linéaire (pour la raison qu’on vient de voir).
- Dérivable presque partout, pour que la backpropagation puisse calculer un gradient (sujet du chapitre 8).
- Calculable rapidement, parce qu’on l’évalue des millions de fois par seconde en entraînement.
- Bornée (idéalement), pour éviter que la sortie ne diverge.
- De gradient non-nul sur un intervalle large, sinon l’apprentissage stagne.
Les quatre classiques qu’on va étudier cochent ces cases à des degrés différents.
Les quatre fonctions classiques
Identity
L’identité est la fonction qui ne fait rien. On l’inclut pour la complétude et parce qu’on l’utilise sur la couche de sortie des problèmes de régression.
Équation : . Dérivée : .
Tu peux ignorer cette fonction tant qu’on est dans les couches cachées, mais elle réapparaîtra au chapitre 6 quand on parlera de fonctions de coût pour la régression.
Sigmoïde
La sigmoïde Sigmoïde Fonction d'activation en forme de S qui prend n'importe quel nombre réel et le compresse dans l'intervalle ]0, 1[. Sa formule est σ(x) = 1 / (1 + e⁻ˣ). Historiquement la plus utilisée, elle est aujourd'hui souvent remplacée par ReLU dans les couches cachées. a dominé les réseaux de neurones entre 1986 et 2010. Sa forme en S compresse n’importe quel réel dans l’intervalle ouvert , ce qui permet d’interpréter sa sortie comme une probabilité.
Équation : . Dérivée : , propriété élégante qui simplifie la backpropagation.
Allure : courbe en S, , , .
Usage moderne : couche de sortie des classifications binaires (où la sortie probabilité a un sens). Plus utilisée pour les couches cachées profondes à cause du vanishing gradient (on y revient juste après).
ReLU
La ReLU ReLU Fonction d'activation définie par ReLU(x) = max(0, x). Linéaire pour les valeurs positives, nulle pour les négatives. Simple, rapide à calculer, et résout en grande partie le problème du gradient qui disparaît. Standard de fait dans les couches cachées des réseaux profonds depuis 2012. Source : Nair et Hinton, 2010 est aujourd’hui le choix par défaut pour les couches cachées. Sa simplicité brutale est précisément ce qui la rend efficace.
Équation : . Dérivée : , soit si et sinon. Indéfinie strictement en , mais on convient d’y mettre ou sans conséquence pratique.
Allure : nulle pour les négatifs, identité pour les positifs. Pas bornée vers le haut.
Usage moderne : depuis son introduction pour les RBM par Nair et Hinton (2010), ReLU et ses variantes (Leaky ReLU, ELU, GELU) sont devenues le choix dominant pour les couches cachées des réseaux profonds. Elle calcule en une seule opération, son gradient est exact (1 ou 0), et elle ne sature pas vers le haut. Inconvénient : si l’entrée d’un neurone est constamment négative, son gradient est nul et la backpropagation (chapitre 8) ne peut plus mettre à jour ses poids. Le neurone se fige. C’est le problème du dying ReLU, qu’on contourne avec les variantes.
Voir un neurone mourir
Le composant ci-dessous est un neurone ReLU à une entrée. Sa sortie est , tracée en orange. Douze points d’un dataset uniforme sont marqués sur cette courbe : vert si le neurone s’active sur eux, rouge sinon. Pousse le biais vers les valeurs très négatives : tu verras tous les points basculer en rouge. À ce stade, le neurone n’apprendra plus, parce que son gradient est partout nul.
Diminue le biais pour pousser le neurone vers la mort. Si la sortie ReLU est nulle sur tout le dataset, son gradient l'est aussi et il n'apprendra plus.
Trois choses à essayer :
- Place le biais à avec un poids positif modéré. Le neurone meurt complètement sur tout le dataset.
- Remets le biais à et inverse le signe du poids. Tu vois que la frontière d’activation pivote autour de l’origine.
- Cherche une configuration où exactement la moitié des points sont actifs. C’est typiquement un bon point de départ pour l’apprentissage.
Tanh
La tangente hyperbolique est la cousine centrée de la sigmoïde. Même allure en S, mais compresse dans au lieu de .
Équation : . Dérivée : .
Allure : courbe en S, , , .
Usage moderne : prisée quand on veut une sortie centrée sur zéro (statistiquement préférable pour l’apprentissage). Souvent utilisée dans les RNN classiques (LSTM, GRU) et dans certaines couches d’attention.
Tableau récapitulatif
Une seule vue d’ensemble pour mémoriser les quatre fonctions classiques : forme, dérivée, plage de sortie, coût de calcul.
| Fonction | Définition | Dérivée | Plage | Coût relatif |
|---|---|---|---|---|
| Identity | 1× (référence) | |||
| Sigmoïde | ~10× (une exp) | |||
| Tanh | ~10× (une exp en pratique) | |||
| ReLU | 1× (un test) |
Trois observations à garder en tête : (1) seules ReLU et Identity ont un coût aussi faible que le produit scalaire qui les précède ; (2) seules Sigmoïde et Tanh saturent et donc déclenchent le vanishing gradient ; (3) seule ReLU peut mourir, ce que les variantes modernes ci-dessous corrigent.
Les coûts relatifs sont des ordres de grandeur : la valeur exacte dépend du hardware (CPU vs GPU, FP32 vs FP16, présence d’instructions vectorielles ou de tables de lookup pour l’exponentielle). Sur un CPU sans optimisation matérielle de l’exponentielle, on est dans la zone indiquée ; sur un GPU moderne en FP16, l’écart entre ReLU et sigmoïde se resserre significativement. Note pratique : on calcule tanh comme , ce qui ne demande qu’une seule exponentielle malgré la formule définitionnelle qui en suggère deux.
La famille ReLU moderne
ReLU est le choix par défaut depuis 2012, mais les architectures de pointe (transformers, modèles de fondation, diffusion) ont adopté des variantes plus douces qui résolvent le dying ReLU tout en gardant l’essentiel des avantages.
Leaky ReLU
Équation : , avec un petit coefficient typiquement fixé à . Dérivée : sur la partie négative, sur la partie positive.
Au lieu de plaquer la sortie à zéro pour les entrées négatives, on laisse passer une petite pente . Le neurone garde un gradient non nul de chaque côté et ne peut donc plus mourir. Introduite par Maas, Hannun et Ng (2013) pour la reconnaissance vocale.
GELU
Équation : , où est la fonction de répartition de la loi normale standard. C’est l’activation des transformers de la fin des années 2010 (BERT, GPT-2, GPT-3) et elle reste très utilisée dans la plupart des transformers contemporains. Les architectures propriétaires plus récentes (GPT-4, Claude) ne publient pas leur choix d’activation. Dérivée : où est la densité gaussienne.
Géométriquement, GELU se comporte presque comme ReLU loin de zéro, mais elle est lisse partout (donc dérivable partout, contrairement à ReLU). Introduite par Hendrycks et Gimpel (2016).
SiLU (Swish)
Équation : , où est la sigmoïde. C’est la même chose que la fonction « Swish » de Ramachandran et al. (2017), simplement renommée. Elle est la composante d’activation interne de SwiGLU, le bloc utilisé dans Llama (toutes générations), Mistral, Mixtral, PaLM et la plupart des LLMs ouverts récents. Elle apparaît aussi telle quelle dans EfficientNet. Dérivée : .
Forme très proche de GELU, légèrement moins chère à calculer (pas de fonction d’erreur, juste une sigmoïde). Décrite indépendamment par Elfwing, Uchibe et Doya (2018) sous le nom SiLU.
ELU
Équation : si , sinon , avec typiquement à . Forme lisse sur la partie négative qui asymptote vers . Dérivée : sur la partie positive, sur la partie négative.
Plus chère que ReLU (une exponentielle sur la branche négative seulement) mais centre la sortie autour de zéro, ce qui aide la convergence. Introduite par Clevert, Unterthiner et Hochreiter (2015).
En 2026, le triplet ReLU / GELU / SiLU couvre l’écrasante majorité des architectures déployées en production. La règle pratique : ReLU pour la simplicité et la vitesse pure, GELU pour les transformers, SiLU pour les architectures denses récentes.
Joue avec les fonctions
L’idée d’une fonction d’activation se voit mieux qu’elle ne se raconte. Le composant ci-dessous est un atelier complet : tu peux activer ou désactiver chaque fonction individuellement (cliquer sur son label), afficher les dérivées en pointillés, activer un curseur qui place une ligne verticale et fait apparaître la tangente locale au point survolé pour chaque courbe (la pente de cette tangente, c’est exactement ). Un panneau dépliable en bas te permet aussi d’ajuster le domaine de si tu veux zoomer ou dézoomer.
Domaine de x
| Fonction | f(x) | f'(x) |
|---|---|---|
| Identity | 0.000 | 1.000 |
| Sigmoid | 0.500 | 0.250 |
| ReLU | 0.000 | 0.000 |
| Tanh | 0.000 | 1.000 |
Les segments en pointillés autour de chaque point sont les tangentes locales. Une tangente plate signifie un gradient faible (apprentissage lent) ; une tangente raide signifie un gradient fort.
Cinq expériences à tenter :
- À , vérifie que et . La tangente de la sigmoïde est nette.
- À , observe que est déjà tombée vers . La sigmoïde sature très vite, sa tangente est presque plate.
- À , ReLU et sa dérivée sont strictement à zéro. Sur cette branche, aucun gradient ne remonte.
- Désactive Identity et Tanh pour comparer seulement sigmoïde et ReLU : on voit le contraste entre saturation et linéarité par morceaux.
- Compare au centre la pente de la tangente de la sigmoïde (au max ) avec celle de ReLU pour (toujours exactement ). C’est la racine du vanishing gradient.
Le problème du vanishing gradient
Quand on dérive la sigmoïde, on voit que . Le maximum est atteint pour et vaut . Donc, à chaque couche traversée, le gradient est multiplié par un facteur au plus égal à .
Pour un réseau de 10 couches utilisant sigmoïde, le gradient à la première couche est multiplié au maximum par . C’est extrêmement faible : la première couche n’apprend plus. C’est le problème du vanishing gradient, observé pour la première fois par Hochreiter dans sa thèse (1991), analysé pour les réseaux récurrents par Bengio, Simard et Frasconi (1994), puis quantifié et corrigé pour les réseaux feedforward profonds par Glorot et Bengio (2010).
ReLU résout en grande partie ce problème : sur sa partie active, le gradient vaut exactement . Une multiplication par ne réduit pas le gradient. C’est l’une des deux raisons (avec sa vitesse de calcul) de sa domination moderne.
Voir le gradient s’écraser
Le composant ci-dessous simule un réseau profond. Bouge le nombre de couches et change la fonction d’activation. Chaque barre représente le gradient effectif à une couche donnée, en partant de la sortie en haut vers l’entrée en bas. Sur sigmoïde tu vois les barres rétrécir à vue d’œil à mesure que la profondeur monte. Sur ReLU elles gardent leur longueur.
La couche de sortie reçoit un gradient de référence de 1. Chaque couche traversée vers l'entrée le multiplie par la dérivée maximale de la fonction choisie : sigmoïde 0,25, tanh 1, ReLU 1.
L’expérience clé : passe à couches avec sigmoïde et regarde le gradient à la première couche. C’est de l’ordre de , totalement insuffisant pour ajuster un poids. Bascule maintenant sur ReLU et observe que les barres se remettent à toutes mesurer la même chose. C’est exactement la raison technique pour laquelle on a abandonné sigmoïde dans les couches cachées au profit de ReLU à partir de 2012.
Comment choisir en pratique
Une heuristique simple qui marche dans 95 % des cas :
| Couche | Choix par défaut | Variantes |
|---|---|---|
| Couches cachées | ReLU | Leaky ReLU, ELU, GELU pour les cas de dying ReLU |
| Sortie de classification binaire | Sigmoïde | (aucune) |
| Sortie de classification multi-classe | Softmax (chapitre 6) | (aucune) |
| Sortie de régression | Identity | (aucune) |
| Couches récurrentes (RNN, LSTM, GRU) | Tanh + sigmoïde sur les portes | (aucune) |
Cette table est une heuristique, pas un dogme. Sur des architectures spécifiques (transformers, GANs, diffusion models), d’autres fonctions sont utilisées (GELU, Swish, Mish). Mais pour un réseau standard, ReLU partout sauf en sortie est un excellent point de départ.
En une phrase
La fonction d’activation est ce qui empêche un réseau profond de se réduire à une régression linéaire. Sigmoïde et tanh ont régné jusqu’à 2010, puis ReLU s’est imposée sur les couches cachées à partir de 2012. Le choix dépend du contexte mais reste rarement délicat en pratique.
Vers le chapitre 4
Tu as maintenant tous les ingrédients pour comprendre la machine qui apprend : entrées vectorielles (chap. 2), somme pondérée, biais et fonction d’activation (ce chapitre). Le chapitre 4 te présente le perceptron, le premier neurone qui ajuste ses poids tout seul à partir d’exemples. C’est la naissance de l’apprentissage automatique tel qu’on le connaît.
Subtilité que tu vas explorer : ce chapitre vient pourtant d’établir qu’une fonction d’activation doit être dérivable pour pouvoir calculer un gradient. Or le perceptron utilise la fonction de Heaviside, presque partout dérivable de dérivée nulle. Comment fait-il pour apprendre alors, sans gradient ? C’est précisément la question qui ouvre le chapitre suivant.
Exercices
Exercice 1 : dériver la sigmoïde
À partir de la définition , démontrer que .
Exercice 2 : calculer une dérivée à une valeur précise
Calculer , puis . Comparer ces deux valeurs. Que peux-tu en déduire sur le comportement du gradient pour des entrées éloignées de zéro ?
Exercice 3 : comparer la vitesse
Soit un neurone qui prend en entrée 1000 valeurs. Combien d’opérations arithmétiques élémentaires (additions, multiplications, exponentielles) sont nécessaires pour calculer la sortie d’un neurone avec activation ReLU ? Avec activation sigmoïde ? La différence te paraît-elle marginale ou significative quand tu multiplies par des millions d’évaluations ?
Sources
- Nair, V. & Hinton, G. E. (2010). « Rectified Linear Units Improve Restricted Boltzmann Machines. » ICML 27. Lien ICML
- Glorot, X. & Bengio, Y. (2010). « Understanding the difficulty of training deep feedforward neural networks. » AISTATS 9, 249-256. Lien AISTATS
- Cox, D. R. (1958). « The Regression Analysis of Binary Sequences. » Journal of the Royal Statistical Society 20(2), 215-242. (Origine historique de la fonction logistique). DOI 10.1111/j.2517-6161.1958.tb00292.x
Pour aller plus loin
- Goodfellow, I., Bengio, Y. & Courville, A. (2016). Deep Learning. MIT Press. Section 6.3 sur les fonctions d’activation et leurs variantes. deeplearningbook.org
- Maas, A. L., Hannun, A. Y. & Ng, A. Y. (2013). « Rectifier Nonlinearities Improve Neural Network Acoustic Models. » ICML 30, Workshop on Deep Learning for Audio, Speech and Language Processing. (Introduction de la Leaky ReLU). Lien Stanford
- Hendrycks, D. & Gimpel, K. (2016). « Gaussian Error Linear Units (GELUs). » arXiv. arXiv 1606.08415
- Ramachandran, P., Zoph, B. & Le, Q. V. (2017). « Searching for Activation Functions. » arXiv. (Recherche automatisée d’activations, introduit la famille Swish, équivalente à SiLU). arXiv 1710.05941
- Elfwing, S., Uchibe, E. & Doya, K. (2018). « Sigmoid-Weighted Linear Units for Neural Network Function Approximation in Reinforcement Learning. » Neural Networks 107, 3-11. (Description originale de SiLU). arXiv 1702.03118
- Clevert, D.-A., Unterthiner, T. & Hochreiter, S. (2015). « Fast and Accurate Deep Network Learning by Exponential Linear Units (ELUs). » arXiv. arXiv 1511.07289
1. Pourquoi une fonction d'activation non-linéaire est-elle indispensable dans un réseau profond ?
2. Quelle est la dérivée de la sigmoïde σ(x) ?
3. Pourquoi ReLU domine-t-elle les couches cachées des réseaux profonds depuis 2012 ?
4. Sur une classification binaire, quelle fonction d'activation utilise-t-on typiquement en sortie ?
5. Pour un réseau profond de 10 couches utilisant la sigmoïde partout, que peut-il arriver lors de l'entraînement ?