Introduction à l'apprentissage automatique: TP5 - Exercice 2


Reconnaissance de chiffres manuscrits par réseaux de neurones


On reprend l'exemple MNIST du TP3. Rappelons que l'on se restreint à un sous-ensemble de 10000 observations pour garder des temps de calcul raisonnables. Néanmoins, il serait plus satisfaisant d'utiliser l'ensemble de la base de données à notre disposition (à faire si vous avez une machine performante et du temps).

Remarque: on divise par 255 le niveau de gris (codé sur 8 bits, donc entre 0 et 255) de manière à normaliser les données entre 0 et 1. Comme on l'a déjà évoqué, cette manipulation améliore le comportement des estimations numériques.

La cellule suivante définit la fonction qui permet d'afficher les 150 premières images de la base de test, ainsi que la classe véritable et la classe déterminée par l'algorithme de classification:

L'entraînement d'un réseau de neurones feedforward (perceptron multicouche) peut se faire de la manière suivante:

Chaque itération correspond à un parcours de la base d'apprentissage (une epoch ): ce n'est pas une itération de l'algorithme de descente. On voit que le loss décroît au fur et à mesure des itérations, ce qui est logique. Cependant, une faible augmentation du loss pourrait être observée car on utilise l'algorithme du gradient stochastique.

Consultez la documentation ici et et faites le lien avec le cours. En particulier, notez que dans la cellule précédente: on a déclaré un réseau à une seule couche cachée de 10 neurones (hidden_layer_sizes=(10,)), on n'a pas de régularisation $L^2$ des poids (car alpha=0), et on a précisé le solveur Stochastic Gradient Descent pour lequel on a fixé le taux d'apprentissage ( learning_rate=.1 ). Notez qu'il existe d'autres solveurs (on ne pourra pas rentrer dans les détails dans ce cours), et notez également dans la documentation comment est fixée la taille du lot ( batch ).

Comme on l'a vu en cours, le loss (entropie croisée après la couche SoftMax) n'est pas le taux de classifications correctes. Le petit script suivant permet de suivre l'évolution du taux de classification sur la base d'apprentissage et sur la base de test au cours des itérations (ignorez l'avertissement). Notez les valeurs des paramètres.

Questions:

Trois principes peuvent vous guider:

Fixer l'architecture et les hyperparamètres d'un réseau de neurones est assez rébarbatif... Il faut s'aider de l'expérience et de guides de "bonnes pratiques". Ne consacrez pas trop de temps à cet exercice!

Indication : on n'arrive pas obtenir un score franchement supérieur à 0.95 (au mieux 0.96 mais un autre random_state aurait certainement fourni un score différent). Néanmoins, si vous arrivez à faire mieux, signalez-le nous! Souvenez-vous qu'une SVM RBF nous avait fourni un score de 0.96.

Réponses:

</font>