Sigmoïde (Sigmoid Function)
La fonction sigmoïde (ou fonction logistique) est une fonction d’activation qui transforme n’importe quelle valeur réelle en une sortie entre 0 et 1, avec une courbe caractéristique en forme de « S ». Sa formule est σ(x) = 1 / (1 + e⁻ˣ). Elle est la base de la régression logistique et reste utilisée comme couche de sortie pour la classification binaire dans les réseaux de neurones.
La sigmoïde doit son nom à sa forme en S (du grec sigma, σ). Les valeurs très négatives convergent vers 0, les très positives vers 1, et la transition est douce autour de 0 où la fonction vaut exactement 0,5. Cette propriété permet d’interpréter la sortie comme une probabilité : si σ(x) = 0,87, il y a 87 % de chances que l’entrée appartienne à la classe positive.
- Formule
σ(x) = 1 / (1 + e⁻ˣ)- Plage de sortie
- (0, 1)
- Dérivée
σ'(x) = σ(x) × (1 - σ(x))- Dérivée maximale
- 0,25 (en x = 0)
- Origines
- Verhulst (1830, modèle logistique), Wilson & Cowan (1972, neurosciences), LeCun (1998, LeNet)
- Usage actuel
- Couche de sortie (classification binaire), régression logistique, portes dans LSTM/GRU
- Limite principale
- Vanishing gradient dans les couches cachées profondes
La formule et ses propriétés
La fonction sigmoïde logistique est définie par :
σ(x) = 1 / (1 + e⁻ˣ)
Où x est l’entrée (souvent la somme pondérée des entrées d’un neurone) et e est la constante d’Euler (≈ 2,718). Quand x est grand et positif, e⁻ˣ tend vers 0, donc σ(x) → 1. Quand x est grand et négatif, e⁻ˣ tend vers l’infini, donc σ(x) → 0. En x = 0, σ(0) = 1/(1+1) = 0,5.
La dérivée de la sigmoïde possède une propriété élégante : elle s’exprime en fonction d’elle-même :
σ'(x) = σ(x) × (1 - σ(x))
C’est la seule fonction d’activation courante qui apparaît dans sa propre dérivée, ce qui la rend pratique à calculer pendant la rétropropagation : si vous avez déjà calculé la sortie σ(x), la dérivée est immédiate. La dérivée maximale est de 0,25 (atteinte en x = 0). Ce maximum relativement faible est la cause directe du vanishing gradient.
Propriétés clés
Domaine : tous les nombres réels (-∞, +∞). Plage : strictement entre 0 et 1 (0 et 1 ne sont jamais atteints, seulement approchés asymptotiquement). Continuité et dérivabilité : la sigmoïde est lisse (infiniment dérivable) sur tout son domaine, ce qui la rend idéale pour les méthodes d’optimisation basées sur le gradient. Monotonie : la fonction est strictement croissante. Saturation : pour les valeurs extrêmes (|x| > 5), la fonction est presque plate, avec une dérivée quasi nulle.
Sigmoïde et régression logistique
La régression logistique est le cas d’usage historique et le plus fondamental de la sigmoïde. Elle prend la sortie d’un modèle linéaire (z = w₁x₁ + w₂x₂ + … + b) et la passe à travers la sigmoïde pour obtenir une probabilité :
P(y=1|x) = σ(w·x + b) = 1 / (1 + e⁻⁽ʷ·ˣ⁺ᵇ⁾)
Si cette probabilité dépasse un seuil (typiquement 0,5), l’entrée est classée comme positive. Sinon, elle est classée comme négative. La régression logistique est un des modèles les plus utilisés en machine learning pour la prédiction de risques (crédit, santé), la détection de fraude, la prédiction de churn, et la classification de spam. Le modèle est rapide, interprétable (chaque poids indique l’influence de la feature correspondante), et produit des probabilités calibrées.
D’un point de vue structurel, la régression logistique est un perceptron dont la fonction d’activation de Heaviside a été remplacée par la sigmoïde. Ce remplacement permet la descente de gradient (la sigmoïde est dérivable, pas la fonction de Heaviside) et fournit des probabilités plutôt que des décisions binaires brutes.
Pourquoi la sigmoïde ne s’utilise plus dans les couches cachées
Le problème du gradient évanescent
C’est la raison principale de l’abandon de la sigmoïde dans les couches cachées des réseaux profonds. La dérivée maximale de la sigmoïde est 0,25. Lors de la rétropropagation, les gradients sont multipliés couche par couche. Si chaque couche atténue le gradient par un facteur de 0,25, après 10 couches le gradient est 0,25¹⁰ ≈ 10⁻⁶. Les premières couches du réseau reçoivent des gradients si faibles qu’elles ne peuvent plus ajuster leurs poids. Elles cessent d’apprendre.
C’est pourquoi les réseaux profonds étaient impossibles à entraîner avec la sigmoïde. Les réseaux de neurones des années 1990 étaient limités à 2-3 couches. Il a fallu le passage à ReLU (dérivée de 1 pour les positifs) en 2012 pour rendre les architectures profondes (50, 100, 1000+ couches) viables.
Sorties non centrées sur zéro
La sigmoïde produit des sorties toujours positives (entre 0 et 1). Cela signifie que les gradients qui arrivent à la couche précédente sont soit tous positifs, soit tous négatifs, forçant les mises à jour des poids à aller dans la même direction. Ce phénomène crée un chemin en zigzag pendant l’optimisation, ralentissant la convergence. La tanh (plage [-1, 1]) résout partiellement ce problème en étant centrée sur zéro, c’est pourquoi elle était préférée à la sigmoïde pour les couches cachées quand ReLU n’était pas encore populaire.
Coût computationnel
Le calcul de e⁻ˣ est bien plus coûteux qu’une simple comparaison (max(0, x) pour ReLU). Sur des milliards de neurones évalués à chaque itération d’entraînement, cette différence de coût est significative. Les « hard sigmoids » (approximations linéaires par morceaux de la sigmoïde) ont été développées pour réduire ce coût dans certaines architectures embarquées.
Où la sigmoïde est encore utilisée
Couche de sortie pour la classification binaire
C’est l’usage principal de la sigmoïde en deep learning moderne. La dernière couche du réseau a un seul neurone avec une activation sigmoïde qui produit la probabilité d’appartenance à la classe positive. Le seuil de décision est typiquement 0,5 mais peut être ajusté selon le coût relatif des faux positifs et faux négatifs.
Classification multi-label
Contrairement à softmax qui impose que les probabilités somment à 1 (une seule classe par exemple), la sigmoïde traite chaque classe indépendamment. Chaque sortie est une probabilité indépendante entre 0 et 1. C’est exactement ce qu’il faut pour la classification multi-label où un exemple peut appartenir à plusieurs classes simultanément (un article de presse peut être étiqueté « politique » ET « économie »).
Portes dans LSTM et GRU
Les réseaux LSTM (Long Short-Term Memory) et GRU (Gated Recurrent Unit) utilisent des sigmoïdes comme fonctions de porte (gate functions). La porte d’oubli (forget gate), la porte d’entrée (input gate) et la porte de sortie (output gate) utilisent toutes la sigmoïde pour produire des valeurs entre 0 et 1 qui contrôlent le flux d’information. Une valeur proche de 1 signifie « laisser passer », proche de 0 signifie « bloquer ». C’est un usage naturel de la sigmoïde comme interrupteur continu.
Mécanismes d’attention
Certains mécanismes d’attention utilisent la sigmoïde pour calculer des scores d’attention indépendants (contrairement au softmax qui normalise les scores en distribution). Cette approche est utilisée dans certaines variantes récentes des transformers pour permettre un traitement plus flexible de l’attention.
La famille des sigmoïdes
Le terme « sigmoïde » désigne en réalité toute fonction en forme de S, pas uniquement la fonction logistique. Les principales variantes sont :
La fonction logistique σ(x) = 1/(1+e⁻ˣ) : la plus courante, plage (0, 1). C’est elle qu’on appelle « la sigmoïde » en machine learning.
La tangente hyperbolique (tanh) tanh(x) = (eˣ-e⁻ˣ)/(eˣ+e⁻ˣ) : plage (-1, 1), centrée sur zéro. Elle est mathématiquement liée à la sigmoïde par tanh(x) = 2σ(2x) - 1. Ses gradients sont plus forts, ce qui améliore la convergence, mais elle souffre toujours du vanishing gradient.
L’arctangente arctan(x) : plage (-π/2, π/2), converge plus lentement que la logistique. Rarement utilisée en deep learning.
La hard sigmoid : approximation linéaire par morceaux de la sigmoïde, utilisée dans les architectures embarquées (MobileNet) pour réduire le coût de calcul tout en conservant un comportement similaire.
Implémentation en Python
import numpy as np
# Sigmoïde
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# Dérivée (à partir de la sortie)
def sigmoid_derivative(sigmoid_output):
return sigmoid_output * (1 - sigmoid_output)
# Exemples
x = np.array([-5, -2, 0, 2, 5])
s = sigmoid(x)
print("σ(x) :", np.round(s, 4))
# σ(x) : [0.0067, 0.1192, 0.5000, 0.8808, 0.9933]
print("σ'(x):", np.round(sigmoid_derivative(s), 4))
# σ'(x): [0.0066, 0.1050, 0.2500, 0.1050, 0.0066]
# Notez : le max est 0.25 en x=0, et quasi 0 aux extrêmes
En PyTorch et Keras, la sigmoïde est utilisée dans la couche de sortie :
# PyTorch : classification binaire
import torch.nn as nn
model = nn.Sequential(
nn.Linear(784, 256),
nn.ReLU(), # ReLU dans les couches cachées
nn.Linear(256, 1),
nn.Sigmoid() # Sigmoïde en sortie uniquement
)
# Keras : classification binaire
from tensorflow import keras
model = keras.Sequential([
keras.layers.Dense(256, activation='relu', input_shape=(784,)),
keras.layers.Dense(1, activation='sigmoid') # Sortie binaire
])
# Loss function : binary_crossentropy
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
Chronologie historique
1830 : Pierre François Verhulst, mathématicien belge, utilise la fonction logistique pour modéliser la croissance démographique auto-limitante (les populations ne croissent pas exponentiellement indéfiniment). C’est la première utilisation connue de la sigmoïde. 1943 : McCulloch et Pitts créent le premier neurone artificiel avec une fonction de seuil binaire (Heaviside). 1972 : Wilson et Cowan (Université de Chicago) publient un modèle de neurones biologiques utilisant la sigmoïde logistique pour modéliser le taux de décharge neuronal en fonction du stimulus. C’est le pont entre les neurosciences et les réseaux de neurones artificiels. 1986 : Rumelhart, Hinton et Williams popularisent la rétropropagation. La sigmoïde est l’activation standard car elle est dérivable (contrairement au seuil de Heaviside). 1998 : LeCun utilise la tanh (variante de la sigmoïde) dans LeNet, le premier CNN capable de reconnaître des chiffres manuscrits à un niveau pratique. 2012 : AlexNet adopte ReLU et marque le déclin de la sigmoïde dans les couches cachées. La sigmoïde conserve son rôle en couche de sortie.
Sigmoïde vs ReLU vs Tanh : comparaison détaillée
| Critère | Sigmoïde | Tanh | ReLU |
|---|---|---|---|
| Plage de sortie | (0, 1) | (-1, 1) | [0, +∞) |
| Centrée sur zéro | Non | Oui | Non |
| Dérivée maximale | 0,25 | 1,0 | 1,0 (constante pour x > 0) |
| Vanishing gradient | Sévère | Modéré | Non (pour x > 0) |
| Coût de calcul | Élevé (exponentielle) | Élevé (2 exponentielles) | Très faible (comparaison) |
| Usage couches cachées | Obsolète | Rare (RNN) | Standard |
| Usage couche sortie | Binaire / multi-label | Régression bornée | Jamais |
La sigmoïde a dominé les années 1980-2000, la tanh l’a partiellement remplacée dans les couches cachées grâce à son centrage sur zéro (LeCun préconisait la tanh dans LeNet en 1998), puis ReLU a rendu les deux obsolètes pour les couches cachées à partir de 2012. Aujourd’hui, la sigmoïde conserve un rôle bien défini et irremplaçable en couche de sortie et dans les mécanismes de porte.
Considérations numériques
En implémentation, la sigmoïde peut causer des problèmes de stabilité numérique. Pour de très grandes valeurs positives de x, e⁻ˣ → 0, ce qui est stable. Mais pour de très grandes valeurs négatives, e⁻ˣ → +∞, ce qui peut provoquer un overflow. La solution standard est d’utiliser une implémentation conditionnelle :
def stable_sigmoid(x):
"""Sigmoïde numériquement stable"""
return np.where(
x >= 0,
1 / (1 + np.exp(-x)), # Pour x positif : standard
np.exp(x) / (1 + np.exp(x)) # Pour x négatif : forme alternative
)
En PyTorch et TensorFlow, les implémentations intégrées (torch.sigmoid, tf.nn.sigmoid) gèrent automatiquement cette stabilité numérique. Il est toujours préférable d’utiliser ces implémentations natives plutôt que de coder la formule manuellement.
Pour la fonction de perte, préférez binary_crossentropy (ou BCEWithLogitsLoss en PyTorch) qui combine la sigmoïde et l’entropie croisée en une seule opération numériquement stable, plutôt que d’appliquer la sigmoïde séparément puis de calculer la perte. Cette fusion évite les instabilités liées aux logarithmes de valeurs proches de 0 ou 1.
Sigmoïde vs Softmax : quand choisir laquelle
La question revient constamment. La réponse est simple.
Utilisez la sigmoïde quand chaque sortie est une probabilité indépendante. C’est le cas de la classification binaire (une seule sortie, probabilité d’être positif) et de la classification multi-label (chaque classe a sa propre probabilité indépendante, un exemple peut appartenir à plusieurs classes).
Utilisez softmax quand les probabilités doivent sommer à 1 et qu’une seule classe est correcte. C’est le cas de la classification multi-classes exclusive (l’image est SOIT un chat SOIT un chien SOIT un oiseau, mais pas plusieurs).
En résumé : sigmoïde pour binaire ou multi-label, softmax pour multi-classes exclusif. Mélanger les deux est une erreur qui produit des probabilités incohérentes.
Questions fréquentes sur la sigmoïde
Qu’est-ce que la fonction sigmoïde simplement ?
La sigmoïde transforme n’importe quel nombre en une valeur entre 0 et 1, avec une courbe en forme de S. Sa formule est σ(x) = 1/(1+e⁻ˣ). Les grands positifs donnent des valeurs proches de 1, les grands négatifs proches de 0, et 0 donne exactement 0,5. En machine learning, elle sert à convertir des scores bruts en probabilités, ce qui est essentiel pour la classification binaire (spam/pas spam, malade/sain).
Pourquoi la sigmoïde n’est-elle plus utilisée dans les couches cachées ?
À cause du vanishing gradient. La dérivée maximale de la sigmoïde est seulement 0,25 (en x=0). Lors de la rétropropagation dans un réseau profond, les gradients sont multipliés couche par couche. Après 10 couches : 0,25¹⁰ ≈ 10⁻⁶. Les premières couches ne reçoivent presque plus de gradient et cessent d’apprendre. ReLU (dérivée de 1 pour les positifs) a résolu ce problème et l’a remplacée dans les couches cachées.
Quelle est la différence entre sigmoïde et softmax ?
La sigmoïde produit des probabilités indépendantes pour chaque sortie (la somme n’est pas contrainte). Softmax produit une distribution de probabilités dont la somme vaut exactement 1. Utilisez la sigmoïde pour la classification binaire (1 sortie) ou multi-label (chaque classe indépendante). Utilisez softmax pour la classification multi-classes exclusive (exactement 1 classe par exemple).
La sigmoïde est-elle la même chose que la régression logistique ?
Non, mais elles sont étroitement liées. La régression logistique est un modèle de classification qui utilise la sigmoïde comme fonction d’activation. Le modèle calcule une somme pondérée des entrées (partie linéaire), puis passe le résultat à travers la sigmoïde pour obtenir une probabilité. Structurellement, la régression logistique est un perceptron avec une sigmoïde au lieu de la fonction de Heaviside.
Où la sigmoïde est-elle encore utilisée en deep learning moderne ?
En couche de sortie pour la classification binaire et multi-label. Comme fonction de porte dans les cellules LSTM et GRU (porte d’oubli, porte d’entrée, porte de sortie). Dans certains mécanismes d’attention utilisant des scores indépendants. Et dans les GANs (réseaux adversariaux) comme dernière couche du discriminateur. La sigmoïde n’est plus jamais utilisée dans les couches cachées des réseaux profonds : ReLU et ses variantes (GELU, SwiGLU) l’ont entièrement remplacée dans ce rôle.