Aller au contenu principal

Chargement du lab visuel…

#ganApprentissage profond

GAN : un faussaire contre un inspecteur

Ce que tu vas manipuler

  1. Bienvenue dans #gan. À l'écran, un plan vu de dessus : les points blancs sont les originaux (ici un anneau), les points roses sont les faux que produit un petit réseau G, le générateur — pour l'instant n'importe où. Le fond gris est la carte d'un second réseau D, le discriminateur : il hésite partout (50 %). Le jeu : G est un faussaire qui ne voit jamais les originaux, seulement le verdict de D ; D est un inspecteur qui voit vrais et faux et apprend à les distinguer. Chacun s'améliore contre l'autre, jusqu'à ce que l'inspecteur ne sache plus trancher — c'est le principe des GAN, qui ont produit les premiers visages synthétiques photoréalistes.
  2. Lance les vingt premiers tours : /pas 20. À chaque tour, D voit 16 vrais et 16 faux et ajuste ses critères ; puis G reçoit le verdict de D sur ses faux, remonte le gradient à travers D jusqu'à ses propres poids, et corrige son tir.
  3. Continue : /pas 100. Les pointillés du panneau marquent les niveaux d'équilibre : ln 2 ≈ 0,69 pour G et 2·ln 2 ≈ 1,39 pour D — ce qu'on obtient quand D répond 50 % partout. Une perte de D très basse veut dire que l'inspecteur gagne ; une perte de G qui monte, que le faussaire se fait prendre.
  4. Encore /pas 100. Observe l'aperçu à droite : la précision de D sur les vrais et sur les faux. Quand les deux tournent autour de 50 %, l'inspecteur ne fait plus mieux qu'une pièce de monnaie — c'est exactement ce qu'on veut.
  5. Change les originaux : /reel deux-bosses. Le faussaire garde ses réflexes d'anneau et l'inspecteur ses critères : rien n'est réinitialisé.
  6. Voici le piège le plus connu des GAN. Tape /effondrement : le faussaire va jouer 16 coups au pas maximal pour un seul coup, minuscule, de l'inspecteur. Autrement dit, G s'optimise contre un D presque figé.
  7. Relance l'entraînement : /pas 60.
  8. À toi de jouer : /effondrement pour couper le régime, /reel spirale puis /pas 100 (une forme plus dure à imiter), /bruit 1 (un bruit à une seule dimension : G ne peut plus dessiner qu'une courbe), /lr-d 0.1 (un inspecteur trop rapide : D devient sûr de lui et le gradient de G s'évanouit), /echantillon 300 pour voir plus de faux, /graine 12 pour une autre partie, /reinit pour repartir. Prochaine étape : le canal #tokenisation, premier canal du thème LLM — comment un modèle de langage découpe le texte avant même de l'apprendre.

Commandes du canal

  • /reel <anneau|deux-bosses|spirale|carre>Change la distribution réelle à imiter (G et D conservés).
  • /pas <1..100>Itérations d'entraînement alterné : 2 coups de D puis 1 coup de G, par lots de 16.
  • /bruit <1..4>Dimension du bruit latent z (réinitialise G, D conservé).
  • /lr-g <0.001..0.1>Pas d'apprentissage du générateur.
  • /lr-d <0.001..0.1>Pas d'apprentissage du discriminateur.
  • /echantillon <50..300>Nombre de faux affichés (même bruit z, prolongé ou tronqué).
  • /graine <1..9999>Nouvelle partie : autres réels, autres poids initiaux, mêmes réglages.
  • /effondrementArme (ou coupe) le régime qui provoque un effondrement de modes : lrG maximal, lrD minuscule, 16 coups de G par coup de D.
  • /reinitRevient à l'anneau, d = 2, lrG = lrD = 0.02, 200 faux, réseaux neufs.

Glossaire

GAN (réseau antagoniste génératif)
Paire de réseaux entraînés l'un contre l'autre : un générateur fabrique des faux à partir de bruit, un discriminateur apprend à les distinguer des vrais. Le générateur ne voit jamais les données, seulement le verdict du discriminateur — et pourtant il finit par imiter leur distribution.
Générateur
Réseau G qui transforme un vecteur de bruit z en un échantillon (ici un point 2D, ailleurs une image). Il est entraîné à maximiser la probabilité que D se trompe : son gradient remonte à travers D jusqu'à ses propres poids.
Discriminateur
Classifieur binaire D qui reçoit un échantillon et estime la probabilité qu'il soit vrai. Il est entraîné sur des vrais (cible 1) et des faux de G (cible 0). Sa carte de probabilités sert aussi de « signal d'erreur » au générateur.
Jeu à somme nulle / minimax
Formulation du GAN : D maximise ln D(x) + ln(1 − D(G(z))), G minimise la même quantité. Ce que gagne l'un, l'autre le perd. En pratique G optimise plutôt −ln D(G(z)), dite perte non saturante, qui donne un gradient utile même quand D domine.
Bruit latent
Vecteur aléatoire z (gaussien, dimension d) qui sert d'entrée au générateur : c'est la seule source de diversité des faux. Deux z voisins donnent deux faux voisins ; la dimension de z borne la « forme » que G peut produire (une courbe si d = 1, une surface si d ≥ 2).
Effondrement de modes
Défaut classique où G ne produit plus qu'un ou quelques échantillons (un seul « mode ») pour tous les z, parce qu'il a trouvé l'endroit que D note le mieux. La perte de G peut rester correcte : elle ne mesure pas la diversité. Ici on le repère à l'écart-type des faux qui s'écrase.
Équilibre de Nash
Situation où aucun des deux joueurs n'a intérêt à changer seul de stratégie. Pour un GAN idéal : G reproduit exactement la distribution des vrais et D répond 50 % partout ; les pertes valent alors ln 2 pour G et 2·ln 2 pour D. En pratique on ne fait que tourner autour.
Entraînement alterné
On ne peut pas optimiser G et D en même temps : à chaque itération on fait quelques pas de D (G figé), puis un pas de G (D figé), sur de petits lots. Le rapport entre les deux vitesses (pas, nombre de coups) décide qui domine — et donc de la stabilité du jeu.
Gradients évanescents du générateur
Quand D devient trop bon, sa sigmoïde sature : D(G(z)) ≈ 0 partout et la dérivée qui revient vers G tend vers zéro. Le faussaire cesse d'apprendre alors qu'il est encore mauvais. La perte non saturante et un D pas trop rapide (lr-d modéré) limitent le problème.
GAN conditionnel
Variante où G et D reçoivent en plus une information de contexte (une étiquette de classe, un texte, une image) : G apprend alors à produire un échantillon de cette catégorie. C'est la base des générateurs guidés (image à partir d'un croquis, d'un mot…).

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