Pilier 9

MNIST — chiffres manuscrits 28 x 28

Idée

On dispose de 60 000 images d'entrainement, chacune en niveaux de gris sur une grille 28 x 28, representant un chiffre manuscrit entre 0 et 9 ; on aplatit chaque image en un vecteur de 784 nombres.

Pourquoi

On dispose de 60 000 images d'entrainement et 10 000 images de test, chacune en niveaux de gris sur une grille $28 \times 28$, representant un chiffre manuscrit entre $0$ et $9$. Chaque image est aplatie en un vecteur de dimension $28 \times 28 = 784$, et le réseau doit decider laquelle des 10 classes (chiffres $0$ a $9$) est presente. C'est le 'hello world' historique de la reconnaissance d'images : un nuage etiquete dans $\mathbb{R}^{784}$ avec etiquettes dans ${0, \ldots, 9}$. À retenir : un MLP n'exploite pas la structure 2D des pixels — il regarde 784 nombres en vrac. C'est cette limite qui motivera plus tard les CNN.

Outil

Nuage de points etiquetes dans $\mathbb{R}^{784}$ avec etiquettes dans ${0, \ldots, 9}$ ; aplatissement = vectorisation par ligne d'une matrice $28 \times 28$.

Formule

Image $\in \mathbb{R}^{28 \times 28}$ aplatie en $x \in \mathbb{R}^{784}$ ; batch $X \in \mathbb{R}^{784 \times m}$, étiquettes $y \in {0, \ldots, 9}^m$.

Piège

On alimente le réseau avec les pixels bruts (entiers de $0$ à $255$) et la première couche reçoit des valeurs deux ordres de grandeur trop grandes : la sigmoïde sature presque partout, les gradients sont nuls et rien n'apprend. Le réflexe : diviser par $255.0$ (et idéalement centrer-réduire) avant d'entrer dans le réseau, comme on standardise systématiquement en statistique avant une régression.

Diagramme

graph LR
  img((image 28x28)) --> flat[aplatir]
  flat --> v((vecteur 784))
  v --> mlp[reseau MLP]
  mlp --> probs((10 probabilites))
  probs --> arg{argmax}
  arg --> chiffre((chiffre 0..9))