Surapprentissage (Overfitting)
Problème fondamental de l'apprentissage automatique : le modèle s'adapte excessivement au jeu de données d'entraînement, y compris à son bruit spécifique, perdant ainsi sa capacité de généralisation sur de nouvelles données. Analyse de la divergence des fonctions de perte, des techniques de régularisation et de l'Early Stopping dans le code.
1. Vue d'ensemble du concept et essence mathématique
L'objectif principal de tout modèle d'apprentissage automatique n'est pas de reproduire le passé, mais d'extrapoler avec succès les connaissances vers un futur inconnu : c'est-à-dire démontrer une capacité de généralisation (Generalization).
Lorsque la capacité paramétrique du modèle (nombre de poids) dépasse largement la complexité informationnelle du dataset d'entraînement, on observe le phénomène de Surapprentissage (Overfitting / High Variance). Au lieu d'extraire des régularités invariantes, le réseau de neurones identifie des corrélations aléatoires dans le bruit des données.
Modèle mental : comme un étudiant qui, avant l'examen, mémorise par cœur les numéros exacts des réponses à la fin du manuel au lieu d'étudier les formules : il affichera 100 % de réussite aux tests blancs, mais échouera dès la première tâche d'ingénierie réelle impliquant des chiffres différents.
┌─────────────────────────────────────────────────────────────┐
│ COURBE DE DIVERGENCE DU SURAPPRENTISSAGE │
├─────────────────────────────────────────────────────────────┤
│ LOSS (Erreur) │
│ ▲ │
│ │ Sous-apprentissage POINT IDÉAL Surapprentissage│
│ │ │ │
│ │ ▼ (Déclencheur d'Arrêt Précoce)│
│ │ \ / │
│ │ \ / ═══════════════════════ Val │
│ │ \ / Loss │
│ │ \───────...──────/ │
│ │ \ │
│ │ \───────────────────────────────────────── Train │
│ │ Loss │
│ └────────────────────────────────────────────────────────►│
│ ÉPOQUES D'ENTRAÎNEMENT (Epochs) │
└─────────────────────────────────────────────────────────────┘
2. Implémentation pratique : Early Stopping dans la boucle d'entraînement PyTorch
Voici comment les ingénieurs implémentent l'arrêt automatique de l'entraînement dans le code pour empêcher la dégradation du modèle :
import torch
class EarlyStopping:
def __init__(self, patience: int = 3, min_delta: float = 0.001):
self.patience = patience # Скільки епох чекати після зупинки прогресу
self.min_delta = min_delta # Мінімальне покращення loss
self.counter = 0
self.best_loss = float('inf')
self.should_stop = False
def check(self, val_loss: float) -> bool:
if val_loss < self.best_loss - self.min_delta:
self.best_loss = val_loss
self.counter = 0 # Скидаємо лічильник: є покращення!
else:
self.counter += 1
if self.counter >= self.patience:
self.should_stop = True
print(f"[ALERT] Overfitting виявлено! Зупинка навчання на eval_loss: {val_loss:.4f}")
return self.should_stop
Lors du fine-tuning via la bibliothèque Hugging Face Trainer, cela se configure littéralement en deux lignes de configuration :
from transformers import EarlyStoppingCallback, TrainingArguments
training_args = TrainingArguments(
eval_strategy="epoch",
save_strategy="epoch",
load_best_model_at_end=True,
metric_for_best_model="eval_loss",
weight_decay=0.01 # L2 регуляризація
)
callbacks = [EarlyStoppingCallback(early_stopping_patience=2)]
3. Les quatre principales méthodes de lutte contre le surapprentissage
- Régularisation des poids (Weight Decay / $L_2$) : Pénalise le modèle pour des valeurs absolues trop élevées des poids dans la fonction de perte ($Loss = Loss_{orig} + \lambda \sum w_i^2$), ce qui force le modèle à rester lisse et robuste face aux pics locaux.
- Dropout (Désactivation aléatoire des nœuds) : Pendant l'entraînement, 10 à 20 % des neurones aléatoires dans chaque couche sont temporairement mis à zéro. Cela empêche la « collusion » (co-adaptation) entre les neurones et oblige le réseau à trouver des chemins redondants fiables pour la transmission du signal.
- Réduction de la capacité paramétrique (LoRA Rank Reduction) :
Si le dataset d'adaptation est petit (par exemple, 200 exemples de style corporatif), définir
r=64dans LoRA entraînera presque certainement un surapprentissage catastrophique. Réduire le rang àr=8our=16agit comme un puissant régularisateur. - Augmentation de données et données synthétiques : Ajout artificiel de bruit, reformulation via des modèles de langage et extension du contenu pour diluer les formulations spécifiques.
4. Conclusion technique finale
Le surapprentissage est le prix à payer pour la haute capacité expressive des réseaux de neurones modernes. Un ingénieur ML professionnel ne se fie jamais aux belles métriques de loss d'entraînement, mais maintient toujours strictement un ensemble de données de validation hors de la boucle d'entraînement.
FAQ: Surapprentissage (Overfitting)
Termes associés
Pré-entraînement (Pre-training)
Étape initiale de la création d'un modèle de langue fondamental (Foundation Model). Ce processus consiste à ajuster un réseau de neurones sur des billions de mots issus d'Internet, de livres et de code, en utilisant des clusters composés de milliers de cartes graphiques pendant plusieurs mois, pour un coût s'élevant à des dizaines ou centaines de millions de dollars.
Fine-Tuning
Processus d'adaptation d'un grand modèle pré-entraîné à une tâche ou un style spécifique à l'aide d'un petit jeu de données de haute qualité (Supervised Fine-Tuning, SFT). Permet d'apprendre à l'IA la terminologie médicale, le ton corporatif ou le formatage de code spécifique en quelques heures.
Catastrophic Forgetting
A fundamental problem in artificial neural networks where updating weights for a new task or language overwrites previous connections, leading to the sudden and complete loss of previously acquired skills.
Poids et biais des réseaux de neurones (Weights & Biases)
Nature fondamentale d'un réseau de neurones entraîné. Les poids (Weights) sont les coefficients matriciels représentant la force des connexions entre les neurones artificiels, tandis que les biais (Biases) constituent le seuil de sensibilité à l'activation. Explication des formats de sauvegarde (.safetensors, bfloat16, fp8) et inspection des poids via Python et CLI.