Activation Function
Une fonction d’activation est la fonction non linéaire qu’un neurone applique à son entrée pondérée, permettant aux réseaux d’apprendre des motifs courbes. Comparaison des choix courants.
Une fonction d'activation est la fonction qu'un neurone d'un réseau neuronal (NN) applique à la somme pondérée de ses entrées pour produire sa sortie. Son rôle essentiel est d'ajouter de la non-linéarité : sans elle, tout empilement de couches se réduit à une seule transformation linéaire, et la profondeur n'apporte rien. Grâce à elle, un réseau peut représenter des frontières de décision courbes, du tracé des chiffres manuscrits au contour d'un piéton dans une image de caméra. Les fonctions d'activation jouent deux rôles. Dans les couches cachées, des fonctions comme ReLU, SiLU et GELU permettent au réseau de construire des caractéristiques. Dans la couche de sortie, des fonctions comme sigmoid et softmax transforment les scores bruts en probabilités.
Pourquoi les réseaux ont besoin de non-linéarité#
Une couche sans activation calcule Wx + b. Deux couches de ce type donnent W₂(W₁x + b₁) + b₂, ce qui équivaut à (W₂W₁)x + (W₂b₁ + b₂), soit une autre couche linéaire unique. Une activation entre les couches empêche cette réduction, et le théorème d'approximation universelle montre qu'une couche cachée contenant suffisamment d'unités non linéaires peut approximer toute fonction continue sur un domaine borné.
La dérivée de la fonction d'activation compte autant que sa forme, car la rétropropagation multiplie ces dérivées couche après couche. La dérivée de sigmoid ne dépasse jamais 0,25 et celle de tanh tend vers zéro pour les grandes entrées ; les gradients diminuent donc lorsqu'ils traversent de nombreuses couches saturantes : c'est le problème de la disparition du gradient. La dérivée de ReLU vaut exactement 1 pour toute entrée positive, ce qui explique en grande partie pourquoi l'entraînement de réseaux très profonds est devenu pratique.
Fonctions d'activation courantes#
- ReLU : max(0, x). Peu coûteuse, elle a un gradient de 1 pour les entrées positives et produit exactement zéro pour les entrées négatives. C'est la fonction d'activation cachée par défaut des CNN depuis AlexNet en 2012, mais les unités qui ne reçoivent que des entrées négatives cessent d'apprendre.
- Leaky ReLU : Multiplie les entrées négatives par une faible pente, comme 0.01 ou 0.1, afin que chaque unité conserve un gradient.
- SiLU (Swish) : x · σ(x), une courbe lisse qui descend légèrement sous zéro pour les entrées négatives. Elle est courante dans les CNN efficaces et les détecteurs en temps réel.
- GELU : x · Φ(x), où Φ est la fonction de répartition de la loi normale standard. C'est la fonction d'activation standard de BERT, GPT-2 et des transformeurs de vision.
- Tanh : Ramène les entrées entre −1 et 1 avec un centre à zéro. Elle façonne l'état caché des réseaux récurrents comme le GRU.
- Sigmoid : Ramène les entrées entre 0 et 1, ce qui convient aux sorties binaires et mult-étiquettes ainsi qu'aux portes des cellules récurrentes.
- Softmax : Transforme un vecteur entier de scores en une distribution de probabilités dont la somme vaut 1, pour la classification à étiquette unique et les poids d'attention.
- SwiGLU : Couche à portes qui multiplie une projection activée par SiLU par une seconde projection apprise. Elle a remplacé l'activation simple dans les couches à propagation avant de nombreux grands modèles de langage (LLM) récents.
PyTorch fournit chaque fonction élément par élément sous forme de module dans torch.nn, ce qui permet de les comparer facilement sur les mêmes entrées :
import torch
from torch import nn
x = torch.tensor([-3.0, -1.0, 0.0, 1.0, 3.0])
# Common activations, each applied element-wise to the same inputs
activations = {
"ReLU": nn.ReLU(),
"Leaky ReLU": nn.LeakyReLU(0.1),
"SiLU": nn.SiLU(),
"GELU": nn.GELU(),
"Tanh": nn.Tanh(),
"Sigmoid": nn.Sigmoid(),
}
for name, act in activations.items():
print(f"{name:>10}: {[round(v, 3) for v in act(x).tolist()]}")Pour les entrées −3, −1, 0, 1 et 3, ReLU affiche [0.0, 0.0, 0.0, 1.0, 3.0] et Leaky ReLU [-0.3, -0.1, 0.0, 1.0, 3.0]. SiLU donne [-0.142, -0.269, 0.0, 0.731, 2.858] et GELU [-0.004, -0.159, 0.0, 0.841, 2.996] : toutes deux laissent passer les petites valeurs négatives et se rapprochent de ReLU pour les grandes entrées. Tanh donne [-0.995, -0.762, 0.0, 0.762, 0.995] et sigmoid [0.047, 0.269, 0.5, 0.731, 0.953] ; toutes deux s'aplatissent à ±3, où leurs gradients sont déjà faibles.
Choisir une fonction d'activation#
Les couches cachées suivent généralement les conventions de leur famille d’architectures, et la couche de sortie dépend de la tâche. Softmax convient aux tâches où chaque entrée appartient à une seule classe, sigmoid aux étiquettes qui peuvent coexister, et les sorties de régression ne font appel à aucune fonction d’activation, ce qui leur permet de prendre n’importe quelle valeur. Le matériel peut également limiter le choix : certains accélérateurs en périphérie n’exécutent nativement que des fonctions simples telles que ReLU, Leaky ReLU et Hard-Swish. YOLO26 applique SiLU après la convolution et la normalisation par lots dans chaque bloc Conv, attribue un score à chaque classe de détection au moyen d’une sigmoid indépendante, de sorte que les scores de classe d’une boîte n’aient pas à totaliser 1, et applique softmax aux 1 000 classes ImageNet de ses modèles de classification.
Fonctions d'activation et termes associés#
- Fonction de perte : L'activation façonne la sortie de chaque neurone pendant la propagation avant, et la perte évalue la prédiction finale du réseau par rapport à l'étiquette. Les bibliothèques fusionnent souvent la dernière activation dans la perte, comme le fait
CrossEntropyLossavec softmax, pour assurer la stabilité numérique. - Normalisation par lots : La normalisation par lots ou par couche remet les activations à l'échelle dans une plage stable à l'aide de statistiques et de paramètres appris. Elle se trouve à côté de la fonction d'activation, généralement juste avant celle-ci, et n'ajoute aucune non-linéarité par elle-même.
- Activations : Employé au pluriel comme nom, « activations » désigne les valeurs de sortie produites par une couche. « Non-linéarité » et l'ancien terme « fonction de transfert » sont des synonymes de fonction d'activation. Pendant l'entraînement, les frameworks conservent en mémoire les activations de chaque couche pour la passe arrière ; c'est pourquoi le checkpointing des gradients économise de la mémoire en supprimant certaines activations puis en les recalculant pendant la rétropropagation.










