Apprentissage Artificiel                                                INT-21

A. Cornuéjols                                                                                                                 2002-2003

________________________________________________________________

Connexionnisme : l'algorithme de Rétro-propagation.

 

Nous vous proposons dans ce TP de faire des expériences avec l'algorithme de rétro-propagation de gradient dans un Perceptron multi-couches.

Pour cela, nous allons utiliser le simulateur de réseaux de neurones SNNS v.4.2.3 (Stuttgart Neural Network Simulator).

Vous trouverez le site donnant des détails sur ce simulateur (et un manuel en ligne) à l'adresse :

http://www.informatik.uni-stuttgart.de/ipvr/bv/projekte/snns/snns.html

 

1. Prise en main sur une base de lettres

Dans un premier temps, vous allez vous familiariser avec l'utilisation de SNNS en utilisant une base de données fournie avec le logiciel.

Il s'agit d'une base de données sur les 26 lettres de l'alphabet décrites sur une matrice 5x7. La couche d'entrée du réseau comporte donc 35 neurones, tandis que la couche de sortie en compte 26 (un neurone par lettre à reconnaître).

Vous obtenez cette base en la copiant dans la directory :

http://www.lri.fr/~antoine/Courses/ENSTA/ResNeuro/Letters/

Puis lancer Windows, ou bien Linux.

Puis utiliser  la commande : xgui

 

Le reste des manipulations est expliqué dans le manuel en ligne sur le site mentionné. Cependant, en voici les grandes lignes.

Dans la fenêtre de contrôle :

    Copier les fichiers d'extension .net et .pat liés à lettres. Ces fichiers décrivent respectivement la configuration du réseau (combien y-a-t-il de couches cachées ? et combien de neurones par couches ?), et la manière de coder les données (comment est-ce fait ?)

      à l'issue de cette étape, une fenêtre montrant le réseau (ayant déjà appris) devrait s'afficher en pressant le bouton <display>.

    Ouvrir la fenêtre permettant de suivre la courbe d'apprentissage par le bouton <graph>.

    Ouvrir la fenêtre de contrôle permettant de contrôler l'apprentissage par <control>

    Dans cette fenêtre, mettre par exemple cycle à 100

    Appuyer sur <all>. L'apprentissage se fait sur 100 présentations de la base d'apprentissage.

    Tester le résultat de l'apprentissage par <test>. Que constatez-vous ?

    Répéter.

On peut aussi suivre l'évolution des poids grâce à la fenêtre s'ouvrant avec le bouton <weights>. Le codage couleur permet de visualiser le poids associé à chaque connexion. Lorsque vous pointez votre souris sur un pixel de cette fenêtre, les coordonnées de la connexion correspondante et son poids s'affichent.

 

1.1     Familiarisez vous avec l'outil SNNS en modifiant les paramètres, l'initialisation, éventuellement les fonctions d'apprentissage, etc.

 

1.2     Faites des expériences en bruitant certaines des entrées.

 

 

2.      Étude de l'apprentissage de lettres dans un cadre plus général

Vous trouverez une base de données décrivant des lettres définies sur des matrices 6x8 et 7x9 et systématiquement décalées ou bruitées à l'adresse suivante :

http://www.lri.fr/~antoine/Courses/ENSTA/ResNeuro/Letters-IIE/

Copiez ces données.

Les explications figurent dans le fichier « Source download »
 (http://www.lri.fr/~antoine/Courses/ENSTA/ResNeuro/Letters-IIE/Source download).

 

Puis réfléchissez à la structure d'un réseau de neurones permettant de les exploiter. (Quel codage pour les entrées (et donc combien de neurones sur la couche d'entrée) ? Quel codage pour la sortie ? Combien de couches cachées et combien de neurones sur chacune ?)

Construire le réseau correspondant dans un fichier d'extension .net

Créer le fichier de description des données d'extension .pat

Créer le fichier des exemples (suivant les spécifications du fichier d'extension .pat créé).

Faites vos expériences.

Qu'en concluez-vous ?

 


3.            Compléments sur l'utilisation de SNNS

Lancement 'xgui'

Cliquer sur 'bignet' option 'feed_forward'

Couche d'entrée 'input' dimensions 4x1 'enter', 'insert'

'type'

hidden 2x5 'enter', 'insert'

hidden 2x5 'enter', 'insert'

 

'type'

ouput 1x1 'enter', 'insert'

'full connection'

'create net' 'done'

(retour au snns-manager)

 

Signaler les cellules cachées et 'u s f a' (le curseur doit être dans la fenêtre 'display') (Unit Set Activation function)

Choisir 'Act-Tanh' 'done'

Signaler les cellules de sortie et taper 'u s f a'

Choisir 'Act-Identity' 'done'

Désélectionner les cellules avec shift click

Visualiser les liens : dans fenêtre 'display' faire 'setup', devant 'link' cliquer 'on', 'done'

 

Associer les fichiers de données :

Dans le snns-manager : 'file', 'PAT', double-cliquer sur le fichier 'load' pour l'apprentissage

 

Lancement de l'apprentissage

Dans le snns-manager : 'control' et 'graph'

 

Choix de la fonction de rétropropagation pour LEARN (dans control) :

'SEL_FUNC' en face de LEARN, choisir par exemple 'SCG' pour le gradient conjugué.

Dans LEARN écrire le pas d'apprentissage (ex. 0.2) et 0.0 pour les autres cases.

L'ordre topologique de propagation du signal d'entrée :

'SEL_FUNC' en face de UPDATE, choisir 'topological order'

 

Initialisation des poids

'SEL_FUNC' en face de INIT, choisir 'randomize_Weights', réduire l'intervalle d'initialisation (ex: [-0.02, 0.02])

Cliquer 'INIT'

Mettre le nombre total de cycles et le nombre de cycles avant le test (CYCLES et VALID)

Cocher 'shuffle' pour une présenation aléatoire des exemples durant l'apprentissage (gradient stochastique)

 

Sélection du fichier d'apprentissage et de test :

'USE',  choisir le fichier correspondant de l'apprentissage

'USE', devant VALID choisir le fichier correspondant au test.

 

Lancer l'apprentissage

'RESET' pour reprendre le cycle à zéro.

ALL

(ajuster CYCLES et VALID, lancer ALL jusqu'à ...)

 

Récupération des résultats

Les poids : (dans snns-manager) : 'FILES', NET, donner un nom et 'save'