Au départ, le réseau est mauvais
Ce que vaut le réseau avant la première mise à jour, mesuré plutôt que supposé.
Un réseau dont les cent mille nombres sortent d'un tirage au sort n'a rien appris, et rien appris de faux non plus. Fait-il aussi bien que de répondre au hasard ?
Une procédure qui améliore quelque chose doit partir d'un état connu, sans quoi une amélioration ne se distingue pas d'une erreur de mesure.
Le nombre porté par cet axe est la moyenne, sur les images de test, de la perte que le chapitre 2 a posée. Les pages 5 et 6 diront pourquoi cette moyenne-là plutôt qu'une autre, et lui donneront son nom ; pour l'instant, elle sert seulement d'étalon.
Le point de départ
Les nombres sont tirés au hasard, chaque coefficient de selon une loi normale centrée dont la dispersion dépend du nombre d'entrées de la couche, et les biais partent à zéro. Le tirage est reproductible : la graine est le nombre qui le fixe, et deux exécutions de même graine donnent les mêmes valeurs. Pourquoi pas tout à zéro est une bonne question, elle a une réponse, et elle relève du chapitre d'initialisation.
Un réseau qui répondrait au hasard accorderait la même valeur à chacune des dix classes, c'est-à-dire pour tout , et il paierait alors sur chaque image : c'est la barre à laquelle on compare tout ce qui suit.
Cinq initialisations, avant toute mise à jour · cours/lecon3/mesures.py, mesure 1
répondre au hasard : -ln(1/10) = 2.302585
graine coût précision
0 2.417832 0.1314
1 2.407812 0.0602
2 2.379976 0.1323
3 2.382167 0.1520
4 2.389514 0.1466Lecture
Les précisions vont de à , c'est-à-dire autour du dixième qu'on obtiendrait en tirant la réponse au sort : le réseau ne sait rien, et c'est attendu. L'écart entre les deux extrêmes dit seulement que cinq tirages ne suffisent pas à cerner une moyenne.
Les cinq coûts dépassent , donc le réseau initialisé fait légèrement pire que de répondre au hasard, et ce n'est pas une anomalie.
C'est le contrôle qu'on voulait : si cette ligne avait donné ou , il y aurait un défaut dans le code avant la première mise à jour, et rien de ce qui suit n'aurait de sens.
Comment fait-on pire que le hasard ?
Une sortie de réseau non entraîné, en entier · graine 0
classe : 0 1 2 3 4 5 6 7 8 9
a_k : 0.1221 0.0885 0.2106 0.1094 0.1149 0.1021 0.0825 0.0650 0.0493 0.0555
somme 1.0000000000
écart max entre deux coordonnées 0.161240
une loi uniforme donnerait 0.000000
étiquette vraie 7, coordonnée correspondante 0.065024
perte sur cet exemple : -ln(0.065024) = 2.733006Lecture
Répondre au hasard, c'est sortir dix valeurs égales. Ce réseau en sort d'inégales : pour la classe , pour la classe , un écart de entre les deux extrêmes.
Ses préférences ne veulent rien dire puisqu'elles viennent d'un tirage, mais elles existent, et sur cette image, un , il accorde à la bonne classe, moins que , et paie .
Le mécanisme se voit sur cette seule sortie, en faisant tourner la vraie classe. Si l'étiquette avait été le , le réseau aurait payé ; si elle avait été le , . La moyenne des dix pertes possibles vaut , au-dessus de , alors que dix valeurs toutes égales à donneraient exactement dans les dix cas.
C'est que monte sans borne quand la coordonnée tend vers zéro et ne descend que lentement quand elle tend vers un : rendre dix valeurs inégales coûte donc plus qu'il ne rapporte, et c'est vrai de n'importe quel jeu de dix valeurs inégales. Un réseau tiré au sort en produit à chaque image, et c'est tout ce qui le sépare du hasard.
Le réseau s'efface et devient un décor très pâle ; seule sa colonne de sortie, à droite, garde ses dix ronds remplis, chacun portant son chiffre de zéro à neuf. De chaque rond part alors vers la droite une barre horizontale, du haut vers le bas, l'une après l'autre, et chacune s'arrête à sa propre longueur. Les longueurs sont visiblement inégales : la barre de la classe deux est plus de quatre fois plus longue que celle de la classe huit, alors qu'aucune n'a de raison de l'être. Les dix valeurs s'inscrivent ensuite en brique tout à droite, alignées les unes sous les autres : zéro virgule douze vingt et un, zéro virgule zéro huit quatre-vingt-cinq, zéro virgule vingt et un zéro six, zéro virgule dix quatre-vingt-quatorze, zéro virgule onze quarante-neuf, zéro virgule dix vingt et un, zéro virgule zéro huit vingt-cinq, zéro virgule zéro six cinquante, zéro virgule zéro quatre quatre-vingt-treize, zéro virgule zéro cinq cinquante-cinq. Une ligne verticale pointillée se pose alors en travers des barres, à la longueur zéro virgule un, celle qu'aurait chacune si le réseau répondait au hasard, et sa valeur s'inscrit sous elle. Cinq barres la dépassent, et leur contour s'épaissit pour qu'on les repère ; les cinq autres restent en deçà — le réseau ne penche donc pas dans un sens, il hésite. La barre de la classe sept, enfin, celle qui est la vraie réponse, passe à la brique avec sa valeur : elle est parmi les plus courtes.
Un réseau initialisé au hasard obtient un coût de alors que répondre au hasard donne .
- a
Comment un réseau peut-il faire pire que le hasard alors qu'il n'a rien appris de faux ?
- b
Quelle sortie faudrait-il produire pour obtenir exactement ?
- c
Un réseau accorde à une classe fixe, la même pour toutes les images, et répartit également le centième restant sur les neuf autres. Les dix chiffres étant à peu près équirépartis dans le jeu, estimer son coût moyen et le comparer à .
Aucune réponse à cliquer : il y a un calcul à faire.