Module 7 — Régularisation : abandon, pénalité L2, augmentation de données
Un réseau profond dispose d'une capacité énorme. Des travaux célèbres ont montré qu'un grand réseau peut apprendre par cœur des images associées à des étiquettes entièrement aléatoires : la mémorisation pure est à sa portée. La régularisation est donc ce qui l'oblige à généraliser plutôt qu'à mémoriser.
L'abandon : désactiver des neurones au hasard
L'abandon, ou dropout, proposé en 2012, met à zéro une fraction des neurones à chaque passage d'entraînement, tirée au hasard.
Pourquoi cela fonctionne-t-il ? Trois lectures complémentaires, et la deuxième est la plus éclairante.
D'abord, l'abandon empêche la co-adaptation. Sans lui, des neurones se spécialisent en équipes qui ne fonctionnent qu'ensemble, chacun corrigeant les erreurs des autres — un arrangement fragile qui ne survit pas à des données nouvelles. Comme un neurone peut disparaître à tout moment, chacun doit devenir utile indépendamment.
Ensuite, l'abandon revient à entraîner un ensemble de réseaux. Chaque tirage définit une architecture différente ; avec neurones, il existe sous-réseaux possibles, tous partageant leurs poids. L'inférence approche la moyenne de cet ensemble gigantesque, et l'on retrouve le bénéfice des méthodes d'ensemble du cours sur l'apprentissage supervisé, pour le prix d'un seul modèle.
Enfin, l'abandon injecte du bruit, ce qui pousse le réseau vers des solutions plus robustes.
Le point technique que tout le monde manque
L'abandon se comporte différemment à l'entraînement et à l'inférence, et cette asymétrie est la source d'erreur la plus commune.
À l'entraînement, une fraction des neurones est désactivée. À l'inférence, aucun neurone n'est désactivé : on veut une prédiction déterministe et l'usage de tout le réseau. Mais si l'on ne corrigeait rien, la somme reçue par la couche suivante serait plus grande à l'inférence qu'à l'entraînement, puisque davantage de neurones y contribuent — l'échelle des activations changerait entre les deux régimes.
La solution retenue par les bibliothèques est l'abandon inversé : pendant l'entraînement, les activations survivantes sont divisées par . L'espérance de la somme est ainsi préservée, et l'inférence n'a plus rien à ajuster.
modele.train() # abandon actif, normalisation par lots en mode statistiques du lot
# ... boucle d'entrainement ...
modele.eval() # abandon desactive, normalisation en mode moyennes courantes
with torch.no_grad():
predictions = modele(X_test)
Oublier modele.eval() avant l'évaluation est un classique. Les prédictions deviennent bruitées et non reproductibles, les métriques se dégradent sans raison apparente, et aucune erreur n'est levée. Le module suivant montrera que la normalisation par lots souffre du même oubli, en pire.
En pratique, un taux de 0,2 à 0,5 sur les couches entièrement connectées est l'usage courant. Notez que l'abandon est nettement moins employé dans les architectures récentes : la normalisation par couche et les grands volumes de données ont largement pris le relais.
La pénalité L2
Ajouter à la perte un terme proportionnel au carré des poids les pousse vers zéro :
C'est la même idée qu'en régression Ridge : des poids plus petits produisent une fonction plus lisse, donc moins susceptible d'épouser le bruit. Dans le vocabulaire du deep learning on parle de weight decay, et le module 5 a signalé le point d'attention : avec Adam, cette pénalité doit être appliquée séparément, ce que fait AdamW. Des valeurs de à couvrent la plupart des cas.
L'arrêt anticipé et l'augmentation de données
L'arrêt anticipé est la régularisation la plus économique qui existe : on surveille la perte de validation et l'on interrompt l'entraînement quand elle cesse de s'améliorer, en conservant les poids du meilleur passage. Une patience de quelques époques évite de s'arrêter sur une fluctuation. Le module 9 montrera comment lire ces courbes.
L'augmentation de données agit à la racine du problème. Plutôt que de contraindre le modèle, elle multiplie les exemples par des transformations qui préservent l'étiquette : rotations, recadrages, variations de luminosité pour des images ; remplacement par des synonymes pour du texte. Un chat pivoté de dix degrés reste un chat, mais c'est une observation nouvelle pour le réseau.
La règle à retenir tient en une phrase : la transformation doit préserver l'étiquette. Une symétrie horizontale convient à des photographies d'animaux, mais elle détruit l'information sur des chiffres manuscrits ou du texte.
Face à un surapprentissage, l'ordre d'efficacité est presque toujours le même. Plus de données d'abord, réelles ou augmentées, car c'est la seule réponse qui ajoute de l'information. Puis l'arrêt anticipé, gratuit et immédiat. Puis une pénalité de poids modérée. Puis l'abandon sur les couches denses. Réduire la taille du réseau ne vient qu'en dernier : un grand réseau bien régularisé fait généralement mieux qu'un petit réseau sans régularisation.
En résumé
- Un grand réseau peut mémoriser des étiquettes aléatoires : la régularisation est ce qui l'oblige à généraliser.
- L'abandon empêche la co-adaptation et équivaut à entraîner un ensemble de sous-réseaux à poids partagés.
- L'abandon inversé divise les activations survivantes par à l'entraînement ; oublier
eval()à l'inférence dégrade silencieusement les résultats. - Pénalité L2, arrêt anticipé et augmentation de données complètent l'arsenal ; l'augmentation n'est valide que si la transformation préserve l'étiquette.
Module suivant : la normalisation par lots et par couche, qui a transformé la stabilité de l'entraînement.