Warmup (Learning Rate Warmup)
iaDéfinition
Le Learning Rate Warmup est une technique d'optimisation qui consiste a augmenter progressivement le taux d'apprentissage (learning rate) de 0 a sa valeur maximale au debut de l'entrainement, avant d'appliquer le schedule standard (cosine decay, linear decay). Cette phase initiale de 'chauffe' est necessaire pour la stabilite de l'optimiseur Adam/AdamW dans les reseaux profonds. Le probleme qu'il resout : au debut de l'entrainement, les estimations de variance adaptative (v_t dans Adam) sont trop bruyantes et mal calibrees. Appliquer un grand LR des le debut peut entrainer des mises a jour de poids catastrophiques qui endommagent les representations initiales. Le warmup donne le temps a Adam d'estabiliser ses estimations avant d'appliquer le LR maximal. Les strategies de warmup : (1) Linear warmup — LR augmente lineairement de 0 a LR_max sur N_warmup steps, (2) Cosine warmup — augmentation en cosinus, plus douce, (3) Square root warmup (original Transformer) — LR = d_model^(-0.5) * min(step^(-0.5), step * warmup_steps^(-1.5)). Le linear warmup est le plus courant pour les LLMs modernes. Valeurs typiques de N_warmup : 500-2000 steps pour les pre-entrainements de LLMs 7B-70B (representant 0.1-1% des steps totaux), et 10-100 steps pour les fine-tunings courts. Le warmup_ratio (pourcentage des steps totaux) est souvent plus utile que N_warmup absolu : 0.03 (3%) est la valeur par defaut de HuggingFace TrainingArguments. Le warmup est particulierement important avec BF16/FP16 ou les gradients peuvent etre petits et bruites initialement. Sans warmup, les premiciers steps en mixed precision peuvent produire des overflow ou underflow dans les operations FP16, destabilisant l'entrainement.
Schedules avec Warmup
from transformers import get_cosine_schedule_with_warmup
from torch.optim import AdamW
optimizer = AdamW(model.parameters(), lr=1e-4, weight_decay=0.1)
# Schedule cosine avec warmup lineaire
scheduler = get_cosine_schedule_with_warmup(
optimizer,
num_warmup_steps=100, # 100 steps de warmup
num_training_steps=10000 # 10000 steps totaux
)
# Visualiser le schedule
lrs = []
for step in range(10000):
optimizer.step()
scheduler.step()
lrs.append(scheduler.get_last_lr()[0])
# LR: 0 -> 1e-4 en 100 steps, puis cosine decay jusqu'a 0Valeurs recommandees
- Pre-training : warmup_ratio=0.01-0.05, puis cosine decay
- SFT (supervised fine-tuning) : warmup_ratio=0.03
- DPO/ORPO : warmup_ratio=0.03-0.1 (plus de prudence)
- Regle empirique : N_warmup = sqrt(N_total)
Articles liés
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés.
Un projet cybersécurité ?
Expert dispo · Réponse 24h