• Projets00
  • AI Academy13
  • Veille07 entrées ces 7 derniers jours
  • Outils00
Profil
Déposer un projet
ProjetsAI AcademyVeilleOutilsProfilDéposer
Le cours
15/59
Lecture14 min

Un neurone, et ce qu'il regarde

Un neurone est une somme pondérée de pixels, et ses poids se regardent comme une image.

Une image compte 784 pixels, et il faut bien une pièce de calcul qui les regarde tous et n'en rende qu'un seul nombre. La plus petite qu'on puisse écrire multiplie chaque pixel par un nombre à lui, additionne les 784 produits, et s'arrête là. Reste à savoir ce qu'un tel nombre peut dire de l'image, et à quoi ressemblent les 784 nombres qui le calculent.

À gauche, une grille de vingt-huit sur vingt-huit pixels portant l'image de test numéro zéro, un sept manuscrit en encre sombre ; sous elle, la mention l'image de test numéro zéro. Un pixel de la ligne neuf est cerclé de brique, et un trait tireté monte de lui vers l'étiquette x indice deux cent trente et un. Une flèche mène de la grille à une colonne de trois ronds séparés par deux groupes de trois points de suspension, réunis par une accolade cotée sept cent quatre-vingt-quatre ; le rond du milieu est cerclé de brique. De chaque rond part un trait vers un grand cercle d'encre, au centre de la figure, qui porte en son milieu le signe somme. Le trait qui part du rond de brique est lui-même en brique et porte l'étiquette w indice deux cent trente et un. Au-dessus du faisceau se lit w transposée x plus b. Une flèche monte vers le grand cercle depuis le bas, et sous elle se lit b égale moins un virgule trois zéro six quatre. Une flèche sort du grand cercle vers la droite et mène à z égale moins zéro virgule sept zéro trois huit, écrit en brique.
Sept cent quatre-vingt-quatre poids, un par trait ; sept cent quatre-vingt-quatre produits, une somme, et un nombre qui sort. Ces poids et ce biais sont ceux du neurone qui note le 000, mesurés par cours/lecon2/mesures.py, section 4 ; le gabarit, plus bas, replie ces mêmes 784784784 poids en grille. Sur ce 777, le neurone rend un nombre négatif.

Le pixel de la ligne 9, colonne 7, porte l'octet 222, soit x231=0,870588x_{231}=0{,}870588x231​=0,870588, et le trait qui en part porte le poids w231w_{231}w231​, si bien que le produit w231 x231w_{231}\,x_{231}w231​x231​ entre dans la somme avec 783 autres.

Ce qui monte par en dessous est bbb, qui ne vient d'aucun pixel et s'ajoute une fois pour toutes, et ce qui sort à droite est un seul nombre, zzz, tout ce que la pièce rend.

Les 784 poids dessinés ici sont ceux d'une pièce mesurée qui note le chiffre 0, appliquée à une image qui montre un 7. Elle rend z=−0,7038z=-0{,}7038z=−0,7038, un nombre négatif, mais sa somme pondérée est positive : c'est le biais, −1,3064-1{,}3064−1,3064, qui fait passer le total sous zéro.

Un zzz seul ne veut donc encore rien dire, faute d'avoir quoi que ce soit à quoi le comparer, et la page 6 lui donnera neuf concurrents.

Le mot vient de la biologie

Un neurone biologique reçoit des signaux par ses dendrites, et émet ou n'émet pas selon ce qu'il a reçu. C'est de là que le nom vient, et c'est là que l'emprunt s'arrête.

L'analogie, et sa limite

Ce que l'analogie apporteCe qu'elle ne dit pas

Une unité qui reçoit plusieurs entrées et n'en rend qu'une

Le neurone artificiel rend un réel, pas une impulsion. Il n'y a ni temps, ni fréquence de décharge, ni potentiel d'action

L'idée que l'unité s'active plus ou moins

Les entrées d'un neurone artificiel sont pondérées par des réels de signe quelconque, et une entrée peut éteindre le neurone. Une synapse ne se retourne pas ainsi

L'idée qu'un grand nombre d'unités simples fait quelque chose de complexe

L'organisation en paquets où chaque unité voit toutes celles du paquet précédent, celle-là même que montre la figure de la page 1, ne correspond à aucune structure biologique connue

Un avion vole, un oiseau vole, et la ressemblance s'arrête au fait de voler. Elle a suffi à donner le nom, elle ne fournit aucun argument.

L'objet mathématique

Neuroneneuron, unit

Une fonction R784→R\mathbb{R}^{784}\rightarrow\mathbb{R}R784→R de la forme x↦wTx+b\mathbf{x}\mapsto\mathbf{w}^{\mathsf{T}}\mathbf{x}+bx↦wTx+b, entièrement déterminée par un vecteur w\mathbf{w}w et un scalaire bbb. Ce sont ses paramètres : ils ne dépendent pas de l'entrée, et ce sont eux qu'un entraînement choisit.

w∈R784,b∈R,z=wTx+b=∑k=1784wk xk+b ∈R\mathbf{w}\in\mathbb{R}^{784},\quad b\in\mathbb{R},\qquad z=\mathbf{w}^{\mathsf{T}}\mathbf{x}+b=\sum_{k=1}^{784}w_{k}\,x_{k}+b\ \in\mathbb{R}w∈R784,b∈R,z=wTx+b=k=1∑784​wk​xk​+b ∈R
(4.1)

Reprends la formule (4.1)(4.1)(4.1) terme par terme.

x\mathbf{x}x est l'image, mise à plat en 784 nombres à la page 3, et elle arrive du jeu sans qu'on la choisisse.

w\mathbf{w}w est un vecteur de 784 nombres, un par pixel, et le nombre wkw_{k}wk​ s'appelle le poids du pixel de rang kkk : il dit combien ce pixel compte dans le résultat, et dans quel sens.

wk xkw_{k}\,x_{k}wk​xk​ multiplie l'encre du pixel kkk par son poids, si bien qu'un pixel blanc, pour qui xk=0x_{k}=0xk​=0, n'apporte rien quel que soit son poids.

Ce qui sort

La somme ∑kwkxk\sum_{k}w_{k}x_{k}∑k​wk​xk​ additionne ces 784 produits et rend un seul nombre, auquel bbb s'ajoute à la fin sans dépendre d'aucun pixel. La page 9 dira à quoi sert ce bbb.

zzz est le résultat, le seul nombre que le neurone rend, et c'est ce que le chapitre appellera son score sur cette image.

Préactivationpre-activation

Le scalaire zzz que produit (4.1)(4.1)(4.1). Le préfixe pré dit qu'une étape viendra ensuite : à partir de la page 6, une fonction s'insère entre zzz et ce que le modèle rend vraiment, et les deux quantités cessent alors d'être égales. Ici elles le sont encore, et le préfixe ne coûte rien.

Les quatre objets de cette page, typés

SymboleTypeEnsembleDimensionRôle

x\mathbf{x}x

Vecteur

[0,1]784[0,1]^{784}[0,1]784

784×1784\times 1784×1

Donnée. Fournie, jamais choisie

w\mathbf{w}w

Vecteur

R784\mathbb{R}^{784}R784

784×1784\times 1784×1

Paramètre appris

bbb

Scalaire

R\mathbb{R}R

1×11\times 11×1

Paramètre appris

zzz

Scalaire

R\mathbb{R}R

1×11\times 11×1

Calculé. Ni donné, ni appris

On vérifie les dimensions à chaque fois, même quand le résultat saute aux yeux : wT\mathbf{w}^{\mathsf{T}}wT est 1×7841\times 7841×784 et x\mathbf{x}x est 784×1784\times 1784×1, donc leur produit est 1×11\times 11×1, un scalaire auquel bbb peut s'ajouter. C'est bien pourquoi la transposée est là, le produit (784×1)(784×1)(784\times 1)(784\times 1)(784×1)(784×1) n'existant pas.

Déplacer le chiffre change tout le calcul

Deux grilles de vingt-huit lignes sur vingt-huit colonnes, côte à côte, graduées en lignes et en colonnes de un à vingt-huit. La grille de gauche porte l'image de test numéro zéro, un sept manuscrit en encre sombre. La grille de droite porte exactement la même image, mais déplacée de cinq colonnes vers la droite. Dans chaque grille, un pixel de la ligne neuf est cerclé de brique, et un trait tireté monte de ce pixel jusqu'à une étiquette au-dessus de la grille. À gauche, le pixel cerclé est celui de la colonne sept, et son étiquette porte w indice deux cent trente et un. À droite, le pixel cerclé est celui de la colonne douze, et son étiquette porte w indice deux cent trente-six. Sous chaque grille, une ligne dit à quelle colonne l'encre de la ligne neuf commence.
Le même trait, deux rangs différents dans le vecteur.

Les deux images montrent le même 7, la seconde décalée de cinq colonnes vers la droite, et pour le modèle ce sont deux images sans rapport.

Chaque pixel a son poids à lui : celui de la ligne 9, colonne 7, a le poids w231w_{231}w231​, celui de la ligne 9, colonne 12, a le poids w236w_{236}w236​, et rien ne relie ces deux nombres. Quand le 7 se décale, son encre quitte les pixels de gauche pour ceux de droite, rencontre donc d'autres poids, et le score change sans que le modèle sache qu'il s'agit du même chiffre.

C'est pour cela que les chiffres du jeu sont tous recadrés au même endroit, ce que les auteurs du jeu ont fait avant de le publier et ce que la page 2 a mesuré.

Ce que la somme pondérée mesure

z=∑k : wk>0wkxk⏟ce que le neurone cherche + ∑k : wk<0wkxk⏟ce qu’il refuse + bz=\underbrace{\sum_{k\,:\,w_{k}>0} w_{k}x_{k}}_{\text{ce que le neurone cherche}}\ +\ \underbrace{\sum_{k\,:\,w_{k}<0} w_{k}x_{k}}_{\text{ce qu'il refuse}}\ +\ bz=ce que le neurone cherchek:wk​>0∑​wk​xk​​​ + ce qu’il refusek:wk​<0∑​wk​xk​​​ + b
(4.2)
Les indices où wk=0w_{k}=0wk​=0 n'apparaissent dans aucune des deux sommes : ces pixels ne comptent pas, quelle que soit leur valeur.
  • ·

    wk>0w_{k}>0wk​>0 : le pixel kkk fait monter zzz quand il porte de l'encre, donc le neurone veut en trouver là.

  • ·

    wk<0w_{k}<0wk​<0 : le pixel kkk fait descendre zzz quand il porte de l'encre, donc le neurone veut l'y trouver blanc.

  • ·

    wk=0w_{k}=0wk​=0 : le pixel kkk n'a aucun effet sur zzz, quelle que soit sa valeur, et le neurone ne le regarde pas.

Sous le signe somme, k:wk>0k:w_{k}>0k:wk​>0 se lit « pour les kkk tels que wkw_{k}wk​ est strictement positif », et la somme ne parcourt donc que ces indices-là.

Comme xk∈[0,1]x_{k}\in[0,1]xk​∈[0,1], chaque terme wkxkw_{k}x_{k}wk​xk​ a le signe de wkw_{k}wk​ et une amplitude d'autant plus grande que le pixel est encré, et un pixel blanc, pour qui xk=0x_{k}=0xk​=0, n'apporte rien, dans aucun des deux sens. C'est pourquoi le fond de l'image, 80,88 % de valeurs nulles, ne pèse sur aucun score.

Un vecteur de poids est une image

w\mathbf{w}w a exactement 784 coordonnées, et vec−1\mathrm{vec}^{-1}vec−1 replie n'importe quel vecteur de R784\mathbb{R}^{784}R784 en grille 28×2828\times 2828×28. Rien n'oblige à ne l'appliquer qu'aux images : appliquée à w\mathbf{w}w, elle donne une matrice de même forme qu'une image, et qu'on peut donc regarder.

Gabarittemplate

La matrice G=vec−1(w)∈M28,28(R)G=\mathrm{vec}^{-1}(\mathbf{w})\in\mathcal{M}_{28,28}(\mathbb{R})G=vec−1(w)∈M28,28​(R). Ses coefficients ne sont pas des intensités : ils sont de signe quelconque, et ils ne sont pas bornés. GijG_{ij}Gij​ dit ce que le neurone attend du pixel (i,j)(i,j)(i,j).

G=vec−1(w)∈M28,28(R),Gij=w28(i−1)+jG=\mathrm{vec}^{-1}(\mathbf{w})\in\mathcal{M}_{28,28}(\mathbb{R}),\qquad G_{ij}=w_{28(i-1)+j}G=vec−1(w)∈M28,28​(R),Gij​=w28(i−1)+j​
Les 784784784 poids du neurone qui note le 000, repliés par vec−1\mathrm{vec}^{-1}vec−1. Ce qu'il récompense et ce qu'il pénalise se lisent alors comme une image, et le score suit l'encre : un vrai 000 évite le creux central, un vrai 888 tombe dedans.

Un réseau occupe le centre de l'écran : à gauche une colonne de ronds cotée sept cent quatre-vingt-quatre, à droite dix ronds numérotés de zéro à neuf, et entre les deux un faisceau de traits très pâles. Les seuls traits qui aboutissent au premier des dix ronds passent en brique et deviennent nets. Ils se rassemblent en une bande étroite au bas de l'écran, faite de cases brique et bleues, puis la bande se replie sur elle-même jusqu'à former un carré de vingt-huit sur vingt-huit cases qui vient se poser au milieu du faisceau. Le carré n'est pas du bruit : un anneau brique en fait le tour, un creux bleu en occupe le centre. Deux petits cadres brique s'y posent, l'un en haut à droite sur la case la plus forte, plus un virgule zéro trois neuf cinq, treizième ligne et vingt-cinquième colonne, l'autre en plein milieu sur la case la plus négative, moins un virgule quatre quatre cinq sept, seizième ligne et quinzième colonne ; leurs valeurs s'inscrivent à droite. Un zéro manuscrit apparaît sur la plaque de gauche, et la même image se pose en gris sombre par-dessus le carré : son encre suit l'anneau brique et laisse le creux bleu à découvert. Le score inscrit à droite vaut plus quatorze virgule zéro huit un trois. Un huit la remplace enfin, sur la plaque comme sur le carré, et son encre traverse cette fois le creux bleu du milieu : le score tombe à plus zéro virgule trois cinq six huit.

0:00 / 0:23

Quatre des dix gabarits d'un modèle entraîné · cours/lecon2/mesures.py, section 4

      chiffre    max        position       min        position
            0    +1.0395   (13, 25)      -1.4457   (16, 15)
            1    +1.5359   (23,  6)      -1.3252   (17, 18)
            4    +1.1218   (13, 13)      -1.5851   ( 4, 14)
            7    +1.0642   (15, 20)      -1.3773   (15, 13)

Lecture

  • ·

    Les positions sont données en (ligne, colonne), numérotées à partir de 111, et le centre géométrique de la grille est (14,5 ; 14,5)(14{,}5\ ;\ 14{,}5)(14,5 ; 14,5). Le modèle mesuré est celui à une seule étape de calcul, que la page 6 construit, et non le réseau complet de la page 1.

  • ·

    Le gabarit du 000 a son minimum en (16,15)(16,15)(16,15), soit une ligne et demie sous le centre et une demi-colonne à sa droite. Ce neurone paie le plus cher l'encre trouvée au milieu de l'image, puisqu'il y cherche un trou, ce qui est exactement ce qui distingue un 000 d'un 888 ou d'un 999, et personne ne le lui a dit.

  • ·

    Le gabarit du 111 a son maximum en (23,6)(23,6)(23,6) et son minimum en (17,18)(17,18)(17,18), donc il récompense l'encre en bas à gauche et pénalise celle du milieu à droite, ce qui ne ressemble pas à un 111. Un gabarit marque d'abord les endroits qui séparent le mieux son chiffre des neuf autres : il arrive que ces endroits dessinent le chiffre, comme pour le 000, et il arrive que non.

  • ·

    Aucun de ces nombres n'est construit ici, et les dix gabarits d'un même modèle sont posés page 6, une pièce par chiffre. Ce sont des mesures faites sur un modèle déjà entraîné, dont le chapitre 3 seul dira d'où elles viennent.

Une grille de vingt-huit sur vingt-huit cases pleines. Les cases tirent vers la brique là où le poids est positif, vers l'ardoise là où il est négatif, et restent blanches près de zéro. Les cases de brique forment une couronne large qui suit le contour d'un zéro manuscrit ; au milieu de cette couronne, un cœur de cases d'ardoise occupe le centre de la grille. Deux cases sont encadrées d'encre : celle de la ligne treize colonne vingt-cinq, la plus rouge, et celle de la ligne seize colonne quinze, la plus bleue. Une croix en pointillé marque le centre géométrique de la grille, à quatorze virgule cinq en ligne comme en colonne. À droite, le maximum vaut plus un virgule zéro trois neuf cinq en ligne treize colonne vingt-cinq, le minimum moins un virgule quatre quatre cinq sept en ligne seize colonne quinze. Une bande dégradée passe de l'ardoise au blanc puis à la brique, symétrique autour de zéro, et porte un repère sur chacune des deux valeurs atteintes. Deux carrés de légende disent qu'un poids positif marque un endroit où le neurone veut de l'encre, un poids négatif un endroit où il n'en veut pas. En dessous, l'image de test numéro trois, un zéro manuscrit, est dessinée à côté du gabarit.
Un gabarit est une image de la même forme que l'entrée, et il se regarde comme telle.

Un gabarit ressemble à un chiffre moyen, et la page 2 écartait pourtant la comparaison des pixels un par un à un chiffre modèle. Les deux tiennent ensemble, parce que wTx\mathbf{w}^{\mathsf{T}}\mathbf{x}wTx ne compare pas deux images : il pondère des pixels, et un pixel dont le poids est nul reste sans effet au lieu de compter pour une différence. Ce que cette façon de faire ne pourra jamais obtenir est démontré page 7.

Vérification rapide n° 11

Un gabarit se lit comme une consigne : où le neurone veut de l'encre, et où il n'en veut pas.

  1. a

    Que vaut zzz si tous les pixels encrés d'une image tombent exactement là où le gabarit est négatif, et que b=0b=0b=0 ?

  2. b

    Pourquoi le minimum du gabarit du 000 est-il près du centre plutôt que sur le pourtour de la grille ?

  3. c

    Deux neurones ont des gabarits opposés, w′=−w\mathbf{w}'=-\mathbf{w}w′=−w, et des biais opposés. Que peut-on dire de leurs préactivations sur une même image ?

Aucune réponse à cliquer : il y a un calcul à faire.

D'où viennent ces poids ?

Ce gabarit a été lu, pas construit. Personne n'a posé à la main les nombres du modèle mesuré, dont la page 6 dira qu'il en compte 7 8507\,8507850 : une procédure les a choisis, et ce chapitre ne décrit pas cette procédure.

La page 5 construira un neurone entièrement à la main pour montrer que c'est possible, et la page 10 comptera le temps qu'il faudrait pour faire de même sur le réseau complet. C'est la première des questions laissées ouvertes page 1, et le chapitre 3 y répond.

Leçon suivante
PrécédenteDe la grille au vecteurSuivanteConstruire un détecteur de bord