Aller au contenu principal

Chargement du lab visuel…

#transfer-learningApprentissage profond

Apprentissage par transfert : repartir d'un réseau déjà entraîné.

Ce que tu vas manipuler

  1. Bienvenue dans #transfer-learning. À l'écran, deux réseaux 2-12-12-1 identiques devant la même tâche : classer 60 points cibles, bleus et roses, des lunes légèrement décalées. À gauche, transfert : un réseau déjà entraîné sur 400 lunes (la tâche source) dont les deux premières couches sont gelées (bleu glacé) — seule la tête rose apprendra. À droite, depuis zéro : le même réseau, poids tirés au hasard, tout à apprendre. Les nappes sont encore grises : aucun des deux n'a regardé la cible. C'est ce que fait un hôpital qui reprend un réseau entraîné sur des millions de photos pour lire 200 radiographies : quand on a peu d'exemples, on ne repart jamais de zéro.
  2. Rendons la cible vraiment pauvre : tape /donnees 20. Vingt exemples, c'est tout ce que verront les deux réseaux. Au passage, le réseau source se pré-entraîne une fois pour toutes (400 points, 8 époques) et se copie à gauche ; à droite, des poids aléatoires.
  3. Même budget pour les deux : /entrainer 20. Vingt époques sur vingt points, et les deux courbes se tracent au centre, époque par époque.
  4. Et si on libérait tout ? /geler 0 : plus aucune couche gelée, les 205 paramètres du réseau transféré sont réentraînés sur les 20 points, avec le même budget de 20 époques (rejoué).
  5. Regèle les deux premières couches : /geler 2. Les caractéristiques apprises sur la source redeviennent intouchables ; seule la tête (12 poids + 1 biais) s'ajuste.
  6. Éloignons la cible de la source : /rotation 90. Les lunes cibles pivotent d'un quart de tour — le nuage tourne sous tes yeux — et les 20 époques sont rejouées.
  7. Mets des chiffres sur tout ça : /comparer. Le tuteur résume précision de validation, écart, paramètres entraînés et budget, et la bande entre les deux courbes s'affiche.
  8. À toi de jouer : /rotation 0 puis /donnees 200 (avec beaucoup de données, le réseau neuf rattrape presque le transfert), /geler 1 (ne geler que la première couche : le compromis classique du réglage fin), /lr 0.1, /cible cercles (une autre famille de formes : les caractéristiques des lunes ne servent à rien), /source cercles (les cercles sont invariants par rotation : tourne-les, le transfert tient), /graine 7, /reinit. Prochaine étape : #gan, où deux réseaux ne coopèrent plus mais s'affrontent.

Commandes du canal

  • /source <lunes|cercles>Forme de la tâche source (400 points) sur laquelle le réseau est pré-entraîné.
  • /cible <lunes|cercles>Forme de la tâche cible, pauvre en données.
  • /rotation <degrés=0..180>Fait pivoter la cible : plus elle tourne, plus elle s'éloigne de la source.
  • /donnees <points=10..200>Nombre de points d'entraînement de la cible.
  • /geler <0|1|2>Nombre de premières couches gelées dans le réseau transféré (0 = tout réentraîner).
  • /entrainer <époques=5..60>Poursuit le réglage fin des deux réseaux, même budget pour chacun.
  • /lr <0.001..0.5>Taux d'apprentissage du réglage fin (les deux réseaux).
  • /comparerRésumé chiffré transfert vs depuis zéro ; affiche ou masque la bande d'écart.
  • /graine <1..999>Autre tirage des points cibles et de l'initialisation du réseau neuf.
  • /reinitRevient à lunes → lunes, 60 points, 2 couches gelées, 0 époque.

Glossaire

Apprentissage par transfert
Réutiliser un réseau entraîné sur une tâche source riche en données comme point de départ d'une tâche cible qui en a peu. Les couches basses, qui détectent des motifs génériques, sont reprises telles quelles ; on n'apprend que ce qui est propre à la cible. C'est la norme en vision et en langage : presque personne ne repart de zéro.
Pré-entraînement
Première phase d'entraînement, sur la tâche source, qui produit les poids de départ. Coûteuse mais faite une seule fois, puis partagée : ImageNet pour les images, des milliards de mots pour les modèles de langue. Ici : 400 points, 8 époques, mis en cache.
Réglage fin
Poursuivre l'entraînement du réseau pré-entraîné sur la tâche cible, avec un petit taux d'apprentissage. On peut libérer toutes les couches ou seulement les dernières : plus on en libère, plus le réseau s'adapte — et plus il risque de sur-apprendre si les données manquent.
Gel des couches
Interdire la mise à jour des poids de certaines couches pendant le réglage fin : leurs gradients sont ignorés. On gèle d'abord les couches basses, les plus génériques. Moins de paramètres libres, c'est moins de sur-apprentissage et un entraînement plus rapide.
Tête de classification
Les dernières couches du réseau, qui transforment les caractéristiques extraites en décision. C'est la partie que l'on remplace ou réentraîne systématiquement en transfert : ici 12 poids et 1 biais, contre 205 paramètres au total.
Extraction de caractéristiques
Utiliser le réseau pré-entraîné, gelé, comme une fonction fixe qui transforme l'entrée en un vecteur de caractéristiques, puis entraîner un classifieur simple dessus. C'est le cas /geler 2 : la source « voit », la tête décide.
Domaine source / cible
Le domaine, c'est la distribution des données. La source est celle du pré-entraînement (abondante), la cible celle de la tâche visée (rare). Le transfert fonctionne d'autant mieux que les deux se ressemblent : mêmes lunes légèrement décalées, oui ; lunes puis cercles, beaucoup moins.
Décalage de domaine
Écart entre la distribution source et la distribution cible : ici une rotation et une translation. Petit décalage, le transfert tient ; grand décalage, les caractéristiques gelées deviennent inadaptées et le transfert peut faire pire que le hasard (transfert négatif).
Oubli catastrophique
Quand un réseau réentraîné sur une nouvelle tâche écrase ce qu'il savait de l'ancienne. Libérer toutes les couches avec un grand taux d'apprentissage y expose ; geler les couches basses ou réduire le pas le limite.
Peu d'exemples
Régime où la tâche cible ne fournit que quelques exemples par classe (ici 10). Apprendre 205 paramètres depuis zéro y est presque impossible ; en réutiliser 192 déjà appris et n'en régler que 13 devient raisonnable. Le transfert est la première réponse au manque de données.

Autres canaux du thème Apprentissage profond

  • #optimiseursSGD, Momentum et Adam : la course vers le minimum.
  • #batch-normalisationBatch normalisation : garder les activations dans la bonne plage.
  • #rnn-lstmRNN et LSTM : se souvenir d'une séquence.
  • #autoencodeurAutoencodeur : compresser puis reconstruire.
  • #transfer-learningApprentissage par transfert : repartir d'un réseau déjà entraîné.
  • #ganGAN : un faussaire contre un inspecteur