Comprendre l’espace latent

Comment les modèles organisent les images

Passer des pixels à quelques coordonnées. Comprendre ce qu’elles représentent, comment les modèles les organisent et ce qui change quand on s’y déplace.

Découvrir le projet
010203
  1. 01

    Image

    784 pixels pour un chiffre de 28 × 28.

  2. 02

    Code

    Quelques nombres pour résumer cette image.

  3. 03

    Image reconstruite

    Vérifier ce que le code a conservé.

Comprendre ce qu’un modèle garde d’une image

Un chiffre MNIST contient 784 valeurs de pixels. Pourtant, on peut le décrire par moins d’informations : sa forme, son inclinaison, l’épaisseur du trait… Un espace latent est un système de coordonnées plus compact, calculé à partir de ces pixels. Un point y représente une image.

Mon objectif : relier les coordonnées aux images

Je compare plusieurs façons de construire cette représentation sur des chiffres et des fruits. Que rapprochent-elles ? Quels détails perdent-elles ? Peut-on revenir aux pixels, puis inventer une nouvelle image ? Le parcours part des axes de la PCA, passe par les prototypes, puis arrive aux réseaux qui apprennent à encoder et décoder.

010203
  1. 01

    Un point

    Une image encodée.

  2. 02

    La couleur

    Son étiquette, ajoutée pour interpréter.

  3. 03

    Le décodage

    Le sens concret de ses coordonnées.

Un point, une image ; un voisinage, des ressemblances

Dans une carte à deux dimensions, chaque image devient un point : sa première coordonnée donne la position horizontale, sa seconde la verticale. Les couleurs indiquent le chiffre ou le fruit connu, uniquement pour lire le résultat : ces modèles apprennent sans ces étiquettes.

Pourquoi regarder aussi les reconstructions ?

Des groupes de couleurs séparés suggèrent que le code distingue des classes. Des mélanges peuvent venir de formes proches ou d’informations perdues. Mais une belle séparation ne garantit pas une image fidèle. Il faut donc lire ensemble la carte, les originaux et les reconstructions. Avec plus de deux coordonnées, une carte 2D ne montre qu’une partie de la représentation. Pour construire cette carte, il reste à choisir les axes sur lesquels placer les images. C’est le point de départ de la PCA.

Explorer d’abord la longueurPuis une direction complémentairePCA : PC1 → variance maximalePC2 ⟂ PC1 → variance restante maximale

PCA : résumer les images avec moins de coordonnées

La PCA, ou analyse en composantes principales, choisit les axes de la carte en conservant le plus possible les variations entre les images. Pour comprendre ce choix de directions, imaginez une banane que vous ouvrez pour chercher de la pourriture : une coupe dans la longueur expose davantage son étendue qu’une petite rondelle. Cette analogie illustre l’idée de regarder d’abord dans la direction la plus informative, avant d’examiner ce que les autres directions apportent.

Comment la PCA sélectionne les directions de variation

La PCA centre le nuage d’images autour de leur moyenne, puis cherche un premier axe de variance maximale. Le deuxième est perpendiculaire au premier et maximise la variance restante ; les suivants poursuivent ce principe. Chaque image centrée est ensuite projetée sur les axes retenus : ces projections donnent ses coordonnées. L’analogie aide à choisir une direction, mais la PCA ne cherche pas la pourriture et ne garantit pas sa détection. Elle maximise la variance projetée, pas toute forme d’information.

Les deux premiers axes PCA

Chaque point représente un chiffre. Les couleurs se chevauchent : la variance maximale ne correspond pas forcément à la meilleure séparation des classes.

Les axes rapprochent des silhouettes, pas des noms

Sur MNIST, les couleurs se chevauchent dans la projection : deux coordonnées ne suffisent pas à distinguer tous les chiffres. Sur les fruits, les concombres dessinent des branches tandis que pommes et poires partagent une partie du centre. Passez d’un jeu de données à l’autre pour lire ces voisinages.

Pourquoi ces mélanges et ces branches ?

La PCA traite les variations de pixels, sans connaître « pomme » ou « 7 ». La silhouette et son orientation peuvent contribuer aux directions observées ; il faut revenir aux images pour le vérifier. PC1 n’est donc pas un axe universel de « taille ». Sur la figure Fruits, les croix sont des codes générés hors du nuage : pouvoir choisir des coordonnées ne signifie pas que leur décodage sera plausible.

Original / PCA sur le test

Dans chaque paire, l’original précède la reconstruction. Ce notebook conserve assez de composantes pour 75 % de variance : il utilise davantage que les deux axes de la carte.

Plus de coordonnées, plus de détails récupérés

Pour reconstruire, on part de l’image moyenne et on ajoute les motifs des axes, pondérés par les coordonnées du code. La série Fruits montre le passage d’une masse floue à une silhouette puis aux détails. Chaque coordonnée supplémentaire restitue une variation que les précédentes ne décrivaient pas.

Pourquoi deux dimensions ne suffisent-elles pas ?

Deux nombres permettent de dessiner une carte, mais compriment fortement une image. Le rapport atteint environ 90 % de variance avec 87 composantes sur MNIST et 43 sur les fruits à 64 × 64 pixels. Ce ne sont pas des taux de reconnaissance. Entre deux codes, la PCA mélange linéairement les reconstructions : elle peut superposer des contours. Cherchons maintenant un autre résumé : des images types.

010203
  1. 01

    Affecter

    Comparer les pixels aux K centres.

  2. 02

    Moyenner

    Recalculer chaque prototype avec son groupe.

  3. 03

    Coder

    Stocker le numéro du prototype choisi.

Remplacer une image par son prototype le plus proche

Au lieu de placer chaque image sur des axes, K-means apprend K images types, appelées centroïdes. Il affecte chaque image au centre le plus proche, puis remplace chaque centre par la moyenne des images de son groupe. Ces deux étapes se répètent jusqu’à stabilisation.

Ce qui change dans la représentation

Le code est ici un numéro de groupe : par exemple, « prototype 12 ». Pour reconstruire, on retrouve l’image moyenne stockée à ce numéro. Toutes les images du même groupe ont donc la même reconstruction. Contrairement à la PCA, ce code est discret : le numéro 13 n’est pas nécessairement plus proche du 12 que le numéro 80.

10 prototypes appris

Le bas montre les dix centres. Certains chiffres se répètent et d’autres manquent. Le centre est une moyenne d’images, pas une étiquette apprise.

10, 50, 250 centres : que gagne-t-on ?

Avec 10 centres sur MNIST, les prototypes résument grossièrement les écritures et ne couvrent pas nécessairement les dix chiffres. À 50 puis 250, ils peuvent représenter davantage de variantes. Le rapport essaie aussi 500 centres sur les fruits : certains décrivent une pomme ronde, d’autres un concombre allongé ou une poire.

Pourquoi reste-t-il des images floues ?

Un centre moyenne les pixels de formes proches mais pas identiques. Des traits décalés se brouillent ; des chiffres comme 4 et 9 peuvent partager un groupe. Augmenter K donne plus de prototypes, sans garantir un groupe par classe. La grille affichée est un rangement des centres, pas un plan où les voisins se ressemblent. C’est précisément ce que Kohonen va chercher à organiser.

010203
  1. 01

    Trouver le gagnant

    Le prototype le plus proche de l’image.

  2. 02

    Adapter le voisinage

    Déplacer aussi les cases voisines.

  3. 03

    Organiser la grille

    Rendre les transitions de formes plus locales.

Donner un voisinage aux prototypes

Une carte de Kohonen, ou SOM, dispose les prototypes sur une grille. Pour chaque image, elle trouve le neurone le plus ressemblant, puis rapproche de cette image son prototype et ceux de ses voisins. Au fil des passages, des zones de formes proches apparaissent.

Pourquoi déplacer aussi les voisins ?

K-means ajuste chaque centre indépendamment. Kohonen lie leurs évolutions grâce au voisinage de la grille : deux cases proches sont encouragées à décrire des formes proches. Le code d’une image devient la position de sa case gagnante. On reconstruit avec son prototype ; on n’a pas encore un décodeur appris capable de transformer librement tout point du plan en image.

Carte de Kohonen · 15 × 15

225 positions et leurs prototypes, après l’essai de 22 époques sur 5 000 images. Suivez les zones de boucles, de traits et de chiffres voisins : cette fois, le voisinage fait partie de l’apprentissage.

La grille est la représentation à regarder

Sur la carte MNIST de 15 × 15 cases, suivez les zones de boucles, de traits verticaux et de formes proches des 4 ou des 9. Sur la carte Fruits de 10 × 10, repérez les silhouettes allongées puis les formes plus rondes. Chaque vignette est le prototype d’une position de la carte.

Ce que la carte permet, et sa limite

Les voisinages donnent une lecture des ressemblances que le simple numéro K-means ne donnait pas. Ils restent imparfaits : frontières, répétitions et prototypes ambigus sont visibles. La taille de la grille et l’étendue du voisinage influencent ce compromis. Pour dépasser le choix d’une case et apprendre un véritable code continu, passons aux autoencodeurs.

010203
  1. 01

    Encodeur

    Image → code z.

  2. 02

    Goulot latent

    Deux nombres dans les cartes montrées ici.

  3. 03

    Décodeur

    Code z → pixels, comparés à l’original.

Apprendre à compresser et à reconstruire ensemble

Un autoencodeur fait passer l’image dans un encodeur, qui produit quelques nombres, puis dans un décodeur, qui tente de refaire l’image. On compare la reconstruction à l’original et on ajuste les deux réseaux pour réduire l’erreur de pixels. Le code devient un passage obligé pour l’information.

Ce qui change par rapport à la PCA

La PCA applique une projection linéaire commune. Les activations du réseau permettent à l’autoencodeur d’apprendre une transformation non linéaire : des relations plus complexes peuvent tenir dans le code. Contrairement à Kohonen, les coordonnées sont continues et le décodeur est appris. Mais la seule erreur de reconstruction ne lui demande ni de séparer les classes, ni de rendre tout l’espace utilisable.

Autoencodeur · codes z₁ et z₂

À gauche, entraînement ; à droite, test. Les zones de couleurs se retrouvent, mais se mélangent à leurs frontières. Les axes sont appris et ne portent pas de sens imposé.

Revenir aux chiffres de test

Original à gauche, reconstruction à droite. Le 4 prend ici une forme proche d’un 9 : réduire l’erreur moyenne de pixels ne garantit pas de conserver l’identité du chiffre.

Un espace qui se plie pour restituer les images

Les cartes montrent les codes des images d’entraînement à gauche et de test à droite. Les couleurs occupent des zones irrégulières, avec des recouvrements. Regardez les reconstructions associées : une proximité dans le code doit être interprétée à travers les formes que le décodeur restitue.

Pourquoi les coordonnées sont-elles difficiles à nommer ?

Le réseau invente les combinaisons utiles à sa reconstruction ; personne ne lui impose un axe « inclinaison » et un axe « épaisseur ». Plusieurs propriétés peuvent varier ensemble. Dans ces essais, une activation tanh borne le code entre −1 et 1. Les structures du test permettent d’examiner si l’organisation se retrouve sur des images non utilisées pour apprendre.

Décoder une grille de coordonnées

Chaque vignette correspond à un code choisi dans le plan. Comparez les transitions de traits et les formes répétées. Les bords de cette grille sortent de la zone −1 à 1 accessible à l’encodeur tanh.

Une case vide sur la carte peut donner une image étrange

Ces mosaïques décodent une grille de coordonnées, même là où l’encodeur n’a placé aucune image. Parcourir une ligne fait varier une coordonnée, parcourir une colonne fait varier l’autre. Les répétitions et les formes dégradées révèlent les limites de ce qu’a appris le décodeur.

Pourquoi interpoler ne garantit-il pas une bonne image ?

Le réseau a été corrigé sur les codes des images d’entraînement, pas sur chaque point du plan. Une ligne entre deux codes peut donc traverser une zone mal apprise. Ici, la grille explorée dépasse même les bornes −1 à 1 de l’encodeur tanh : une partie des images relève de l’extrapolation. Ajouter des dimensions aide à conserver les détails, mais rend la carte moins directement visible.

Convolutions · code à deux dimensions

Essai du rapport : images 100 × 100, couches convolutionnelles puis un code tanh à deux dimensions, 50 époques. Les trois couleurs se recouvrent largement.

Les images décodées dans le même essai

Les originaux à gauche conservent des textures absentes des reconstructions à droite. Une architecture plus spécialisée ne supprime pas la perte du goulot à deux coordonnées.

Mieux lire les formes avant de les compresser

Les réseaux denses traitent l’image comme une longue liste de pixels. Les convolutions utilisent de petits filtres partagés qui parcourent des zones voisines : contours et motifs locaux peuvent ainsi être exploités avant la compression. Le rapport teste cette variante sur les fruits.

Pourquoi le résultat reste-t-il flou ?

La carte reste celle d’un code à deux dimensions : améliorer l’encodeur ne supprime pas ce goulot très étroit. Les reconstructions de cet essai récupèrent surtout des masses et des silhouettes. La réduction spatiale et l’erreur moyenne de pixels peuvent aussi atténuer les détails. Cette expérience n’établit pas qu’une convolution serait toujours meilleure ; elle montre que l’architecture et la capacité du code doivent être examinées ensemble.

010203
  1. 01

    Encoder

    Une moyenne μ et une dispersion σ.

  2. 02

    Tirer un code

    z = μ + σ × bruit gaussien.

  3. 03

    Apprendre

    Reconstruction + poids × divergence KL.

Apprendre une région probable pour chaque image

L’autoencodeur donne un code fixe. Le VAE produit une moyenne μ et une dispersion σ, qui définissent une distribution de codes pour l’image. Pendant l’apprentissage, on tire un code dans cette région puis on le décode. Le réseau doit donc reconstruire à partir de plusieurs codes proches.

Pourquoi ajouter une contrainte sur les distributions ?

La perte combine fidélité de reconstruction et divergence KL, qui rapproche les distributions de codes d’une référence gaussienne centrée en zéro. Cela encourage un espace plus régulier à échantillonner. La formule z = μ + σ × ε sépare la moyenne, l’amplitude du bruit et un tirage ε : elle permet d’entraîner le réseau malgré le tirage aléatoire.

VAE · moyennes μ₁ et μ₂

Les points montrent les moyennes, pas les tirages ni leur dispersion. Entraînement à gauche, test à droite ; les couleurs restent partiellement mêlées.

VAE · reconstruire les chiffres de test

Lisez chaque paire original / reconstruction. Ces exemples illustrent la fidélité obtenue dans cet essai ; ils ne suffisent pas à classer globalement VAE et autoencodeur.

Des moyennes visibles, des distributions autour

Un point de ces cartes est la moyenne μ calculée pour une image ; la dispersion autour de cette moyenne n’y est pas dessinée. Les couleurs se recouvrent encore : le VAE ne reçoit aucune instruction de séparer les chiffres ou les fruits. Comparez la carte à ses reconstructions, puis à celle de l’autoencodeur.

Pourquoi le nuage ne devient-il pas forcément un cercle ?

La contrainte KL porte sur les distributions de codes de chaque image. Un nuage de leurs seules moyennes n’est pas un dessin de tous les codes échantillonnés. Sa forme dépend aussi du poids de la contrainte et de la reconstruction. Un espace plus régulier vise à faciliter l’exploration ; il ne prouve à lui seul ni de bonnes images, ni une séparation des classes.

VAE · une grille de chiffres générés

La position choisie commande le chiffre décodé : regardez les transitions entre silhouettes. Une mosaïque régulière de codes est une exploration du décodeur, pas un lot d’images originales.

Passer d’une carte de codes à une carte d’images

La mosaïque montre ce que le décodeur produit à différentes coordonnées du plan latent. On peut suivre la transformation des formes en parcourant les lignes et les colonnes. Contrairement à la reconstruction, générer ne demande pas de partir d’une image : on choisit ou on tire un code, puis on le décode.

Pourquoi certaines transitions restent-elles ambiguës ?

Des distributions qui se recouvrent peuvent conduire à des formes intermédiaires ; une perte de pixels peut favoriser des contours moyens. La régularisation rend l’échantillonnage plus cohérent avec l’apprentissage, sans assurer une image nette partout. Dans l’atelier, le point marqué se déplace en même temps que l’image est recalculée : on peut observer directement cet effet.

VAE · fruits, poids KL = 0,0001

Les moyennes forment des régions irrégulières. La légende originale « Digit » correspond ici aux trois fruits. La faible contrainte laisse beaucoup de liberté à la représentation.

VAE · reconstructions, KL = 0,0001

Les masses des fruits sont retrouvées avec des détails atténués. Le décodeur restitue des pixels à partir d’un code compact, appris avec une contrainte probabiliste.

Organiser davantage l’espace a un coût

Le rapport compare sur les fruits une faible contrainte KL, de poids 0,0001, à une contrainte plus forte, de poids 0,01. Regardez comment les cartes changent, puis les reconstructions. Il faut lire les deux : rapprocher les distributions de la référence n’est pas le même objectif que conserver chaque détail.

Pourquoi ces objectifs se concurrencent-ils ?

Pour refaire exactement une image, le réseau voudrait lui donner un code très distinct et peu bruité. La KL pénalise notamment les distributions trop éloignées de la référence ou trop concentrées. Son poids règle l’équilibre. Ces essais illustrent cette tension dans le protocole du rapport ; ils ne permettent pas de désigner un poids optimal pour toutes les données.

010203
  1. 01

    Axes et prototypes

    Résumer avec une base ou un dictionnaire.

  2. 02

    Codes appris

    Adapter la représentation à la reconstruction.

  3. 03

    Distributions

    Encourager un espace que l’on peut échantillonner.

Cinq façons de résumer, cinq façons de reconstruire

La PCA stocke des contributions à des axes. K-means choisit un prototype ; Kohonen organise ces prototypes sur une grille. L’autoencodeur apprend un code continu et son décodeur. Le VAE ajoute des distributions et une contrainte pour mieux explorer les codes possibles.

La question à poser à chaque expérience

Que représente un point, qu’est-ce qui définit ses voisins, et comment revient-on aux pixels ? Ensuite seulement : l’image est-elle fidèle, les transitions sont-elles lisibles, les régions explorées ont-elles été apprises ? Comparez les mêmes images de test quand le protocole le permet. Les figures originales utilisent des réglages et des résolutions différents : elles expliquent les mécanismes, sans constituer un classement unique des modèles.

Une expérience à explorer dans ce chapitre.

Relier un point, son code et son image

Choisissez MNIST ou Fruits, puis une image sur la carte. L’image cible, à droite, est un autre exemple de test choisi dans la liste : elle sert de point d’arrivée à l’interpolation.

Ce que vous pouvez faire

Les curseurs se trouvent sous la carte et les trois images : faites défiler le panneau pour les atteindre. Changez un seul réglage à la fois pour mieux voir son effet.

PCA · comparer les détails et les transitions

  • Gardez la même image et réglez « Composantes conservées » sur 1, puis 2, 16 et 64. Repérez les détails qui réapparaissent et comparez l’erreur affichée sous les curseurs.
  • Fixez ensuite 16 composantes et déplacez l’interpolation de 0 à 50, puis 100 %. Au bout du trajet, vous obtenez la reconstruction de l’image cible. Recommencez avec 2 puis 64 composantes pour comparer les images intermédiaires.

Autoencodeur · explorer autour d’une image

  • À 0 % d’interpolation, déplacez z₁ seul, puis z₂ seul. Essayez un petit déplacement, puis poussez le curseur à une extrémité. Regardez ce qui se transforme et ce qui se dégrade lorsque la croix s’éloigne des points de la carte.
  • Cliquez sur « Revenir au code initial », puis parcourez l’interpolation jusqu’à l’image cible. Repérez une transition progressive ou un changement brusque. Le bouton de retour remet à zéro l’interpolation et les déplacements.

VAE · produire plusieurs variantes

  • Revenez au code initial, puis cliquez plusieurs fois sur « Échantillonner » sans changer d’image. Comparez les variantes produites. Essayez aussi à 50 % d’interpolation pour explorer des variantes entre les deux images.
  • Après un tirage, bougez z₁ ou z₂ : le bruit tiré reste le même, ce qui permet d’isoler l’effet du déplacement. « Revenir au code initial » annule aussi ce bruit et retrouve le décodage de la moyenne de départ.