tp kohonen
TRANSCRIPT
3A - Filiere 4 TP 2 - Carte de Kohonen
TP 2 - Reseaux de neurones
Carte de Kohonen
Sommaire
1 Mise en place d’une carte de Kohonen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Simulations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3 Remarques sur l’implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Introduction
Ce second TP va permettre la manipulation d’un type de reseau de neurones dont l’apprentissage est
non-supervise, a la difference de celui d’un perceptron multi-couches (Cf. TP1). De plus, l’objectif de
ce reseau n’est pas de separer l’espace des patterns par des hyperplans mais de construire une nouvelle
representation de l’espace des patterns, representation ayant une dimension plus faible (en general, 2
pour une carte classique). Cette representation est composee de neurones lies entre eux par une certaine
topologie dont le role est de preserver la topologie existante de l’espace des patterns : apres apprentissage,
deux neurones proches topologiquement doivent correspondre a des patterns proches c’est-a-dire ayant
des proprietes voisines.
La premiere partie de ce TP va consister a mettre en place les routines Matlab necessaires a l’apprentissage
d’une carte de Kohonen. Dans un second temps, l’apprentissage de cartes de Kohonen sera realise dans
plusieurs cas de figure pour mettre en evidence certains comportements ou proprietes de ces cartes. Les
bases de patterns seront soit simulees manuellement, soit issues du TP precedent (bases artificielles ou
provenant de cas concrets comme la base des chiffres manuscrits).
Chacun des problemes souleves dans ce TP necessite la methodologie suivante :
• Completer certaines fonctions dont le code est partiellement donne. A chaque fois, tres peu de
lignes de code supplementaires sont necessaires.
• Valider le comportement des reseaux construits par le lancement de plusieurs simulations (en ap-
prentissage et en test).
• Interpreter les resultats obtenus.
A l’adresse perso.enst-bretagne.fr/˜dgueriot, vous trouverez une archive TP Kohonen.zip con-
tenant tous les scripts & jeux de donnees necessaires a ce TP.
1
3A - Filiere 4 TP 2 - Carte de Kohonen
1 Mise en place d’une carte de Kohonen
1.1 Creation d’une carte
Question 1 : Ecrire une fonction SOM Create2D qui initialise une structure qui contienne toutes
les donnees relatives a une carte bidimensionnelle de Kohonen (topologie de dimension 2) et a son
apprentissage. On initialisera egalement les poids de maniere aleatoire entre 0 et 1. Les attributs de la
structure map devront respecter les contraintes donnees dans la derniere section du TP ou les differents
champs (avec leur nom) sont decrits.
map = SOM˙Create2D (N , learning˙rate , neighborhood˙spread , pattern˙size)
Question 2 : Ecrire une fonction SOM Create1D qui initialise une structure qui contienne toutes les
donnees relatives a une ficelle de Kohonen (topologie de dimension 1) et a son apprentissage. On
initialisera egalement les poids de maniere aleatoire entre 0 et 1. Les attributs de la structure map devront
respecter les contraintes donnees dans la derniere section du TP ou les differents champs (avec leur nom)
sont decrits.
map = SOM˙Create1D (N , learning˙rate , neighborhood˙spread , pattern˙size)
1.2 Algorithme d’apprentissage
L’algorithme d’apprentissage d’une carte de Kohonen a pour objectif de deplier la carte de Kohonen
de telle maniere a mapper la topologie de l’espace des patterns.
Question 3 : Ecrire la routine SOM OneStepLearning qui met a jour une carte de Kohonen map pour
une iteration donnee iter dans le processus d’apprentissage (3 ou 4 lignes). On pourra s’appuyer sur les
fonctions SOM NearestNode et SOM UpdateWeights pour realiser les taches de plus bas niveau, fonctions
dont l’implementation fiat l’objet des questions suivantes. data represente la base des patterns d’entree
et iter max, le nombre maximum d’iterations de l’apprentissage.
map = SOM˙OneStepLearning (map , data , iter , iter˙max)
Question 4 : Ecrire la routine SOM NearestNode qui recherche parmi les neurones de la carte map
celui qui est le plus proche du pattern patt in. La distance d a ce neurone ainsi que l’index de ce neurone
inode sont a retourner.
[d inode] = SOM˙NearestNode (patt˙in , map)
Question 5 : Ecrire la routine SOM UpdateWeights qui vient effectivement modifier les poids
synaptiques des neurones de la carte, pour l’iteration iter sur un nombre total iter max d’iterations.
L’amplitude de la modification des poids synaptiques des neurones autour du neurone gagnant depend de
la distance entre le neurone concerne et le neurone gagnant mais aussi du moment de cette modification
au sein de l’apprentissage.
map = SOM˙UpdateWeights (map , patt˙in , inode , iter , iter˙max)
1.3 Verification de l’implementation
Le script suivant disponible dans l’archive sert de base de lancement de l’apprentissage d’une carte de
Kohonen. Il doit permettre la validation des routines Matlab ecrites dans les questions precedentes.
Question 6 : Analyser le script et completer les parties manquantes (generation manuelle d’une base
de patterns comportant 1000 patterns repartis uniformement sur un espace 2D [0.25, 0.75]× [0.25, 0.75].
2
3A - Filiere 4 TP 2 - Carte de Kohonen
% Creation d’une base de patterns (un carre d’arete 0.5 centre en (0.5,0.5)
data = [] ;
data.dim˙input = 2 ;
data.n˙pattern = 1000 ;
data.pattern(1:data.n˙pattern,:) = # a completer #
% Creation d’une carte de Kohonen
N = 10 ;
learning˙rate = [0.5 0.1] ; % Initial et final
neighborhood˙spread = [3.0e0 1.0e-1] ; % Initial et final
size˙pattern = data.dim˙input ;
map = SOM˙Create2D (N , learning˙rate , neighborhood˙spread , size˙pattern) ;
% Nettoyage de l’affichage
clf ;
% Initialisation du premier affichage
hold on ;
plot˙points(data.pattern) ;
h = SOM˙PlotNodes(map) ;
title(’T = 0. Cliquer pour commencer ...’)
waitforbuttonpress ;
figure(1) ;
% Lancement de l’apprentissage sur un certain nombre d’iteration
iter˙max = 1000 ;
% Mise a jour de la carte pour chaque iteration
for iter = 1:iter˙max
% Mise a jour de la carte
map = SOM˙OneStepLearning (map , data , iter , iter˙max) ;
% Affichage des poids des neurones
if iter ¡= iter˙max
delete(h) ;
end
h = SOM˙PlotNodes(map) ;
title(sprintf(’T = %d’, iter)) ;
drawnow ;
end
Question 7 : Lancer l’apprentissage. Qu’observez-vous ? Expliquer.
2 Simulations
L’objectif de cette seconde partie est d’observer le comportement des cartes de Kohonen en cours
d’apprentissage et en phase de test. Chaque simulation permettra de mettre en avant des sujets im-
portants propres aux cartes de Kohonen mais aussi a tout probleme de classification / clustering / data
mining.
2.1 Simulation de jeux de donnees artificiels
Carte de Kohonen bi-dimensionnelle L’objectif des questions suivantes est d’observer le comporte-
ment du depliement des cartes de Kohonen lors de l’apprentissage en fonction des differents parametres
de la simulation.
Question 8 : Changer le jeu d’apprentissage en generant de maniere aleatoire 1000 patterns dans
un disque de rayon 0.5 centre en (0.5,0.5). On travaillera en coordonnees polaires ou la distance r entre
les patterns et le centre du disque suit une loi uniforme entre [0 et 0.5] et ou l’angle θ entre l’horizontale
et le segment forme par le centre du disuqe et le pattern suit une loi uniforme entre 0 et 2π. Les deux
variables aleatoires sont independantes.
Question 9 : Lancer plusieurs fois l’apprentissage. Deux phenomenes sont a observer. Expliquer.
Question 10 : Changer les bornes du taux d’apprentissage ainsi que de la zone d’influence de la
modification des poids. Relancer plusieurs fois les apprentissages. Conclusions sur les effets.
Question 11 : Augmenter le nombre de patterns (10000 par exemple). Regenerer eventuellement
plusieurs fois la base des patterns avant apprentissage. Que se passe-t-il ?
Question 12 : Augmenter le nombre de patterns (100 par exemple). Regenerer eventuellement
plusieurs fois la base des patterns avant apprentissage. Quelles conclusions pouvez-vous tirer de ces
reseaux en termes de capacite de generalisation ?
Question 13 : A present, modifier la generation des patterns pour que la distribution de ceux-ci soit
uniforme sur l’ensemble du disque. Commentaires sur les reseaux obtenus.
Carte de Kohonen mono-dimensionnelle : ficelle de Kohonen La topologie d’une carte de Koho-
nen n’est pas necessairement bi-dimensionnelle. Dans cette partie, on s’interessera a une carte a une
dimension.
Question 14 : Reiterer les questions suivantes en utilisant une carte de Kohonen mono-dimensionnelle.
Conclusions.
Question 15 : Il est possible d’obtenir le resultat suivant de la figure ?? sur les donnees de la
question 12. Quelles sont les conditions pour obtenir un tel resultat ?
3
3A - Filiere 4 TP 2 - Carte de Kohonen
Figure 1: Exemple de ficelle de Kohonen apres apprentissage
2.2 Exemple de jeux de donnees non-compacts
Les jeux de donnees set1.txt, set2.txt et set xor.txt du TP precedent vont etre reutilises.
(a) Jeu lineairement separable set1.txt (b) Jeu dissymetrique set2.txt (c) OU exclusif set xor.txt
Figure 2: Jeux de donnees pour l’apprentissage
Question 16 : Observer successivement sur les trois jeux de donnees le comportement de cartes et
de ficelles de Kohonen. Conclusions.
2.3 Application a la base des chiffres manuscrits
Les donnees a utiliser se trouvent dans les fichiers deja manipules lors du TP precedent. Ces fichiers
digit learn10 16x16.txt et digit test10 16x16.txt contiennent des series d’imagettes de chiffres
manuscrits, chaque imagette etant consideree comme un pattern. Chaque pattern present dans ces
fichiers provient donc d’une image binaire d’un chiffre manuscrit (sur 16 × 16 pixels). La dimension
des patterns d’entree sera donc de 256. Les valeurs d’un pattern sont soit 0, soit 1, selon que le pixel
correspondant dans l’image 16x16 appartienne au fond ou a un trait du caractere. De plus, ces chiffres
se repartissent en 4 classes correspondant aux chiffres 0 (classe 0), 1 (classe 1), 2 (classe 2) et 3 (classe
3).
Toutes ces imagettes de chiffres sont extraits de la base de chiffres manuscrits qui a servi a la
reconnaissance automatique des codes postaux.
Question 17 : Utiliser la routine SOM BuildImageFromData pour afficher sous forme d’une image
l’ensemble des patterns (ou imagettes) contenus dans une base de chiffres manuscrits.
Question 18 : Definir les caracteristiques d’une carte de Kohonen appropriee au probleme de la
reconnaissance des chiffres manuscrits.
Question 19 : Realiser une routine SOM BuildImageFromMap qui cree une image img contenant
l’ensemble des poids synaptiques d’une carte de Kohonen map, en representant de maniere appropriee les
4
3A - Filiere 4 TP 2 - Carte de Kohonen
(a) (b)
Figure 3: (a) : Jeu complet 16x16 : digit10 16x16 *.txt, (b) : Jeu reduit 8x8 : digit4 8x8 *.txt.
poids synaptiques associes a chaque neurone c’est-a-dire en prenant en compte l’interpretation de l’espace
des patterns. La figure 4 illustre le resultat a obtenir.
img = SOM˙BuildImageFromMap (map)
2.3.1 Apprentissage
Question 20 : Mettre a jour le script Script digit.m en prenant en compte les specificites du
probleme (dimension, . . .).
% Lecture de la base de patterns
data = # a completer #
% Taille d’une imagette carree
pw = int16(sqrt(data.dim˙input)) ;
% Creation d’une carte de Kohonen
N = # a completer #
learning˙rate = [0.5 0.1] ; % Initial et final
neighborhood˙spread = [3 1.0e-1] ; % Initial et final 3 0.1
size˙pattern = # a completer #
map = SOM˙Create2D (N , learning˙rate , neighborhood˙spread , size˙pattern) ;
% Nettoyage de l’affichage
clf ;
% Lancement de l’apprentissage sur un certain nombre d’iteration
iter˙max = 2000 ;
% Mise a jour de la carte pour chaque iteration
for iter = 1:iter˙max
% Mise a jour de la carte
map = SOM˙OneStepLearning (map , data , iter , iter˙max) ;
% Construction de l’image des poids des neurones
img = SOM˙BuildImage (map) ;
% Affichage de l’image des poids
imagesc (img) ;
title(sprintf(’T = %d’, iter))
drawnow ;
end
Question 21 : Realiser quelques apprentissages et commenter leur comportement par rapport aux
apprentissages des paragraphes precedents.
2.3.2 Test
Une fois l’apprentissage non-supervise termine, l’objectif est d’utiliser la carte obtenue pour realiser
de la classification.
5
3A - Filiere 4 TP 2 - Carte de Kohonen
Figure 4: Exemple de representation souhaitee des poids d’une carte de Kohonen de taille 15× 15 dans
le cas de l’apprentissage realise sur la base complete des chiffres manuscrits
Question 22 : Quelle strategie simple peut-on mettre en œuvre pour utiliser une carte de Kohonen
issue d’un apprentissage en phase de test pour la classification des chiffres manuscrits ?
Question 23 : En s’inspirant de la routine SOM BuildImageFromData, ecrire une nouvelle routine
SOM BuildImageFromDataThroughMap qui produise une image composee d’imagettes ou chaque imagette
de l’image finale corresponde non pas a l’imagette d’un pattern de la base mais a l’imagette des poids
synaptiques du neurone de la carte le plus proche du dit-pattern.
img = SOM˙BuildImageFromDataThroughMap (map , data)
Question 24 : Realiser l’apprentissage et le test sur deux bases de patterns differentes. Analyser les
resultats obtenus.
Question 25 : Realiser l’apprentissage et le test sur deux bases de patterns identiques. Analyser les
resultats obtenus.
3 Remarques sur l’implementation
Toutes les implementations seront realisees avec Matlab en utilisant ses fonctionnalites de manipu-
lation de matrices et la notion de structure (afin de creer des entites manipulables plus facilement).
L’idee est de rassembler les donnees liees a chaque entite manipulee sous forme de structures afin de
faciliter leur manipulation et d’augmenter la lisibilite du code. En Matlab, une variable de type struc-
ture se manipule comme une variable simple, l’acces a ses champs s’effectuant au travers de la syntaxe
nom variable.nom champ.
6
3A - Filiere 4 TP 2 - Carte de Kohonen
3.1 Donnees d’apprentissage et de test
La routine dataset = read input(filename) permet de recuperer des ensembles de patterns avec
leurs classes associees. La structure dataset possede differents champs indiquant le nombre de patterns,
la dimension d’un pattern, le nombre de classes du jeu de donnees contenu dans le fichier filename.
3.1.1 Format des fichiers contenant les bases de patterns
Pour information, et si vous souhaitez introduire des patterns personnalises pour des tests supplementaires,
voici le format de fichier texte utilise pour stocker ces jeux de donnees : les trois premieres lignes contien-
nent les informations relatives au jeu de donnees (commentaire puis dimension des patterns puis nombre
de classes), ensuite chaque ligne contient le pattern suivi de l’identifiant de sa classe (indexe a partir de
0).
Nuages lineairement separables (50/50)
2
2
0.990681 0.863072 0
0.6765 0.715986 0
0.776633 0.79874 0
0.89661 0.786454 0
0.988434 0.725722 0
0.245975 0.20934 1
0.0861772 0.180822 1
0.109825 0.273286 1
0.0999787 0.0416723 1
0.309232 0.049519 1
3.1.2 Structure representant une base de patterns
• filename : Nom du fichier contenant la base de patterns
• dim input : Dimension de chaque pattern (taille du vecteur representant un pattern)
• n class : Nombre de classes dans lesquelles se repartissent les patterns
• n pattern : Nombre de patterns contenus dans la base
• pattern : Matrice (n pattern x dim input contenant les patterns (1 ligne = 1 pattern)
• class : Vecteur (n pattern x 1 contenant la classe de chaque pattern (1 ligne = 1 pattern)
3.2 Representation d’une carte de Kohonen
• n dims : Dimension de la topologie de la carte (ici 1 ou 2)
• n nodesPerDim : Nombre de neurones par dimension topologique de la carte
• n nodes : Nombre total de neurones de la carte
• learning rate i : Taux d’apprentissage en debut d’apprentissage
• learning rate f : Taux d’apprentissage en fin d’apprentissage
• neighborhood spread i : Zone d’influence des modifications de poids en debut d’apprentissage
• neighborhood spread f : Zone d’influence des modifications de poids en fin d’apprentissage
• weights : Matrice n nodes x size pattern contenant les poids de l’ensemble des neurones de
la carte
• topology : Matrice contenant la topologie des neurones de la carte
– en 1D : Matrice n nodes x 1 (exemple A : ficelle a 5 neurones)
7
3A - Filiere 4 TP 2 - Carte de Kohonen
– en 2D : Matrice n nodes x 2 (exemple B : carte a 3× 3 neurones)
A =
1
2
3
4
5
B =
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
8