← Retour au cours
▶ Aperçu gratuit · Leçon offerte

Leçon 1 — Réseaux denses, backpropagation et optimisation moderne

⏱ 60 min · 🎬 Lecon · 🏆 20 XP
🎬
Vidéo en production
Notre équipe pédagogique tourne actuellement cette leçon avec un·e formateur·rice expert·e. Le contenu textuel ci-dessous est complet et utilisable dès maintenant.

Leçon 1 — Réseaux denses et optimisation

Perceptron multicouche, fonctions d'activation, backpropagation, optimiseurs Adam/AdamW, schedulers — TF2 vs PyTorch.

Objectifs de la leçon

  • Construire un réseau de neurones dense (MLP) en TensorFlow/Keras et en PyTorch
  • Comprendre la backpropagation et le calcul automatique du gradient (autograd)
  • Choisir l'optimiseur adéquat : SGD, Momentum, RMSprop, Adam, AdamW
  • Configurer un scheduler de learning rate (StepLR, CosineAnnealing, OneCycleLR)
  • Diagnostiquer le sur/sous-apprentissage via les courbes train/val loss

1. Le perceptron multicouche (MLP)

Un MLP est composé de couches successives de neurones entièrement connectées (dense layers). Chaque neurone applique une transformation affine puis une non-linéarité : y = activation(Wx + b). L'empilement de couches permet d'approximer toute fonction continue (théorème d'approximation universelle, Cybenko 1989, Hornik 1991).

Source officielle : tensorflow.org/tutorials/keras/classification — Chollet F., Deep Learning with Python, Manning 2e éd. 2021.

1.1 Fonctions d'activation

ActivationFormuleQuand l'utiliser
ReLUmax(0, x)Couches cachées CNN/MLP — défaut moderne
Leaky ReLUx si x>0 sinon αxÉviter dying ReLU (gradient 0 quand x<0)
GELUx·Φ(x)Transformers (BERT, GPT)
Sigmoid1/(1+e⁻ˣ)Couche de sortie binaire uniquement
Softmaxeˣᵢ / ΣeˣⱼCouche de sortie classification multiclasse
Tanh(eˣ-e⁻ˣ)/(eˣ+e⁻ˣ)RNN, GAN générateur
Anti-pattern : mettre une Sigmoid en couche cachée profonde = gradient vanishing. La dérivée max est 0,25 ; après 10 couches, le gradient devient ~10⁻⁶. Utiliser ReLU ou GELU.

2. Backpropagation et autograd

La descente de gradient stochastique (SGD) minimise la loss en propageant l'erreur en arrière (chain rule). TensorFlow et PyTorch automatisent ce calcul via le graphe computationnel.

MLP en Keras (TensorFlow)

import tensorflow as tf
from tensorflow.keras import layers, Sequential

model = Sequential([
    layers.Input(shape=(784,)),
    layers.Dense(256, activation='relu', kernel_regularizer=tf.keras.regularizers.l2(1e-4)),
    layers.Dropout(0.3),
    layers.Dense(128, activation='relu'),
    layers.Dropout(0.3),
    layers.Dense(10, activation='softmax')
])

model.compile(
    optimizer=tf.keras.optimizers.AdamW(learning_rate=1e-3, weight_decay=1e-4),
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy']
)

history = model.fit(X_train, y_train, batch_size=128, epochs=20,
                    validation_split=0.1,
                    callbacks=[tf.keras.callbacks.EarlyStopping(patience=3, restore_best_weights=True)])

MLP en PyTorch

import torch
import torch.nn as nn
import torch.optim as optim

class MLP(nn.Module):
    def __init__(self):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(784, 256), nn.ReLU(), nn.Dropout(0.3),
            nn.Linear(256, 128), nn.ReLU(), nn.Dropout(0.3),
            nn.Linear(128, 10)
        )
    def forward(self, x):
        return self.net(x)

model = MLP().cuda()
optimizer = optim.AdamW(model.parameters(), lr=1e-3, weight_decay=1e-4)
criterion = nn.CrossEntropyLoss()

for epoch in range(20):
    for X_batch, y_batch in train_loader:
        X_batch, y_batch = X_batch.cuda(), y_batch.cuda()
        optimizer.zero_grad()
        logits = model(X_batch)
        loss = criterion(logits, y_batch)
        loss.backward()                # autograd
        optimizer.step()

3. Optimiseurs modernes

OptimiseurIdée cléHyperparamètresQuand l'utiliser
SGD + momentumInertielr, momentum=0,9Vision, ResNet — meilleur final
RMSpropLr adaptatif par paramètrelr=1e-3, ρ=0,9RNN, séquences
AdamMomentum + RMSprop combinéslr=1e-3, β₁=0,9, β₂=0,999Défaut moderne
AdamWAdam + weight decay découplélr, weight_decay=1e-4Transformers, recommandé
LionDécouvert par AutoML 2023lr=1/3 × AdamWÉmergent — modèles très larges
Loshchilov & Hutter, « Decoupled Weight Decay Regularization », ICLR 2019, arXiv:1711.05101 — démontre que AdamW > Adam pour les modèles avec régularisation.

4. Schedulers de learning rate

Le learning rate (lr) est le hyperparamètre le plus critique. Un schedule progressif améliore la convergence.

  • StepLR : lr *= γ tous les K epochs
  • ExponentialLR : lr *= γ chaque epoch
  • CosineAnnealingLR : lr suit une cosinusoïde décroissante — recommandé Transformers
  • OneCycleLR : warmup + montée + descente (Smith 2018) — converge 2-4× plus vite
  • ReduceLROnPlateau : divise lr quand val_loss stagne

OneCycleLR en PyTorch

scheduler = optim.lr_scheduler.OneCycleLR(
    optimizer, max_lr=1e-2,
    steps_per_epoch=len(train_loader), epochs=20,
    pct_start=0.1, anneal_strategy='cos'
)
for epoch in range(20):
    for batch in train_loader:
        # forward, backward, step
        optimizer.step()
        scheduler.step()

5. Régularisation et batch normalization

5.1 Dropout (Srivastava 2014)

Désactive aléatoirement une fraction p des neurones à chaque batch. Empêche la co-adaptation excessive. Taux typique : 0,2-0,5.

5.2 Batch Normalization (Ioffe & Szegedy 2015)

Normalise les activations par mini-batch. Accélère drastiquement la convergence, permet des lr plus grands, agit comme régularisation. Place : entre couche dense et activation, ou après convolution.

5.3 LayerNorm

Normalise sur la dimension feature (pas batch). Standard dans les Transformers (BERT, GPT).

Choisir entre BatchNorm et LayerNorm : BatchNorm pour CNN (vision) avec gros batch. LayerNorm pour Transformers et RNN (longueurs variables, petits batchs effectifs).

6. Diagnostic : sous vs sur-apprentissage

SymptômeDiagnosticRemède
train_loss stagne hautSous-apprentissagePlus de capacité, lr plus grand, plus d'epochs
train_loss bas, val_loss qui remonteSur-apprentissageDropout, weight_decay, early stopping, plus de data
val_loss oscillelr trop grand ou batch trop petitRéduire lr, augmenter batch
NaN dans la lossGradient explosion ou lr trop grandgradient_clipping, lr/10, init Xavier/He

7. Synthèse et points-clés

  • ReLU/GELU en couches cachées, Sigmoid/Softmax/Linear en sortie
  • AdamW est le défaut moderne (Loshchilov 2019)
  • OneCycleLR ou CosineAnnealingLR pour les modèles modernes
  • Dropout + weight_decay + early stopping = régularisation triple
  • BatchNorm pour CNN, LayerNorm pour Transformers
  • Toujours monitorer train et val loss + métriques cibles
  • gradient_clipping (max_norm=1.0) protège des explosions RNN/LSTM

Pour aller plus loin

Continuez le parcours 🚀

La leçon suivante est également gratuite. Découvrez-la sans inscription.

Leçon 2 — Continuer →
🍪 Nous utilisons des cookies essentiels et, avec ton accord, des cookies analytiques. En savoir plus

⚙️ Préférences cookies

Choisis quels cookies tu acceptes — modifiable à tout moment.

🔐 Essentiels (obligatoires)Authentification, session, sécurité. Toujours actifs.
📊 Analytics anonymesMesure d'audience anonymisée — aucune donnée personnelle.
📣 MarketingPublicités ITAG pertinentes sur d'autres sites.
💬 Contactez-nous sur WhatsApp