#transfer-learning — Apprentissage profond
Apprentissage par transfert : repartir d'un réseau déjà entraîné.
Ce que tu vas manipuler
- Bienvenue dans #transfer-learning. À l'écran, deux réseaux
2-12-12-1identiques 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. - 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. - Même budget pour les deux :
/entrainer 20. Vingt époques sur vingt points, et les deux courbes se tracent au centre, époque par époque. - 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é). - 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. - É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. - 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. - À toi de jouer :
/rotation 0puis/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)./comparer— Ré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./reinit— Revient à 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
- #optimiseurs — SGD, Momentum et Adam : la course vers le minimum.
- #batch-normalisation — Batch normalisation : garder les activations dans la bonne plage.
- #rnn-lstm — RNN et LSTM : se souvenir d'une séquence.
- #autoencodeur — Autoencodeur : compresser puis reconstruire.
- #transfer-learning — Apprentissage par transfert : repartir d'un réseau déjà entraîné.
- #gan — GAN : un faussaire contre un inspecteur