Dropout Layer
Une couche de dropout met aléatoirement à zéro une partie des activations pendant l’entraînement, empêchant ainsi le réseau de dépendre d’une seule unité et réduisant le surapprentissage.
Une couche de dropout est un composant de régularisation d'un réseau neuronal qui met aléatoirement à zéro une fraction p de ses entrées à chaque étape d'entraînement et transmet toutes les valeurs sans modification pendant l'inférence. Comme n'importe quelle unité peut disparaître à chaque étape, le réseau ne peut pas dépendre de quelques neurones précis ni de coadaptations fragiles entre eux ; il apprend donc des caractéristiques redondantes qui se généralisent mieux et réduit le surapprentissage des données d'entraînement. Geoffrey Hinton et ses collègues ont présenté cette technique en 2012, et Srivastava, Hinton et al. l'ont décrite en détail en 2014. Il s'agit d'une couche intégrée dans PyTorch, TensorFlow et la plupart des autres frameworks d'apprentissage profond, utilisée dans des architectures allant des têtes de classification entièrement connectées aux transformers.
Fonctionnement du dropout#
Pendant l'entraînement, la couche échantillonne un nouveau masque aléatoire à chaque passe avant, en conservant chaque élément avec une probabilité de 1 − p et en le mettant à zéro avec une probabilité de p. Chaque étape entraîne donc un sous-réseau réduit différent, et le réseau complet utilisé au moment du test approxime une moyenne des très nombreux sous-réseaux partageant ses poids ; c'est pourquoi le dropout est souvent décrit comme un entraînement d'ensemble peu coûteux. Pour conserver la même activation attendue dans les deux phases, les frameworks modernes utilisent le dropout inversé : les valeurs conservées sont multipliées par 1 / (1 − p) pendant l'entraînement, de sorte que la couche ne fait rien pendant l'inférence. Dans PyTorch, nn.Dropout suit le mode entraînement ou évaluation du module :
import torch
from torch import nn
torch.manual_seed(0)
dropout = nn.Dropout(p=0.5)
x = torch.ones(10)
# Mode entraînement : environ la moitié des valeurs sont mises à zéro et les valeurs restantes sont multipliées par 1 / (1 - p) = 2
dropout.train()
print("Train:", dropout(x))
# Mode évaluation : la couche transmet toutes les valeurs sans modification
dropout.eval()
print("Eval: ", dropout(x))En mode entraînement, six des dix valeurs sont supprimées et les quatre restantes deviennent 2.0, ce qui maintient la valeur attendue à 1.0 ; en mode évaluation, les dix valeurs restent à 1.0.
Variantes courantes du dropout#
- Dropout spatial :
nn.Dropout2dde PyTorch met à zéro des canaux entiers de cartes de caractéristiques, ce qui convient aux réseaux convolutifs, car les pixels voisins d'un canal sont fortement corrélés et supprimer des pixels isolés les régularise à peine. - Profondeur stochastique (DropPath) : au lieu d'activations individuelles, des branches résiduelles entières sont ignorées aléatoirement pour chaque échantillon ; c'est un composant courant de l'entraînement des Vision Transformers et des CNN modernes.
- Dropout Monte-Carlo : le dropout reste actif pendant l'inférence et le modèle effectue plusieurs passes avant sur la même entrée. La dispersion des prédictions fournit une estimation peu coûteuse de l'incertitude du modèle pour les systèmes critiques pour la sécurité ; Gal et Ghahramani ont interprété cette méthode comme une inférence bayésienne approximative.
- DropConnect : des poids individuels aléatoires sont mis à zéro au lieu des activations, chaque connexion disposant de son propre masque.
Le dropout en pratique#
Les taux de dropout se règlent comme n'importe quel autre hyperparamètre. Srivastava et al. ont constaté que supprimer des unités cachées avec une probabilité de 0.5 fonctionnait bien pour un large éventail de réseaux et de tâches, tandis que les unités d'entrée donnent de meilleurs résultats avec un taux de conservation plus proche de 1 ; le Transformer d'origine utilisait p = 0.1. Un taux trop élevé ralentit la convergence et peut entraîner du sous-apprentissage, et placer le dropout juste avant la normalisation par lot peut nuire à la précision en raison d'un décalage de variance entre l'entraînement et le test. De nombreux réseaux neuronaux convolutifs reposent principalement sur la normalisation par lot, l'augmentation des données et la décroissance des poids, et réservent le dropout à la tête de classification. Les modèles de classification Ultralytics YOLO26 suivent ce schéma : ils contiennent une couche de dropout entre les caractéristiques regroupées à 1,280 canaux et le classificateur linéaire final ; son taux est défini par l'argument d'entraînement dropout (0.0 par défaut).
from ultralytics import YOLO
# Charger un modèle de classification YOLO26 dont la tête contient la couche de dropout
model = YOLO("yolo26n-cls.pt")
# Entraîner avec un dropout de 10 % dans la tête de classification sur un petit sous-ensemble MNIST
results = model.train(data="mnist160", epochs=10, imgsz=64, dropout=0.1)Applications concrètes#
- Analyse d'images médicales : les images médicales étiquetées sont coûteuses ; les classificateurs diagnostiques sont donc souvent ajustés à partir d'un backbone pré-entraîné sur quelques milliers d'images. Le dropout dans la tête de classification limite la mémorisation de cas individuels par cette tête sur un jeu de données aussi réduit.
- Traitement automatique du langage naturel : les encodeurs Transformer comme BERT appliquent un dropout de probabilité 0.1 à toutes les couches, y compris aux poids d'attention, pendant le pré-entraînement et l'ajustement fin.
Le dropout et les techniques connexes#
- Normalisation par lot : la normalisation par lot standardise les entrées de chaque couche pour stabiliser l'entraînement et ajoute uniquement un léger bruit provenant des statistiques des lots, sans supprimer d'unités.
- Lissage des étiquettes : le lissage des étiquettes régularise les cibles d'entraînement en adoucissant les étiquettes one-hot et conserve toutes les activations.
- Élagage : l'élagage supprime définitivement les poids de faible importance pour réduire la taille d'un modèle, tandis que la mise à zéro du dropout ne dure qu'une étape d'entraînement et ne change pas le nombre de paramètres.










