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

Le problème, et le jeu

Les images sur lesquelles on travaille, et à partir de quel score on peut dire qu'une machine a appris.

Ton œil lit un chiffre manuscrit sans effort, et personne ne sait écrire la règle qu'il applique. Lister les cas un par un ne la remplace pas, parce qu'il y a trop de façons d'écrire un sept, et c'est pourquoi on va chercher cette règle dans des exemples. Reste à savoir combien il y en a, à quoi ils ressemblent, et à partir de quel score une machine aura vraiment appris plutôt que deviné.

Douze images du jeu de test, rangées en deux lignes de six et prises dans l'ordre du fichier. Chacune est un chiffre manuscrit gris et noir sur fond blanc, dans une vignette carrée, et porte sous elle son indice à gauche et le chiffre écrit à droite : l'image numéro zéro est un sept, la numéro un un deux, la deux un un, la trois un zéro, la quatre un quatre, la cinq un un, la six un quatre, la sept un neuf, la huit un cinq, la neuf un neuf, la dix un zéro, la onze un six. Les traits sont épais, noirs en leur milieu et gris sur leurs bords, et deux images d'un même chiffre n'ont ni la même inclinaison ni la même épaisseur.
Le programme les prend dans l'ordre du fichier, sans en choisir aucune.

Sous chaque vignette se lisent son numéro dans le fichier, à gauche, et le chiffre qu'elle montre, à droite : la première est l'image numéro 0, et c'est un 7.

Les deux 1, en troisième et sixième position de la première rangée, n'ont ni la même inclinaison ni la même épaisseur, et aucun programme ne les reconnaîtra en comparant les pixels un par un à un 1 modèle.

Dans chaque carré, enfin, le chiffre est posé à peu près au milieu, et ce « à peu près » se mesure exactement.

Trois images, trois réponses. Rien n'est expliqué ici, et c'est voulu : le chapitre commence par constater que la machine répond, puis passe onze pages à dire pourquoi.

Des ronds reliés par un voile de traits très pâles occupent l'écran : trois colonnes de ronds vides alignées de gauche à droite, et contre la dernière les dix chiffres de zéro à neuf, un par rond. Un nombre est posé contre la première colonne, sept cent quatre-vingt-quatre, un autre sous la deuxième, cent vingt-huit : ni l'une ni l'autre ne montre tous ses ronds. À gauche, un carré quadrillé attend, vide. Un sept manuscrit s'y dessine, gris, case par case ; puis les cases encrées se détachent une à une et s'envolent vers la première colonne, chacune vers la hauteur qui lui revient, où elles s'effacent en arrivant. Une vague couleur brique parcourt alors les traits, de la gauche vers la droite, et la colonne du milieu s'assombrit inégalement : beaucoup de ronds y restent parfaitement vides. La vague repart et atteint la dernière colonne, où un seul rond devient franchement noir : celui du chiffre sept. Un cadre brique se referme sur lui, et un nombre s'inscrit dans la marge de droite, à sa hauteur — zéro virgule, sept neuf, puis un sept, presque exactement un. Tout s'éteint d'un coup. Un deux manuscrit remplace le sept, la traversée recommence, et le cadre se referme sur le chiffre deux. Tout s'éteint encore, un un manuscrit apparaît, la traversée recommence, et le cadre tombe sur le chiffre un. Pas un mot n'est écrit : on regarde la machine répondre, trois fois de suite.

0:00 / 0:29

Les objets

X=[0,1]28×28,Y=[ ⁣[0,9] ⁣]\mathcal{X}=[0,1]^{28\times 28},\qquad \mathcal{Y}=[\![0,9]\!]X=[0,1]28×28,Y=[[0,9]]
(2.1)
X\mathcal{X}X est un ensemble de matrices, pas de vecteurs, puisque la mise en forme n'a pas encore eu lieu, et Y\mathcal{Y}Y est un ensemble fini. Le fichier, lui, donne un octet par pixel, entre 000 et 255255255, et les coefficients d'une image en sont le quotient par 255255255.

Les objets du jeu, typés

SymboleTypeEnsembleRôle

NtrainN_{\text{train}}Ntrain​

Scalaire entier

N∗\mathbb{N}^{*}N∗

60 00060\,00060000, la taille du jeu d'entraînement

NtestN_{\text{test}}Ntest​

Scalaire entier

N∗\mathbb{N}^{*}N∗

10 00010\,00010000, la taille du jeu de test

nnn

Indice

[ ⁣[1,Ntrain] ⁣][\![1,N_{\text{train}}]\!][[1,Ntrain​]] ou [ ⁣[1,Ntest] ⁣][\![1,N_{\text{test}}]\!][[1,Ntest​]] selon le jeu

Désigne un exemple. Ce n'est pas une quantité

X(n)X^{(n)}X(n)

Matrice

X\mathcal{X}X

L'image du nnn-ième exemple, 28×2828\times 2828×28

c(n)c^{(n)}c(n)

Scalaire entier

Y\mathcal{Y}Y

L'étiquette du nnn-ième exemple

Dtrain\mathcal{D}_{\text{train}}Dtrain​

Ensemble de couples

⊆X×Y\subseteq\mathcal{X}\times\mathcal{Y}⊆X×Y

{(X(n),c(n))}n=160 000\{(X^{(n)},c^{(n)})\}_{n=1}^{60\,000}{(X(n),c(n))}n=160000​

Dtest\mathcal{D}_{\text{test}}Dtest​

Ensemble de couples

⊆X×Y\subseteq\mathcal{X}\times\mathcal{Y}⊆X×Y

{(X(n),c(n))}n=110 000\{(X^{(n)},c^{(n)})\}_{n=1}^{10\,000}{(X(n),c(n))}n=110000​, jamais vues à l'entraînement

Le fichier numérote ses images à partir de 000 et le cours indexe ses exemples à partir de 111 : ce que le programme appelle l'image n°000 est l'exemple n=1n=1n=1.

$c^{(n)}$ est un code

Les étiquettes sont des entiers, mais aucune opération arithmétique n'a de sens sur elles : 7−3=47-3=47−3=4 ne dit rien, et « la classe moyenne » n'existe pas. Elles nomment sans mesurer, ce que le chapitre 1 a établi, et c'est pour cela que la page 6 mettra un autre codage à leur place.

Les trois notations d'indice

ÉcritureCe qu'elle désigneCe qu'elle n'est pas

X(n)X^{(n)}X(n), x(n)\mathbf{x}^{(n)}x(n)

Le nnn-ième exemple du jeu, en grille puis en colonne

Une puissance

W[l]W^{[l]}W[l]

L'étape de calcul numéro lll, à partir de la page 8

Ni une puissance, ni un numéro d'exemple

xkx_{k}xk​

La kkk-ième composante d'un vecteur

Un exemple ni une étape de calcul

Les trois cohabitent dans une même formule à partir de la page 10, et les parenthèses, les crochets et l'indice bas y sont trois marques distinctes, jamais interchangeables. Sur une matrice, l'indice bas double XijX_{ij}Xij​ désigne la ligne et la colonne.

Ce que le jeu contient

Le plus paresseux des systèmes ne regarde pas l'image et répond toujours le chiffre le plus fréquent du jeu. Ce qu'il obtient est le seuil sous lequel un score ne veut rien dire, et il se calcule en comptant les classes. Le programme l'appelle le seuil du hasard instruit, instruit parce que ce système sait au moins quel chiffre revient le plus souvent.

La répartition des classes · cours/lecon2/mesures.py, section 1

    repartition    chiffre :      0      1      2      3      4      5      6      7      8      9
                   train   :   5923   6742   5958   6131   5842   5421   5918   6265   5851   5949   total 60000
                   test    :    980   1135   1032   1010    982    892    958   1028    974   1009   total 10000

    classe la plus frequente au test        1  (1135 images)
    SEUIL DU HASARD INSTRUIT                11.35 %

Lecture

  • ·

    Les classes ne sont pas équilibrées : le 111 est le chiffre le plus fréquent et le 555 le moins fréquent, et l'écart entre les deux vaut à l'entraînement 24 %24\,\%24% du plus petit des deux comptes.

  • ·

    Un modèle qui répondrait toujours 111, sans regarder l'image, tomberait juste 1 1351\,1351135 fois sur 10 00010\,00010000, soit 11,35 %11{,}35\,\%11,35% de bonnes réponses.

  • ·

    C'est donc le seuil : sous 11,35 %11{,}35\,\%11,35%, un résultat ne signifie rien, et à peine au-dessus il ne signifie presque rien. Tout score de ce chapitre se lit contre cette barre.

Ce que valent les pixels

    part des valeurs nulles (train)         80.88 %
    valeur moyenne d'un pixel (train)       0.130660
    pixels nuls sur les 60 000 images       67 sur 784

Lecture

  • ·

    Quatre pixels sur cinq sont exactement nuls, une image de chiffre étant surtout du blanc, et la page 4 montrera que ce blanc ne pèse sur aucun score. Ce compte porte sur tous les pixels de toutes les images pris ensemble.

  • ·

    La ligne suivante compte autre chose : 676767 pixels sur 784784784 sont nuls sur les 60 00060\,00060000 images à la fois, et ce sont les pixels du pourtour de la grille, où aucune encre n'apparaît jamais. Les nombres qu'un modèle leur attachera ne pourront donc rien apprendre, et il y en aura 10×67=67010\times 67=67010×67=670 à la page 6, un par pixel mort et par chiffre possible.

Vérifier que les images sont centrées, et sur quoi

Ce « à peu près au milieu » relevé sur la planche des douze images n'est pas un hasard, puisque les auteurs du jeu ont recadré les 70 000 images avant de les publier.

Deux questions se posent alors, et elles se mesurent l'une comme l'autre. Ont-ils recadré les 60 000 images d'entraînement, ou seulement quelques-unes ? Et « au milieu », c'est au milieu de quoi exactement ?

Les lignes et les colonnes se comptent de 1 à 28 dans tout le chapitre, la ligne 1 en haut et la colonne 1 à gauche.

Ce qu'on appelle le milieu d'une image

Ce qu'on appelle le milieu d'une image est son centre de masse, c'est-à-dire l'endroit où son encre se concentre, et il se calcule en deux fois, puisqu'une position dans la grille demande deux nombres.

D'abord la ligne. Chaque pixel se trouve sur une ligne iii et porte une quantité d'encre XijX_{ij}Xij​ comprise entre 0 et 1, et l'on fait la moyenne des numéros de ligne en comptant chaque pixel autant qu'il porte d'encre. Un pixel blanc ne compte donc pas du tout, quand un pixel noir compte pour un.

La colonne se traite de la même façon, et le centre de masse est le couple formé par les deux moyennes.

( ∑ijXij i∑ijXij , ∑ijXij j∑ijXij )\Big(\ \frac{\sum_{ij} X_{ij}\,i}{\sum_{ij} X_{ij}}\ ,\ \frac{\sum_{ij} X_{ij}\,j}{\sum_{ij} X_{ij}}\ \Big)( ∑ij​Xij​∑ij​Xij​i​ , ∑ij​Xij​∑ij​Xij​j​ )
(2.2)
Les deux composantes se calculent séparément, avec le même dénominateur. Ce dénominateur est la quantité totale d'encre de l'image.

Où tombe le milieu géométrique

Le milieu géométrique de la grille vaut (14,5 ; 14,5)(14{,}5\ ;\ 14{,}5)(14,5 ; 14,5), et il ne tombe sur aucun pixel, parce que 28 est un nombre pair. C'est de lui que la mesure va écarter le jeu.

Le centre de masse moyen des $60\,000$ images · cours/lecon2/mesures.py, section 1

    CENTRE DE MASSE DES 60 000 IMAGES, en indices 1 a 28
                                              ligne     colonne
      centre de masse moyen                  14.9959     15.0068
      ecart-type entre images                 0.2892      0.2909

      ecart au milieu geometrique, 14,5      +0.4959     +0.5068
      distance                                0.7091 pixel

      ecart a l'indice 15                    -0.0041     +0.0068
      distance                                0.0080 pixel

      rapport des deux ecarts                   89.1

Lecture

  • ·

    Le jeu est centré sur l'indice 151515, et pas sur le milieu de la grille. L'écart au milieu géométrique vaut 0,70910{,}70910,7091 pixel quand l'écart à l'indice 151515 n'en vaut que 0,00800{,}00800,0080, soit un rapport de 898989 calculé avant tout arrondi d'affichage : l'indice 151515 n'est pas un peu meilleur, il l'est de deux ordres de grandeur.

  • ·

    Cet écart au milieu géométrique n'est pas du bruit, puisqu'il vaut un demi-pixel sur chaque axe et qu'il va toujours vers le bas et vers la droite, alors que l'écart-type entre images ne vaut que 0,290{,}290,29 pixel.

  • ·

    Une grille de côté pair n'a pas de pixel central, si bien que les auteurs du jeu ont dû en choisir un, et ils ont choisi le 151515. « Centré » ne veut rien dire tant qu'on n'a pas dit « centré sur quoi ».

  • ·

    Un écart-type de 0,290{,}290,29 pixel signifie que les images s'écartent très peu de cette moyenne, et non que des images très décentrées se compensent entre elles : elles sont donc recadrées une par une, et ce chapitre n'a rien à recadrer.

  • ·

    Cela comptera page 4, où l'on verra qu'un même chiffre décalé de quelques colonnes change tout le calcul d'un modèle.

Une image, en entier

Voici la première image du jeu de test, telle qu'elle est dans le fichier : 784784784 octets, un par pixel, rangés en 282828 lignes de 282828. Le point remplace le zéro pour que la forme se voie.

L'image de test n°0, en octets · cours/lecon2/mesures.py, section 2

           1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28
       1   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .
       2   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .
       3   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .
       4   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .
       5   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .
       6   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .
       7   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .
       8   .   .   .   .   .   .  84 185 159 151  60  36   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .
       9   .   .   .   .   .   . 222 254 254 254 254 241 198 198 198 198 198 198 198 198 170  52   .   .   .   .   .   .
      10   .   .   .   .   .   .  67 114  72 114 163 227 254 225 254 254 254 250 229 254 254 140   .   .   .   .   .   .
      11   .   .   .   .   .   .   .   .   .   .   .  17  66  14  67  67  67  59  21 236 254 106   .   .   .   .   .   .
      12   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .  83 253 209  18   .   .   .   .   .   .
      13   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .  22 233 255  83   .   .   .   .   .   .   .
      14   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 129 254 238  44   .   .   .   .   .   .   .
      15   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .  59 249 254  62   .   .   .   .   .   .   .   .
      16   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 133 254 187   5   .   .   .   .   .   .   .   .
      17   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   9 205 248  58   .   .   .   .   .   .   .   .   .
      18   .   .   .   .   .   .   .   .   .   .   .   .   .   .   . 126 254 182   .   .   .   .   .   .   .   .   .   .
      19   .   .   .   .   .   .   .   .   .   .   .   .   .   .  75 251 240  57   .   .   .   .   .   .   .   .   .   .
      20   .   .   .   .   .   .   .   .   .   .   .   .   .  19 221 254 166   .   .   .   .   .   .   .   .   .   .   .
      21   .   .   .   .   .   .   .   .   .   .   .   .   3 203 254 219  35   .   .   .   .   .   .   .   .   .   .   .
      22   .   .   .   .   .   .   .   .   .   .   .   .  38 254 254  77   .   .   .   .   .   .   .   .   .   .   .   .
      23   .   .   .   .   .   .   .   .   .   .   .  31 224 254 115   1   .   .   .   .   .   .   .   .   .   .   .   .
      24   .   .   .   .   .   .   .   .   .   .   . 133 254 254  52   .   .   .   .   .   .   .   .   .   .   .   .   .
      25   .   .   .   .   .   .   .   .   .   .  61 242 254 254  52   .   .   .   .   .   .   .   .   .   .   .   .   .
      26   .   .   .   .   .   .   .   .   .   . 121 254 254 219  40   .   .   .   .   .   .   .   .   .   .   .   .   .
      27   .   .   .   .   .   .   .   .   .   . 121 254 207  18   .   .   .   .   .   .   .   .   .   .   .   .   .   .
      28   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .

    etiquette                               7
    pixels non nuls                         116 sur 784
    somme des octets                        18454
    lignes encrees                          8 a 27
    octet maximal                           255  en (13, 20),  1 pixel a cette valeur

Lecture

  • ·

    La barre horizontale du 777 occupe les lignes 888 à 111111, colonnes 777 à 222222. La hampe oblique descend ensuite de la ligne 111111 à la ligne 272727.

  • ·

    116116116 pixels non nuls sur 784784784 : 14,8 %14{,}8\,\%14,8% de l'image porte de l'encre, sensiblement moins que la moyenne du jeu, où c'est à peu près un pixel sur cinq.

  • ·

    Un seul pixel atteint 255255255, en (13,20)(13,20)(13,20). L'écriture manuscrite numérisée est grise presque partout : 848484, 185185185, 159159159, 151151151, 606060, 363636 à la ligne 888.

Une grille de vingt-huit lignes sur vingt-huit colonnes, sept cent quatre-vingt-quatre ronds en tout, un par pixel. Chaque rond est rempli d'un gris d'autant plus sombre que l'octet du pixel est grand : le papier reste blanc, l'encre pleine est presque noire. Les ronds sombres dessinent un sept, dont la barre horizontale occupe les lignes huit à onze et dont la hampe oblique descend vers la gauche jusqu'à la ligne vingt-sept ; tout le pourtour de la grille reste vide. Trois ronds sont cerclés de brique : ligne neuf colonne sept, ligne neuf colonne huit, et ligne treize colonne vingt. Un panneau à droite donne l'étiquette sept, cent seize pixels non nuls sur sept cent quatre-vingt-quatre, une somme des octets de dix-huit mille quatre cent cinquante-quatre, et des lignes encrées de huit à vingt-sept ; sous lui, une bande dégradée va du blanc au noir, cotée zéro d'un côté et deux cent cinquante-cinq de l'autre, papier puis encre. Sous la grille, les trois ronds cerclés sont repris par leur ligne et leur colonne : ligne neuf colonne sept, d'octet deux cent vingt-deux et de valeur zéro virgule huit sept zéro cinq huit huit ; ligne neuf colonne huit, d'octet deux cent cinquante-quatre et de valeur zéro virgule neuf neuf six zéro sept huit ; ligne treize colonne vingt, d'octet deux cent cinquante-cinq et de valeur un.
La figure dessine les sept cent quatre-vingt-quatre ronds, sans en omettre un. Un pixel blanc est une donnée au même titre qu'un pixel noir.

Un rond par pixel, et aucun ne manque, pas même les blancs : un pixel blanc est une donnée au même titre qu'un pixel noir, et c'est pour cela que la figure les dessine tous.

Sous les trois ronds cerclés de brique se lit le passage de l'octet à la valeur : 222222222 donne 0,8705880{,}8705880,870588, et 255255255 donne 111. C'est la division par 255255255 annoncée plus haut, faite sur trois pixels de cette image.

Le pourtour de la grille, enfin, reste vide sur ses sept premières lignes comme sur ses six premières colonnes, et l'encre tient dans un rectangle au milieu. Ce rectangle est propre à cette image : les 67 pixels comptés plus haut sont, eux, ceux qu'aucune des 60 000 images n'encre jamais.

Vérification rapide n° 8

Le contenu du jeu se lit dans le tableau de répartition ci-dessus. Les vérifications portent un numéro propre sur tout le parcours, les sept premières étant au chapitre 1. Ces numéros ne suivent pas l'ordre des pages, et il est normal d'en rencontrer un plus grand avant un plus petit.

  1. a

    Combien d'images du chiffre 555 le jeu d'entraînement contient-il, et quelle part du total cela représente-t-il ?

  2. b

    Pourquoi le seuil de 11,35 %11{,}35\,\%11,35% est-il celui du chiffre 111, et non celui d'un autre chiffre ?

  3. c

    Ce seuil serait-il le même si on le calculait sur le jeu d'entraînement ? Le vérifier avec les nombres du tableau.

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

Leçon suivante
PrécédenteLe cadre du coursSuivanteDe la grille au vecteur