tp kohonen

8

Click here to load reader

Upload: mauricetappa

Post on 09-Aug-2015

103 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: TP Kohonen

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

Page 2: TP Kohonen

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

Page 3: TP Kohonen

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

Page 4: TP Kohonen

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

Page 5: TP Kohonen

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

Page 6: TP Kohonen

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

Page 7: TP Kohonen

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

Page 8: TP Kohonen

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