Réseaux de neurones artificiels et apprentissage supervisé Laboratoire II
Andres Perez-Uribe
"La force des connexions synaptiques à l'entrée du neurone peut s'adapter, pour obtenir l'activité requise au niveau de la synapse de sortie. Si deux cellules sont activées en même temps alors la force de la connexion augmente" D.O. Hebb (1949)
Introduction aux réseaux neuromimetiques. Utilisation des 'applets' développes dans le groupe du Prof. Gerstner à l'EPFL.
1. Le neurone artificiel
Le premier modèle computationel d'un neurone artificiel fut proposé par McCulloch et Pitts en 1943. Ce modèle est le résultat de connaissances de neurosciences et de logique mathématique.
Essayez cette réalisation d'un neurone artificiel qui est similaire à celui de McCulloch et Pitts.
1.1 Si vous pressez sur les boutons AND, OR, NOT, le neurone utilise les poids synaptiques W1 et W2 qui lui permettent de réaliser ces fonctions logiques.
1.2 Vous pouvez tester le neurone en changeant les valeurs d'entrée X1 et X2 et vérifier la sortie Y.
1.3 En sélectionnant la fonction d'activation du neurone, vous pouvez changer le type de fonction utilisé.
1.4 Vous pouvez aussi changer les valeurs des poids synaptiques et voir l'effet sur la sortie du neurone.
2. Apprentissage
Il s'agit d'utiliser un Perceptron et de l'entraîner pour "apprendre" une fonction logique à deux variables.
2.1 Sélectionner la sortie désirée pour chaque combinaison d'entrée, utilisez une valeur de 'learning rate' plus haute (0.6 par exemple) et pressez le bouton 'Train'.
2.2 Testez si la fonction a été bien apprise.
3. Généralisation
Il s'agit d'entraîner un Perceptron multi-couche pour classifier de types de points sur l'espace à deux dimensions, comme dans le cas précèdent, et de tester la capacité de généralisation du réseau neuromimétique.
3.1 Placez des points rouges dans l'espace d'entrée. Pour placer des points bleus aller dans le menu 'Training: 1 (red)' et choisissez 'Training: 0 (blue)'.
3.2 Les valeurs de H1, H2 et H3 correspondent au nombre de neurones dans la première, deuxième et troisième couche cachée.
3.3 Changez les valeurs du 'Momentum' et 'Learn Rate'... utiliser par exemple 0.9 et 0.2.
3.4 Presser sur 'Init' pour initialiser le réseau et après sur 'Learn' pour démarrer l'apprentissage.
3.5 Les couleurs rouge et bleu montrent comment le réseau classe les différents points de l'espace, même s'ils n'ont pas été utilisés pendant l'entraînement.
4. Exercice
Il s'agit d'utiliser un Perceptron multi-couche et de trouver la bonne topologie du réseau (nombre de couches et de neurones par couche) et les bonnes paramètres qui permettent de bien classer des points rouges et bleus étant donne la distribution montrée dans la figure:
![]()
4.1 Dessiner le réseau qui vous a permit de résoudre le problème de classification.
4.2 Ecrire les paramètres utilises: Learning rate, momentum, nombre itérations d'entraînement.
4.3 Dessiner à peut près la courbe apprise par le réseau pour séparer les deux classes.
5. Reconnaissance de chiffres manuscrits
Il s'agit de tester une application de reconnaissance optique de caractères (OCR, Optical Character Recognition). Une base de donnée de bitmaps est utilisée pour apprendre à reconnaitre des chiffres manuscripts entre 0 et 9. Chaque bitmap est une carte de 15x20 pixels représentant un chiffre manuscrit. Les 100 exemples (10 pour chaque chiffre) ont été dessinés à la main avec une souris d'ordinateur. La couche d'entrée du réseau de neurones contient 80 neurones représentant une matrix de 8x10 qui est un sous-échantillonage de la matrice originelle (15x20). Pour chaque neurone d'entrée, un module de préprocessing calcule une valeur égale à la moyenne des quatres pixels d'entrée correspondant sur la matrice originelle. La sortie du réseau est fait de 10 neurones, chacun représentant une valeur symbolique pour chiffre reconnu.
5.1 Changez les paramètres ainsi: Momentum=0.9, Learning rate=0.2, Iterations=20(0).
5.2 Pressez sur Init et après sur Learn.
5.3 Regardez la courbe d'erreur du système. Si l'erreur est assez petit, passez au point suivant pour tester la reconnaissance de chiffres.
5.4 Avec la souris dessiner une chiffre et pressez sur Test... les sorties du réseau vous montrent si le réseau a bien reconnu le chiffre.
6. Reconnaissance de chiffres manuscrits: code C et Java
Ici, on vous présent une implémentation C de Backpropagation avec momentum pour la reconnaissance des chiffres manuscrits d'une manière très simple. Analyser le code pour mieux comprendre l'entraînement d'un réseau de neurones à l'aide d'un algorithme d'apprentissage supervisé. La version originale est également disponible ici ainsi qu'une adaptation du code en Java. Pour ce dernier code, utiliser le fichier digits.txt comme base de données d'entraînement (le fichier digits.txt présent chaque digit sous la forme d'un array de 5x7 pixels).
7. Reconnaissance de chiffres manuscrits: encore un applet
Dans ce lien vous trouverez encore un applet qui réalise la reconnaissance des chiffres. Il entraine un réseaux multicouches assez rapidement.
SBI 2008