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

Construire un détecteur de bord

Fabriquer un détecteur à la main, sans entraînement, et voir où il se laisse tromper.

On appelle bord, dans une image de chiffre, un trait d'encre bordé de papier des deux côtés, comme la barre horizontale qui ouvre un sept. Ce n'est pas le pourtour vide de la grille, dont la page 2 a compté les pixels morts. Peut-on fabriquer à la main, sans le moindre entraînement, une pièce de calcul qui rende un grand score quand un tel trait passe à un endroit donné, et un petit score sinon ? Et si elle y arrive, tient-elle devant une image faite exprès pour la tromper ?

Deux grilles de vingt-huit sur vingt-huit, côte à côte. Celle de gauche, titrée temps un, ne porte qu'un rectangle de brique large et bas, trois lignes sur treize colonnes, trente-neuf pixels à plus un ; tout le reste est blanc. Celle de droite, titrée temps trois, porte le même rectangle de brique, entouré cette fois d'un large cadre d'ardoise de trois pixels de marge, cent trente-deux pixels à moins un. Entre les deux grilles, quatre vignettes montrent les quatre entrées : un sept, un un, un zéro, et une tache rectangulaire noire et pleine. En bas, deux diagrammes à barres horizontales portent les mêmes quatre entrées dans le même ordre. À gauche, au temps deux, toutes les barres pointent à droite : le sept obtient plus vingt-trois virgule quatre, le un plus cinq virgule zéro zéro trois neuf, le zéro plus vingt-cinq virgule huit cinq quatre neuf, et la tache plus trente-neuf, en tête. À droite, au temps trois, seul le sept reste positif à plus dix virgule six six deux sept ; le un tombe à moins cinq virgule six quatre trois un, le zéro à moins neuf virgule huit zéro sept huit, et la tache à moins quatre-vingt-treize, dont la barre sort du cadre et porte deux traits de coupure.
Un seul changement de signe suffit à renverser le classement.

Premier temps : compter l'encre d'une zone

On veut un neurone dont le score monte quand une zone précise de l'image est encrée, et on choisit une bande horizontale de trois lignes, les lignes 888 à 101010 sur les colonnes 999 à 212121, soit 393939 pixels dont on note ZZZ l'ensemble des rangs. Cette bande est posée là où passe la barre d'un sept du jeu, ce qui est un choix et non un résultat.

On pose alors wk=1w_{k}=1wk​=1 pour ces 393939 pixels, wk=0w_{k}=0wk​=0 pour les 745745745 autres, et b=0b=0b=0.

wk=1{k∈Z},b=0⟹z=∑k∈Zxkw_{k}=\mathbb{1}\{k\in Z\},\quad b=0\qquad\Longrightarrow\qquad z=\sum_{k\in Z} x_{k}wk​=1{k∈Z},b=0⟹z=k∈Z∑​xk​
(5.1)
1{⋅}\mathbb{1}\{\cdot\}1{⋅} vaut 111 quand la condition entre accolades est vraie et 000 sinon, et Z⊂[ ⁣[1,784] ⁣]Z\subset[\![1,784]\!]Z⊂[[1,784]] est l'ensemble des 393939 rangs de la bande. La somme de (4.2)(4.2)(4.2) n'a donc plus qu'un terme, faute du moindre poids négatif.

Ce neurone ne fait donc qu'une chose, additionner l'encre présente dans la bande, et comme chaque pixel vaut au plus 111 sur les 393939 de la bande, son score reste entre 000 et 393939. Il n'atteint 393939 que si les 393939 pixels sont noirs pleins.

Le détecteur se construit en trois temps, et les quatre scores se recalculent à chacun. Le troisième seul le rend sélectif : tant que le pourtour ne pénalise rien, la tache large gagne.

À gauche, une grille de vingt-huit sur vingt-huit cases, entièrement blanche. À droite, trois colonnes de ronds reliées par un voile de traits gris ; un rond de la colonne du milieu est cerclé de rouge brique, et les traits qui l'atteignent ressortent de la même couleur. Trente-neuf cases de la grille passent au rouge, trois rangées de treize, formant une bande horizontale au tiers supérieur ; tout le reste demeure blanc. Un sept manuscrit vient se poser en gris sur la grille : sa barre du haut traverse la bande de part en part, une lueur court le long des traits rouges depuis la colonne de gauche et s'arrête au bord de la grille ; le rond cerclé se remplit, et le score vingt-trois virgule quatre s'inscrit à droite. Un un le remplace : son trait n'effleure la bande que d'une case, le rond reste presque vide, et cinq virgule zéro s'inscrit dessous. Puis un zéro, dont l'arc traverse largement la bande : vingt-cinq virgule huit, davantage que le sept. Une tache rectangulaire pleine se construit alors case par case, recouvre la bande et déborde tout autour ; le rond se remplit au maximum et son score, trente-neuf, dépasse les trois autres, qu'un cadre rouge vient souligner. Enfin cent trente-deux cases entourant la bande, une marge de trois cases tout autour, passent au bleu ardoise. Les quatre entrées repassent une à une : seul le sept garde un score positif, dix virgule six, et le rond ne s'allume plus que pour lui ; le un tombe à moins cinq virgule six, le zéro à moins neuf virgule huit, la tache à moins quatre-vingt-treize. Le cadre rouge se referme cette fois sur le sept.

0:00 / 0:30

Le score de la bande seule, sur quatre entrées

    zone positive    lignes 8 à 10, colonnes 9 à 21   (39 pixels à +1)

      entrée                                 z = somme de l'encre
      image de test n°0 (un 7)                  23.4000
      image de test n°2 (un 1)                   5.0039
      image de test n°3 (un 0)                  25.8549
      tache large construite                    39.0000

Lecture

  • ·

    L'image du 777 marque 23,4023{,}4023,40 : sa barre supérieure traverse la bande de part en part.

  • ·

    L'image du 111 marque 5,005{,}005,00 : un 111 est un trait vertical étroit, qui ne croise la bande que sur quelques cases, la plupart à peine grises.

  • ·

    Mais l'image du 000 marque 25,8525{,}8525,85, davantage que le 777, et la tache marque 393939, le maximum possible.

Deuxième temps : ce que ce neurone ne distingue pas

La tache large n'est pas une image du jeu : c'est un contre-exemple construit exprès, un rectangle d'encre pleine qui couvre exactement les lignes 555 à 131313 et les colonnes 666 à 242424, c'est-à-dire la bande et tout son pourtour. Elle obtient le score maximal, 393939, parce que ses 393939 pixels de bande sont tous noirs. Le neurone ne mesure pas la présence d'un trait, il mesure une quantité d'encre : n'importe quelle surface encrée qui contient la bande le satisfait mieux qu'un trait fin.

Du plus grand au plus petit score, le classement obtenu place donc la tache, puis le 000, puis le 777, puis le 111, et il est faux pour ce qu'on voulait : une surface pleine y passe devant la barre qu'on cherchait à repérer.

Troisième temps : refuser ce qui déborde

Ce qui manque au neurone est de pouvoir refuser, et la décomposition (4.2)(4.2)(4.2) dit comment, puisqu'un poids négatif fait descendre zzz quand son pixel porte de l'encre.

On garde donc +1+1+1 sur la bande, et on pose −1-1−1 sur son pourtour PPP, une marge de trois cases tout autour. Ce pourtour est le rectangle des lignes 555 à 131313 et des colonnes 666 à 242424 privé de la bande elle-même, soit 9×19−39=1329\times 19-39=1329×19−39=132 pixels.

wk=1{k∈Z}−1{k∈P},b=0⟹z=∑k∈Zxk − ∑k∈Pxkw_{k}=\mathbb{1}\{k\in Z\}-\mathbb{1}\{k\in P\},\quad b=0\qquad\Longrightarrow\qquad z=\sum_{k\in Z} x_{k}\ -\ \sum_{k\in P} x_{k}wk​=1{k∈Z}−1{k∈P},b=0⟹z=k∈Z∑​xk​ − k∈P∑​xk​
(5.2)
ZZZ et PPP sont disjoints : 393939 rangs à +1+1+1, 132132132 rangs à −1-1−1, et les 613613613 autres restent à 000. Le neurone regarde 171171171 pixels sur 784784784, et ignore les autres.

Le même calcul, avec le pourtour négatif

    zone positive    lignes 8 à 10, colonnes 9 à 21   (39 pixels à +1)
    pourtour négatif marge de 3 pixels autour   (132 pixels à -1)
    tous les autres poids sont nuls  (613 pixels à 0)

      entrée                                  temps 1     temps 3
      image de test n°0 (un 7)                23.4000     10.6627
      image de test n°2 (un 1)                 5.0039     -5.6431
      image de test n°3 (un 0)                25.8549     -9.8078
      tache large construite                  39.0000    -93.0000

Lecture

  • ·

    Le classement s'inverse, et le 777 reste seul positif : sa barre dépose dans la bande sensiblement plus d'encre que dans le pourtour, et la soustraction lui laisse donc un score positif. Le tableau n'a que deux colonnes parce que le deuxième temps ne pose aucun poids : il lit les scores du premier et constate qu'ils sont faux.

  • ·

    Le 000 passe de +25,85+25{,}85+25,85 à −9,81-9{,}81−9,81 : son arc traversait la bande, mais il traverse aussi le pourtour, et le second terme l'emporte.

  • ·

    La tache passe de +39+39+39 à −93-93−93 : elle remplit le pourtour entier, 132132132 pixels à −1-1−1, et c'est très exactement ce qu'on lui demandait de payer.

  • ·

    Le 111 reste faible dans les deux cas, mais il passe sous zéro : sa hampe traverse le pourtour bien plus qu'elle ne touche la bande, ce qui fait passer son score de +5,00+5{,}00+5,00 à −5,64-5{,}64−5,64.

Un neurone est donc entièrement décrit par deux choses, toutes deux inscrites dans w\mathbf{w}w : les endroits où il veut de l'encre, marqués par des poids positifs, et ceux où il n'en veut pas, marqués par des poids négatifs. Le second n'est pas un raffinement du premier, puisque sans lui le neurone ne distingue pas un trait d'une tache, et la mesure ci-dessus le montre en quatre nombres.

Vérification rapide n° 10

Les quatre entrées de la mesure ci-dessus sont reprises ici, sans leurs scores.

  1. a

    Classer les quatre entrées par score décroissant du détecteur de (5.2)(5.2)(5.2).

  2. b

    Justifier chaque position par la décomposition (4.2)(4.2)(4.2) : quelle part du score vient de la zone, quelle part du pourtour.

  3. c

    Quelle forme devrait avoir une image pour obtenir le score le plus bas possible avec les poids de (5.2)(5.2)(5.2), et que vaudrait alors ce score ?

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

Ce neurone-là a été posé, pas appris

Ses 171171171 coefficients non nuls ont été écrits à la main, en trois lignes de code, et aucun entraînement n'y est intervenu.

Ce détecteur-là ne reconnaît pourtant aucun chiffre : il repère un trait, à un endroit et à un seul. Il en faudrait beaucoup, et la page 6 commence par en poser dix.

Qu'une machine qui choisit ses poids toute seule fabrique elle aussi des pièces de ce genre est un espoir raisonnable, puisqu'un humain vient d'en construire une. La page 11 mesure si elle le fait.

Leçon suivante
PrécédenteUn neurone, et ce qu'il regardeSuivanteDix neurones