Une technique de régularisation : à chaque étape d'entraînement, une part des neurones est éteinte au hasard. Le réseau ne peut plus compter sur quelques neurones qui auraient appris l'historique par cœur, il doit répartir ce qu'il apprend. Le résultat est un modèle qui tient mieux sur des données jamais vues.
Une équipe où, chaque jour, la moitié des membres est absente au hasard. Personne ne peut devenir le seul à savoir faire une tâche : les compétences se répartissent, et l'équipe tient même un jour de grève.
Pendant l'entraînement, chaque neurone d'une couche est éteint avec une probabilité fixée, par exemple 50 %. Ce ne sont pas les mêmes d'un lot à l'autre.
Un neurone ne peut pas compter sur la présence d'un voisin précis. Les motifs appris doivent être robustes, pas des coïncidences de l'historique.
En production, tous les neurones sont actifs. Keras compense en augmentant les signaux pendant l'entraînement, pour que les deux phases restent à la même échelle.
Chaque tirage entraîne un sous-réseau différent. Le réseau complet se comporte comme une moyenne de ces milliers de sous-réseaux, à la manière d'un ensemble de modèles.
Groupe (ciblé ou témoin), âge, ancienneté, panier moyen, visites récentes, et l'achat observé. Le signal est faible : un réseau de 2 × 256 neurones a largement de quoi apprendre le bruit par cœur.
Le même réseau est entraîné sans dropout, puis avec 50 % de dropout. On compare les deux sur des clients jamais vus avant de s'en servir pour choisir qui cibler.
Un réseau qui récite a une AUC élevée sur les données d'entraînement et nettement plus basse sur le test. Le dropout doit réduire cet écart. Si l'AUC de test ne progresse pas, un modèle plus simple suffit.
Noms donnés pour R (keras3) et Python (Keras).
La part de neurones éteints. 0,5 sur de grandes couches denses, 0,1 à 0,3 près de l'entrée ou sur des couches plus petites. Au-delà de 0,5, le réseau peine à apprendre.
Après les couches denses cachées, jamais sur la couche de sortie. En vision, on le réserve souvent aux dernières couches.
Avec du dropout, le réseau apprend plus lentement : il faut plus de passes. On garde l'arrêt anticipé sur la perte de validation (early stopping).
# Achat après campagne : dropout en R (keras3)
library(keras3)
campagne <- read.csv("campagne_marketing.csv")
X <- scale(model.matrix(~ groupe + age + anciennete_mois + panier_moyen + visites_30j, data = campagne)[, -1])
y <- campagne$achat
set.seed(42)
idx <- sample(nrow(X), round(0.7 * nrow(X)))
reseau <- function(taux) {
set_random_seed(42)
modele <- keras_model_sequential(input_shape = ncol(X))
modele <- layer_dense(modele, units = 256, activation = "relu")
modele <- layer_dropout(modele, rate = taux) # éteint au hasard cette part des neurones
modele <- layer_dense(modele, units = 256, activation = "relu")
modele <- layer_dropout(modele, rate = taux)
modele <- layer_dense(modele, units = 1, activation = "sigmoid")
compile(modele, optimizer = "adam", loss = "binary_crossentropy", metrics = list(metric_auc(name = "auc")))
fit(modele, X[idx, ], y[idx], epochs = 60, batch_size = 64, verbose = 0)
# Évaluation après entraînement : le dropout est coupé en prédiction
c(entrainement = evaluate(modele, X[idx, ], y[idx], verbose = 0)[["auc"]],
test = evaluate(modele, X[-idx, ], y[-idx], verbose = 0)[["auc"]])
}
print(round(rbind(sans_dropout = reseau(0), dropout_50 = reseau(0.5)), 3))
# Achat après campagne : dropout en Python (Keras)
import pandas as pd
import keras
from keras import layers
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
campagne = pd.read_csv("campagne_marketing.csv")
X = pd.get_dummies(campagne[["groupe", "age", "anciennete_mois", "panier_moyen", "visites_30j"]], drop_first=True, dtype=float)
y = campagne["achat"].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42, stratify=y)
echelle = StandardScaler().fit(X_train)
X_train, X_test = echelle.transform(X_train), echelle.transform(X_test)
def reseau(taux):
keras.utils.set_random_seed(42)
modele = keras.Sequential([keras.Input((X_train.shape[1],)),
layers.Dense(256, activation="relu"), layers.Dropout(taux), # éteint au hasard cette part des neurones
layers.Dense(256, activation="relu"), layers.Dropout(taux),
layers.Dense(1, activation="sigmoid")])
modele.compile(optimizer="adam", loss="binary_crossentropy", metrics=[keras.metrics.AUC(name="auc")])
modele.fit(X_train, y_train, epochs=60, batch_size=64, verbose=0)
# Évaluation après entraînement : le dropout est coupé en prédiction
return modele.evaluate(X_train, y_train, verbose=0)[1], modele.evaluate(X_test, y_test, verbose=0)[1]
for taux in [0.0, 0.5]:
auc_train, auc_test = reseau(taux)
print(f"dropout {taux:.0%} | AUC entraînement : {auc_train:.3f} | AUC test : {auc_test:.3f}")
C'est quand le réseau apprend l'historique par cœur, bruit compris. Ses performances sont excellentes sur les données d'entraînement et décevantes sur de nouvelles données. On le repère à l'écart qui se creuse entre la perte d'entraînement et celle de validation.
Non. En Keras comme en PyTorch, il ne s'applique que pendant l'entraînement ; en prédiction, tous les neurones sont actifs. Exception volontaire : le Monte Carlo dropout, qui le laisse actif et répète la prédiction pour mesurer l'incertitude.
0,5 est la valeur historique pour les grandes couches denses, 0,2 à 0,3 un bon départ ailleurs. Le taux se règle comme les autres hyperparamètres : on en compare deux ou trois sur les données de validation.
Freine la taille des coefficients (pénalité L2). En Keras, le même principe s'applique aux poids d'un réseau.
Voir la fiche → souvent à sa placeStabilise l'entraînement et régularise un peu. Dans les réseaux de vision récents, elle a largement remplacé le dropout.
Voir la fiche → la même intuitionFaire voter des modèles entraînés sur des tirages différents. Le dropout fait voter des sous-réseaux, sans en entraîner plusieurs.
Voir la fiche →Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.
Nous utilisons des cookies de mesure d'audience et de suivi publicitaire pour comprendre la fréquentation du site et l'efficacité de nos annonces. Rien n'est déposé sans votre accord. En savoir plus