Démo : Apprentissage d'un réseau de neurones (facultatif)
Principe
Le principe est simple : vous dessinez un chiffre dans l’espace prévu à cet effet — un 0 ou un 1 — et le dessin est automatiquement recentré et inscrit dans une grille de pixels. A chaque pixel est alors associée une valeur numérique, qui correspond à son intensité (0 %, 43 %, 87 %, 100 %). Cela permet de transformer votre dessin en une liste de nombres (autant qu’il y a de pixels dans l’image).
Ces nombres sont alors envoyés à une première couche d’entrée du réseau de neurones, chaque neurone recevant l’ensemble des valeurs de tous les pixels. A noter qu’à chaque liaison entre un pixel et un neurone correspond un « paramètre », dont la valeur est initialement définie aléatoirement, et qui correspond au « poids » de ce pixel pour ce neurone.
En effet, le rôle de chaque neurone est de multiplier la valeur de chaque pixel par le paramètre associé à cette liaison (le poids du pixel pour ce neurone, donc) et d’effectuer la somme de l’ensemble des valeurs ainsi calculées.
Sur le site, tant qu’aucun chiffre n’a été dessiné, ces paramètres (ou poids) sont représentés par des traits rouges ou bleus de différentes épaisseurs.
- Rouge : le poids est positif (ça renforce l’information)
- Bleu : le poids est négatif (ça la diminue)
- Épais : le poids possède une valeur élevée
- Fin : le poids possède une valeur faible
Lorsqu’un chiffre a été dessiné, la couleur et l’épaisseur du trait représentent le produit du poids par la valeur du pixel.

Chaque paramètre est tel un bouton de réglage : si on le tourne, on change la manière dont le réseau réagit à votre dessin.
Le résultat du calcul effectué par chaque neurone est alors envoyé à la couche suivante, qui est ici la couche de sortie, constituée de deux neurones seulement.
Chacun de ces deux neurones de sortie travaille exactement comme ceux de la couche d’entrée : il additionne les valeurs calculées par chacun des neurones d’entrée multipliées par leurs poids respectifs.
L’un de ces deux neurones de sortie est chargé de dire « je pense que c’est un 0 », l’autre « je pense que c’est un 1 ». Pour ce faire, ont fait simplement en sorte que la somme de leurs valeurs soit toujours 100, ce qui permet de considérer les valeurs qu’ils calculent comme des probabilités associées au 0 et au 1.
L’apprentissage : un processus non déterministe et intuitif
Au démarrage, les paramètres ont été réglés aléatoirement : le réseau répond donc n’importe quoi.
Mais lorsque vous dessinez un chiffre et que vous dites : « Ceci est un 0 », le réseau est conçu pour corriger (à l’aide d’une formule mathématique) l’ensemble de ses réglages de manière à ce que la valeur calculée par le neurone de sortie qui correspond au 0 soit la plus élevée possible (idéalement, 100 %).
Tout se passe comme si l’ensemble des petits boutons de réglages mentionnés plus haut tournaient pour faire en sorte que la valeur de sortie soit la meilleure possible. C’est la raison pour laquelle les traits changent brusquement d’épaisseur et de couleur.
Après avoir reçu plusieurs 0 de différentes formes, le réseau de neurones commence à effectuer ses calculs convenablement. Mais seulement lorsqu’on lui présente un 0, bien sûr.
Il reste à lui présenter des « 1 » qui lui permettront d’apprendre à reconnaître ce second chiffres, puis à nouveau des « 0 » car l’apprentissage des « 1 » aura légèrement déréglé les réglages précédents.
Après avoir reçu une petite dizaine d’exemples, le réseau commencera à calculer convenablement les probabilités que le chiffre dessiné soit un 0 ou un 1. Et plus il verra d’exemples, plus les valeurs qu’il calculera à chaque nouvel essai seront élevées d’un côté ou de l’autre.
Bien entendu, ce réseau ne comprend rien et ne sait même pas ce que c’est qu’un 0 ou un 1. Mais il a développé ce qui ressemble à une intuition, fondée sur une répétition d’exemples et pas sur des règles de reconnaissance des formes. Et d’ailleurs, il aurait très bien pu « apprendre faux » si on avait inversé les chiffres ou écrit autre chose que des 0 et des 1.
Comment reconnaître tous les chiffres ?
Reconnaître seulement 0 et 1, c’est comme apprendre l’alphabet avec deux lettres. C’est facile.
Mais si on souhaite élaborer un réseau de neurones capable de reconnaître l’ensemble des chiffres de 0 à 9, il faut :
- un réseau constitué de plus de couches,
- davantage de neurones,
- et surtout beaucoup plus d’exemples.
Après lui avoir présenté des milliers d’images étiquetées (c’est-à-dire des chiffres écrits à la main, associés systématiquement aux valeurs de ces derniers), c’est-à-dire après des milliers d’étapes lors desquelles il aura ajusté ses paramètres (ou poids), le réseau sera capable de reconnaître l’ensemble des 10 chiffres. Et ce avec d’autant plus de précision qu’il aura « vu » plus d’exemples.
En résumé
Ce site permet de voir en direct ce qui est habituellement invisible : la modification des réglages internes d’un réseau de neurones lors de son apprentissage. Et c’est exactement ainsi, bien qu’avec des nombres de paramètres bien plus grands (jusqu’à des milliers de milliards) que fonctionnent la grande majorité des systèmes d’intelligence artificielle !