MNIST Express - 4/8 - Réduire les dimensions sans réduire l'intelligence
- 3 mars
- 3 min de lecture
Dernière mise à jour : 22 mars
Lien vers l'appli : https://mnist-express.streamlit.app/
Lien vers le repo du projet : https://github.com/vohorgeez/MNIST-Express
Dans les articles précédents, nous avons vu deux choses importantes :
MNIST, ce sont des images de chiffres converties en vecteurs de 784 dimensions.
k-NN fonctionne en comparant des distances dans cet espace gigantesque.
Mais ce n'est pas sans poser un vrai problème.
Enfilez vos lunettes 784D
Une image MNIST, c'est 28x28 pixels. Donc 784 nombres.
En géométrie, ça veut dire que chaque image de chiffre vit dans un espace à 784 dimensions.
On sait ce qu'est une dimension. C'est une ligne. Deux dimensions, c'est un carré. Trois dimensions, c'est un cube. Au-delà de trois ? On est dans le bulk. Dans Interstellar.
Nous, on veut travailler en 784D... Attache ta ceinture.
Le fléau de la dimensionnalité (encore)
On en a déjà parlé dans l'article précédent.
Quand les dimensions augmentent :
Les distances deviennent moins discriminantes ;
Les points s'éloignent tous les uns des autres ;
Le volume de l'espace explose ;
Les données deviennent "clairsemées" ;
Autrement dit :
Plus il y a de dimensions, plus il devient difficile de distinguer ce qui est proche de ce qui est loin.
k-NN commence à devenir moins pertinent.
Supprimons des pixels, alors !
Non. Faisons plutôt quelque chose de beaucoup plus élégant :
Utilisons :
PCA (Analyse en Composantes Principales)
Idée centrale :
Au lieu de regarder 784 axes (un par pixel), on va chercher les directions dans lesquelles les données varient le plus. Ainsi, on ne garde que les directions les plus importantes.
Intuition géométrique :
Imaginez un nuage de points en 3D :

Si le nuage est étiré dans une direction particulière :
Cette direction contient l'information principale ;
Les autres directions contiennent surtout du bruit (en comparaison).
PCA va donc :
Trouver l'axe où la variance est maximale ;
Trouver le deuxième axe perpendiculaire avec le plus de variance restante ;
Etc.
Et puis... Coupez !
Réduire la dimension
Et donc, le résultat, c'est qu'au lieu de 784 dimensions, on peut en garder 100, 50, 30... et quand même conserver l'essentiel de l'information !
Ce serait comme résumer les 700 pages du premier tome du Seigneur des Anneaux en conservant l'intrigue principale et en supprimant tous les passages où les hobbits ne font que marcher dans la forêt...
Tu perds de nombreux détails mais tu gardes le sens.
PCA sur MNIST
Sur MNIST, ce qui varie le plus entre les chiffres :
La forme globale ;
Les grandes structures ;
Les contrastes dominants
Ce qui varie peu :
Les micro-variations de pixels ;
Le bruit ;
Les petites imperfections
PCA va naturellement conserver les grandes structures.
Pour un classifieur, c'est juste parfait.

Pourquoi ça aide k-NN ?
Trois raisons majeures :
Moins de bruit
Moins de dimensions inutiles, donc distances plus propres.
Moins de calcul
On l'avait pas vue venir celle-là.
Comparer 50 dimensions au lieu de 784, doit-on vraiment faire un dessin ?
Moins de fléau de la dimension
L'espace devient plus dense, et donc plus exploitable (et pertinent).
Qu'est-ce que ça donne en pratique ?
On observe souvent :
Une accuracy similaire
Parfois même meilleure
Un temps d'inférence réduit.
Ne serait-ce pas ce qu'on appelle d'ordinaire une "bonne affaire" ?
Réduire n'est pas simplifier
C'est une subtilité que moi-même, personnellement, j'ai encore du mal à intégrer. Réduire les dimensions ne veut pas dire qu'on enlève des données. En réalité, on change surtout de point de vue.

On ne regarde plus pixel par pixel mais des combinaisons intelligentes de pixels. Les nouvelles dimensions sont des mélanges pondérés. Ce ne sont plus des pixels mais des... concepts géométriques.
Paradoxe ? Non, élégance !
On commence donc avec
784 dimensions
Des distances instables
Un espace bien trop vaste
Puis on applique PCA.
On obtient :
50 dimensions
Des distances plus pertinentes
Un modèle bien plus stable
Et là où on pourrait croire qu'on "perd" quelque chose, le classifieur ne devient pas plus bête. Il devient en réalité plus lucide.
Dans ce repo, on entraîne :
un modèle k-NN classique
Un modèle k-NN après PCA
Les deux sont sauvegardés.
On compare ensuite :
Accuracy
Temps d'inférence
Comportement sur dessin utilisateur
La différence est donc... mesurable ✨.
Conclusion
Réduire les dimensions, ce n'est pas diminuer l'intelligence. C'est simplement éliminer le superflu.
Dans les prochains articles, on va commencer à parler performance, structure, et "production-like".
Parce que classifier des chiffres, c'est bien. Le faire proprement, vite, et de manière robuste... C'est mieux !






Commentaires