Transfer Learning

Scénario : réutilisation d’un Backbone pré-entraîné type ResNet / MobileNet / EfficientNet sur un problème de classification

Introduction

Définition

  • Le backbone est la partie du réseau qui extrait les caractéristiques (apprentissage des features)

  • Le head est la partie finale du réseau qui transforme les features en décision (classiquement du FC)

Nous appelons Transfer learning (TL), le fait de réutiliser un modèle pré-entraîné pour une nouvelle tâche. Cette approche peut prendre deux formes :

  • Feature extractor : backbone complètement gelé, on entraîne uniquement la head

  • Fine-tuning : on débloque certaines couches du backbone pour adapter les features à la nouvelle tâche

Deux contextes :

  • Feature extractor : plus simple, plus stable, orienté petit dataset, faible nombre de classes, besoin de résultats rapides

  • Fine-tuning : plus puissant, plus risqué (overfit possible), requiert plus de données

Chronologie

En transfer learning, on commence toujours par la phase de feature extraction. Le fine-tuning est une amélioration qui s’applique dans la phase suivante, c’est n’est pas un point de départ.

Feature extraction

  1. Préparation des données

    Cette étape doit être finalisée avant toute expérimentation.

    Points à vérifier :

    • Labels corrects

    • Séparation stricte entre les ensembles d’entraînement et de validation

    • Normalisation compatible avec le modèle pré-entraîné (statistiques ImageNet)

    • Data augmentation si le nombre d’images par classe est limité

    • Pas de data augmentation sur l’ensemble de validation

    En transfer learning, une mauvaise normalisation détruit l’information pré-apprise.

  2. Choix du modèle pré-entraîné

    Le modèle doit être choisi avant toute décision d’optimisation.

    Tout dépend de la complexité du dataset :

    • Taille(nombre d’images)

    • Complexité visuelle des images (résolution, textures similaires..)

    L’idée centrale :

    • Un réseau trop gros sur un petit dataset → Overfit

    • Un réseau trop petit sur un gros dataset → Underfit

    Taille du dataset

    Trop petit

    Zone saine

    Trop gros

    < 1 000 images

    EfficientNet-B0, ResNet34

    MobileNetV2, ResNet18

    Overfit fort probable

    1k – 10k

    MobileNetV2

    ResNet18, EfficientNet-B0

    ResNet50+

    10k – 50k

    ResNet18

    ResNet34, EfficientNet-B0

    EfficientNet-B3+

    > 100k

    ResNet18

    ResNet50+

    peu utile

  3. Choisir un optimiseur

    Cette choix est peu critique, on conseille :

    • Adam / AdamW pour la phase feature extractor

    • SGD plutôt pour le fine-tuning profond

  4. Créer une tête

    Pour le démarrage, on peut prendre une FC+ReLU

  5. Optimiser le learning rate

    Configuraiton : backbone gelé - head en entraînement

    Le LR reste le paramètre n°1, mais attention, les échelles changent :

    Cas 1 — Backbone gelé - LR “classique” pour la tête :

    • Adam : 1e-3

    • SGD : 1e-2 à 1e-1

    Cas 2 — Fine-tuning

    • Adam : 1e-4 à 3e-5

    • SGD : LR de 1e-4 à 1e-5

    En fine-tuning, les LR sont plus petits : on ajuste, on ne ré-apprend pas.

  6. Architecture

    Si les résultats ne conviennent pas (overfit, divergence), il est possible de tester une autre architecture pour le head :

    • MLP simple ou bicouche

    • dropout éventuel

    Il faudra alors effectuer à nouveau l’étape précédente

Fine-tuning

Par rapport au learning from scratch, on ne testera pas de nouvel optimiseur caractéristiques cela est peu utile dans ce contexte.

  1. Régularisation

    Beaucoup plus important que pour l’apprentissage from scratch. En TL, la régularisation est souvent nécessaire dès le début.

    • Data augmentation (par défaut)

    • Dropout dans la tête

    • Weight decay (AdamW recommandé)

    • Label smoothing (souvent utile)

    Le backbone est puissant, le risque d’overfit augmente.

  2. Couche BatchNorm

    Si le backbone contient des couches BatchNorm :

    • Feature Extractor : backbone gelé → ne pas toucher aux BatchNorm

    • Fine-tuning

      • Choix A : on gèle quand-même les couches BatchNorm

      • Choix B : il faut absolument batch_size > 32

  3. Scheduler

    Les schedulers sont très efficaces en TL.

    • CosineAnnealing / ReduceLROnPlateau

    • Peuvent apporter de bons résultats