Réseau SOM de Kohonen

Transcription

Réseau SOM de Kohonen
168
Les réseaux de neurones compétitifs
T RAVAUX P RATIQUES
Chapitre 4
Réseau SOM de Kohonen
Le réseau SOM1, Self Organizing Map, de Kohonen effectue la classification automatique de données ; cependant, à la différence des autres classificateurs, ce réseau produit une « carte » qui permet de visualiser la position relative
des classes. Les données manipulées par le SOM sont de type réel, et non pas
seulement binaire comme c’est le cas avec des réseaux comme Hopfield et
ART1 que nous étudierons dans des chapitres ultérieurs.
Plusieurs applications pratiques de ce réseau ont été proposées. Cependant,
il est utilisé le plus souvent pour réduire la dimensionnalité des données, ou pour
mettre en évidence la structure globale des données.
SIMULATIONS MATLAB
Ce TP et quelques autres dans d’autres chapitres utilisent l’approche
matricielle pour la simulation des réseaux de neurones au moyen du progiciel
MATLAB de la compagnie MathWorks. Une brève description de cette
catégorie de simulateurs apparaît à la section 1.7.2 du chapitre 1, Le paradigme
des réseaux de neurones artificiels. Les programmes et données nécessaires
pour le TP se retrouvent sur le site Internet du livre, sous le sous-répertoire
général :
Travaux pratiques/TP4
Toutes les données et programmes nécessaires pour la réalisation du TP peuvent
être téléchargés en transférant le fichier compressé tp4.zip. Dans votre
environnement de travail, les variables d’environnement sont initialisées en
tapant tp4.
Dans l’environnement de simulation MATLAB, de l’information sur
n’importe quelle fonction peut être obtenue en tapant sur la ligne de
commande : help <nom de la fonction>. La liste des fonctions et données
nécessaires pour la réalisation du TP s’obtient en tapant : help tp4.
1. L’acronyme SOFM, Self Organizing Feature Maps, est tout à fait équivalent et est
autant utilisé.
Travaux Pratiques
169
Un premier exemple : une carte linéaire
UN PREMIER EXEMPLE : UNE CARTE LINÉAIRE
Nous tenterons de classifier un ensemble de données simples avec un réseau
ayant trois neurones de sortie disposés linéairement :
y2
y1
y3
compétition
entrée
x1
Figure 4.a
x2
Carte auto-organisatrice linéaire de Kohonen.
Manipulations
1. Chargez vos données en mémoire avec load samples1. Vous aurez en
mémoire 16 échantillons à 2 dimensions; chaque ligne de la matrice de
données data correspond à un individu.
2. Visualisez vos données avec :scatter(data(:,1),data(:,2))
3. Définissez la taille du réseau :mapsize = [1 3];
et la fonction d’apprentissage :alpha = geometric (1,.9,50);
4. Les données sont classifiées par le réseau SOM :
[c,p] = som(data,mapsize,
’alpha’,alpha,’protomap’,1);
Dans la figure qui s’ouvre, vous observez l’évolution des poids durant
l’apprentissage. Chaque cercle bleu correspond à un neurone de la couche
de sortie, alors que les coordonnées (x,y) des cercles indiquent les valeurs
des poids associés à ces neurones.
170
Les réseaux de neurones compétitifs
Chapitre 4
Comme pour beaucoup d’autres classificateurs, chaque neurone de sortie
représente une classe. Le prototype de cette classe correspond simplement
aux poids rattachés à ce neurone.
5. La disposition des prototypes parmi l’ensemble des points d’entrée peut être
observée comme précédemment grâce à la fonction scatter :
scatter([data(:,1);p(:,1)],[data(:,2);p(:,2)],
50,co)
où le paramètre « 50 » spécifie la grosseur des points et où « co » est un
vecteur qui indique la couleur des points affichés : rouge pour les vecteurs
prototypes, bleu pour les autres. Vous remarquerez une similitude entre les
nuages des individus et la position des prototypes. Ce n’est pas un hasard :
puisqu’un prototype représente certains individus dans une population,
idéalement ce prototype devrait donc se placer quelque part au milieu du
nuage de points qu’il désigne.
La variable de sortie c indique la classe d’appartenance respective des
individus, selon leur ordre d’apparition dans la matrice de données data.
Par exemple, c(1) indique la classe d’appartenance du premier individu, ie
data(1,:). Vérifiez quels individus appartiennent à quelle classe, puis
calculez le centre de gravité des trois classes. Par exemple, pour la classe 1 :
index=find(c==1);
centroid=mean(data(index,:))
⇒ Comparez le centre de gravité des classes avec leur prototype qui apparaît
dans la variable de sortie p. Par exemple, le prototype de la classe 1
correspond à p(1,:); , etc. Le cas échéant, comparez ce résultat aux
prototypes appris par d’autres types de classificateur (e.g. ART1).
LA RÉDUCTION DE DIMENSION
Considérons maintenant une population de six personnes, dans laquelle chaque individu est caractérisé par trois mesures, certaines quantitatives et d’autres
qualitatives :
Travaux Pratiques
171
La réduction de dimension
âge
poids
occupation
10
40
1
(étudiant)
20
58
2
(travailleur)
30
63
3
(technicien)
40
65
4
(professionnel)
50
67
5
(cadre)
60
60
6
(retraité)
Tableau 4.a Population de 6 individus
Manipulations
1. Chargez vos données en mémoire avec load persons. Vous aurez alors
en mémoire la matrice du tableau 4.a dans la variable persons.
2. Faites classifier ces données par un réseau de 8 neurones linéaires :
mapsize = [1 8];
[c, p, pMap] =
som (persons, mapsize, ’alpha’, alpha);
3. Vérifiez sur quel neurone est projeté chaque individu : trouvez sa classe
d’appartenance dans c, puis recherchez la position (x, y) du neurone associé
à cette classe à la cième ligne de la matrice pMap. Indiquez ensuite la
position de chaque individu sur la couche de sortie du réseau :
Prenez le repère indiqué à gauche comme origine du système de
coordonnées. N’importe quelle autre origine serait aussi valable.
Une autre façon de présenter le réseau SOM serait de dire qu’il
projette un domaine d’entrée dans un sous-espace de dimension
inférieure ; autrement dit, le réseau réduit la dimensionnalité
des données. Dans cet exemple, les données passent de 3 dimensions en entrée à une seule dimension en sortie. Ce n’est pas une
172
Les réseaux de neurones compétitifs
Chapitre 4
simple classification, puisque les neurones de sortie ne sont pas
assignés arbitrairement.
Cette réduction de dimension peut servir à diminuer la complexité des données brutes en vue d’un traitement ultérieur, ou à visualiser des données à plus
de 3 dimensions. Rien n’oblige par ailleurs à ramener les données seulement
dans un espace 1D, 2D ou 3D. Par exemple, on pourrait fort bien projeter un
espace de 20 dimensions dans un sous-espace à 5 dimensions; la visualisation
graphique des résultats serait impossible, mais le réseau remplirait encore très
bien sa fonction.
LA PRÉSERVATION TOPOLOGIQUE
Un aspect critique de ce genre d’algorithme est d’introduire le moins de distorsion possible lors de la projection. À défaut de pouvoir préserver exactement
les distances dans l’espace de sortie, on veut au moins maintenir les relations de
voisinage.
Manipulations
1. Avec load qdist, chargez en mémoire les données suivantes qui
représentent les distances routières entre six villes du Québec (Canada) :
Chic.
Mtl.
Québec
Sherb.
Trois-Riv.
Rouyn
0
464
212
451
367
831
Montréal
464
0
267
147
142
638
Québec
212
267
0
241
135
882
Sherbrooke
451
147
241
0
158
782
Trois-Rivières
367
142
135
158
0
748
Rouyn
831
638
882
782
748
0
Chicoutimi
Tableau 4.b Distances routières en km de six villes du Québec.
2. Faites classifier ces données par un réseau SOM à 2 dimensions :
mapsize = [3 3] ;
Travaux Pratiques
La préservation topologique
173
alpha = geometric (1,.99,50) ;
[c,p,pMap] = som(qdist, mapsize, ’alpha’, alpha);
3. La figure 4.b indique la carte de Kohonen (les neuf neurones de la couche
de compétition) ainsi qu’une partie de la carte géographique du Québec où
apparaissent les six villes. Déterminez, sur la carte de Kohonen, quelle ville
est associée à quel neurone : marquez d’abord la position de chaque classe
sur la couche de sortie à l’aide des variables c et pMap. Indiquez finalement
les villes sur la carte en vérifiant la classe d’appartenance des données
d’entrée. Comme d’habitude, les données correspondent aux lignes de la
matrice qdist.
Figure 4.b
(a)
(b)
Carte de Kohonen pour représenter des villes.
(a) Carte 3x3 de Kohonen (9 neurones).
(b) Carte géographique montrant les 6 villes.
⇒ En comparant la configuration de la carte de Kohonen et la carte
géographique, voyez-vous une affinité entre l’emplacement réel des villes et
leur disposition sur la carte de Kohonen? Au besoin, représentez les villes
de la carte géographique par un graphe.
4. Calculez la distance euclidienne entre tous les individus :
euclid (qdist, qdist)
Notez que la distance euclidienne entre deux individus ne correspond pas à
la distance routière entre les deux villes correspondantes ! Sur la carte de
Kohonen, indiquez les distances euclidiennes entre quelques individus.
⇒ Les distances sont-elles respectées sur la carte de Kohonen?
Quel que soit l’algorithme utilisé, il est impossible de préserver
les distances si on élimine certaines dimensions. Cependant, le
SOM tente de préserver les relations de voisinage entre les
174
Les réseaux de neurones compétitifs
Chapitre 4
classes; cette caractéristique le distingue particulièrement des
autres classificateurs, qui assignent arbitrairement les classes
aux neurones de sortie.
LE PRINCIPE DE VOISINAGE
Chaque neurone de la couche d’entrée est relié à tous les neurones de la couche de sortie. Durant l’apprentissage, le réseau modifie peu à peu les poids qui
les relient les uns aux autres de sorte que ces poids correspondent aux prototypes des classes. En opération, le réseau calcule alors la distance euclidienne
entre le vecteur d’entrée et tous les prototypes, et déclare gagnant le neurone de
sortie dont le prototype est le plus semblable à ce vecteur1 . En deux mots,
Kohonen est un classificateur à distance minimale.
Détail crucial par contre, l’apprentissage des vecteurs d’entrée se fait sur un
voisinage : les poids du neurone gagnant seront les plus modifiés, mais les
poids des neurones voisins seront aussi un peu modifiés, selon leur distance par
rapport au neurone gagnant.
Manipulations
1. Examinons d’une part la pondération radiale, qui détermine (entre autres)
la correction apportée aux poids durant l’apprentissage, en fonction de la
distance par rapport au neurone gagnant :
figure ;
r = -3:.1:3 ;
plot (r, exp(-r .^2))
Au facteur d’échelle près, il s’agit évidemment d’une gaussienne, avec
2
σ = ------- . Ceci indique que les poids du neurone gagnant (situé à x = 0 )
2
seront modifiés d’un facteur de 1, que les poids des neurones situés dans un
–1
rayon de 1 autour du neurone gagnant (à x = ± 1 ) seront modifiés de e ,
etc.
1. Il existe une variante de Kohonen qui calcule plutôt le produit scalaire entre le vecteur d’entrée et les prototypes. Le résultat final est le même si le vecteur d’entrée et les
prototypes sont normalisés (amplitude unitaire des vecteurs).
Travaux Pratiques
Le principe de voisinage
175
2. Voyons si on retrouve cette décroissance de la réponse sur la carte de
Kohonen. Pour la simplicité, nous reprendrons les données du premier
exemple, mais sur une carte élargie à 1 × 10 :
alpha = geometric (1, .9, 500) ;
mapsize = [1 10] ;
[c, p, pMap, rMap] =
som (data, mapsize, ’alpha’, alpha) ;
La variable rMap contient la réponse des 10 neurones après apprentissage
pour chacun des 16 échantillons. Autrement dit, si on fournit le premier
échantillon data(1,:) au réseau, on obtiendra en sortie de chaque
neurone les valeurs indiquées dans rMap{1}
3. Faites tracer la réponse du réseau pour quelques vecteurs d’entrée (d’une
fois à l’autre, changez seulement la valeur entre accolades) :
plot (1:10, rMap{1})
L’abscisse de la figure indique la position de chaque neurone sur la carte de
Kohonen, et l’ordonnée leur réponse respective pour le vecteur d’entrée.
⇒ Où est situé le neurone gagnant pour ce vecteur ? Pour confirmation,
consultez la classe d’appartenance du vecteur d’entrée dans la variable c, et
l’endroit où est projeté cette classe sur la carte dans la variable pMap.
⇒ Pourquoi la courbe est-elle inversée?
Vous remarquerez que la courbe de réponse n’est pas exactement
une gaussienne (inversée), et qu’elle présente même certains artefacts. Plusieurs facteurs peuvent être en cause, dont la taille de
la carte (encore petite pour bien discrétiser la courbe), le nombre d’itérations, la fonction d’apprentissage alpha, etc. L’important, c’est de voir que la forme générale de la gaussienne est
là, c’est-à-dire que la réponse du réseau n’est jamais strictement
locale.
4. Maintenant que vous avez compris ce que fait Kohonen, traduisons nos
courbes de réponse sous une forme plus expressive :
176
Les réseaux de neurones compétitifs
Chapitre 4
[c, p, pMap, rMap] =
som (data, mapsize, ’alpha’, alpha,
’datamap’, 1) ;
La nouvelle fenêtre qui s’ouvre illustre les réponses du réseau pour tous les
vecteurs d’entrée, de la même façon que vous l’avez fait auparavant, mais
selon une échelle de couleur cette fois. L’échelle à droite de la figure
indique la distance mesurée entre les poids du neurone (le prototype) et le
vecteur d’entrée.
LE RAYON D’APPRENTISSAGE
Puisqu’il s’agit d’une exponentielle inverse, la fonction de pondération
radiale n’est jamais nulle, et possède un rayon d’action infini. Lors de l’apprentissage, les neurones de la carte seront donc tous affectés par les vecteurs
d’entrée, même s’ils sont très éloignés du neurone gagnant. Différentes considérations inspirées des neurones biologiques incitent à croire par contre que la
zone d’influence devrait diminuer progressivement lors de l’apprentissage.
Nous tenterons de vérifier la pertinence de cet argument.
Manipulations
Cette section et la suivante du TP utilisent des données qui ont été proposées
par (Ritter, & Kohonen, 1989)1 pour illustrer l’algorithme SOM. Les données
représentent les caractéristiques de certains animaux, codées sur des vecteurs
binaires à 13 bits. Le tableau 4.c présente le code utilisé.
Caractéristique Position des bits
Taille de l’animal
1-3
Valeurs possibles
100
petit
010
moyen
001
gros
Tableau 4.c Vecteur des caractéristiques de certains animaux.
1. Ritter, H. & Kohonen, T. (1989). Self-organizing semantic maps. Biological Cybernetics, 61, 241-254.
Travaux Pratiques
177
Le rayon d’apprentissage
Caractéristique Position des bits
Valeurs possibles
1XXXXX deux pattes
X1XXXX quatre pattes
Morphologie
4-9
XX1XXX poil
XXX1XX sabots
XXXX1X crinière
XXXXX1 plumes
Comportement
10-13
1XXX
aime chasser
X1XX
aime courir
XX1X
aime voler
XXX1
aime nager
Tableau 4.c Vecteur des caractéristiques de certains animaux.
La matrice animals, dans le fichier du même nom, contient dans l’ordre
les 16 individus-animaux suivants :
1. Oie
1001000010011
2. Cheval
0010111100100
3. Chien
0100110000100
4. Canard
1001000010001
5. Poule
1001000010000
6. Lion
0010110101100
7. Vache
0010111000000
8. Colombe
1001000010010
9. Tigre
0010110001100
10. Renard
0100110001000
Tableau 4.d Matrice animals.mat
178
Les réseaux de neurones compétitifs
11. Zèbre
0010111100100
12. Hibou
1001000011010
13. Loup
0100110101100
14. Aigle
0101000011010
15. Chat
1000110001000
16. Épervier
1001000011010
Chapitre 4
Tableau 4.d Matrice animals.mat
1. Chargez de nouvelles données en mémoire avec load animals.
2. Effectuez une première classification de ces données sur une carte de
10x10 :
alpha = geometric (1, .9, 500) ;
mapsize = [10 10] ;
som (animals, mapsize, ’alpha’, alpha,
’datamap’, 1, ’datatags’, names );
Avant de poursuivre notre expérience, prenons le temps d’examiner les
cartes de réponses pour mieux apprécier l’utilité de la carte de Kohonen. Par
exemple :
- Dans quelle partie de la carte sont projetés les
oiseaux ?
-
Y a-t-il dans cette région de la carte d’autres
animaux qui ne sont pas des oiseaux ?
-
Voyez-vous des sous-groupes ? Au sein des
oiseaux, cherchez par exemple où sont projetés
les oiseaux de basse-cour et les oiseaux de proie.
-
Sur une feuille de papier, divisez la carte en 3 ou
4 régions principales, puis identifiez quels animaux sont projetés dans quelles régions. Voyezvous une quelconque logique dans la disposition
des classes sur la carte, ou bien la répartition des
classes est-elle complètement aléatoire ?
Travaux Pratiques
Le rayon d’apprentissage
179
On observe ici l’élément central de ce réseau, qu’on appelle en
anglais Self-Organizing Feature Map (SOFM). La disposition
des classes sur une carte de Kohonen n’est jamais aléatoire (si
l’apprentissage est suffisant) : elle est aménagée en fonction des
caractéristiques existantes dans les données. La proximité physique des classes sur la carte exprime aussi une proximité sémantique des données.
Bien que le réseau SOM soit un classificateur automatique, la
carte de Kohonen est souvent plus intéressante que les classes
identifiées par le réseau ! De par sa propriété de préservation
topologique, la carte aide à l’interprétation des données, et à dégager la structure globale des données.
Continuons maintenant notre expérience sur le problème du rayon d’apprentissage.
3. Prenons le cas extrême : nous indiquerons au réseau de mettre à jour
seulement les poids du neurone gagnant. Il suffit d’indiquer un rayon
d’apprentissage toujours nul :
radius=zeros(1,500);
4. Détail technique : pour que la prochaine simulation n’efface pas la carte
actuelle, faites :
set (gcf, ’HandleVisibility’, ’off’)
5. Refaites finalement une classification des données avec ces contraintes :
som (animals, mapsize, ’alpha’, alpha,
’radius’, radius, ’datamap’, 1 ,
’datatags’, names) ;
⇒ Comment se compare la nouvelle carte avec l’ancienne? Les classes sontelles projetées au même endroit? La carte est-elle aussi éloquente?
Pour ce cas, la carte est semblable à celle qu’on obtiendrait avec
un réseau compétitif quelconque ; seule différence avec ce genre
de réseau, la topologie est encore préservée, bien que moins
évidente.
180
Les réseaux de neurones compétitifs
Chapitre 4
Pour résumer la question, le rayon d’apprentissage n’est rien
d’autre qu’un seuil appliqué sur la gaussienne de pondération
radiale. Compte tenu des observations biologiques, le rayon
devrait être large au début de l’apprentissage, pour permettre un
ordonnancement global de la carte, puis diminuer
progressivement pour raffiner les connaissances locales :
etc.
r(t0 )
r(t 1)
r(t2 )
Dans l’implémentation fournie en laboratoire, le rayon
d’apprentissage r(t) est à décroissance linéaire, mais il ne s’agit
là que d’une avenue par défaut, qui ne prétend pas être
optimale ; certains auteurs suggèrent par exemple une
décroissance en escalier, mais il n’y a pas de solution unique. Il
peut aussi être utile de contrôler l’étalement horizontal de la
courbe de pondération radiale.
LA FONCTION D’APPRENTISSAGE
Il nous reste un dernier phénomène à étudier dans cette introduction, soit la
fonction d’apprentissage (le paramètre alpha que vous utilisez depuis le début
du TP).
Vous savez que de nombreux réseaux neuroniques utilisent une constante
d’apprentissage pour déterminer l’ampleur de la correction à effectuer sur les
poids. Ce principe apparaît aussi avec le réseau de Kohonen, sauf que cette
« constante » varie dans le temps; d’où le nom de fonction d’apprentissage.
Travaux Pratiques
181
La fonction d’apprentissage
La fonction d’apprentissage α(t) contrôle l’amplitude verticale de la courbe
de pondération radiale. Par exemple, pour une fonction d’apprentissage
linéaire, on aurait :
α(t)
etc.
t0
t1
t2
Manipulations
1. Vérifions l’effet de la fonction d’apprentissage sur la carte de Kohonen.
Nous utiliserons la fonction par défaut de l’implémentation, soit une
fonction linéaire :
som (animals, mapsize, ’epochs’, 500,
’datamap’,1,’datatags’, names);
En l’absence d’un paramètre d’entrée alpha ou radius, rien n’indique à la
fonction le nombre d’époques souhaitées ; d’où l’introduction du paramètre
epochs. Pour mieux comparer le résultat avec l’ancienne carte, nous
gardons le même nombre d’époques qu’auparavant, soit 500.
⇒ Comment se compare la nouvelle carte avec l’ancienne? La topologie estelle préservée? Comment interprétez-vous ce que vous observez?
Pour ce cas, le réseau est moins « nuancé » dans son jugement.
Un avantage possible de ce genre d’apprentissage serait d’obtenir des classes et sous-classes plus strictes, moins « fuzzy ».
Comme pour la fonction qui contrôle la décroissance du rayon
d’apprentissage (la fonction de seuillage radial), il n’y a pas de
règle absolue pour déterminer la meilleure fonction d’apprentissage. Plusieurs auteurs mentionnent que la fonction d’apprentissage devrait être élevée au début, décroître ensuite, puis
demeurer longtemps à une valeur faible. Il s’agit seulement
d’une règle empirique, et qui reprend le principe d’une classification grossière au début de l’apprentissage, puis d’une classifi-
182
Les réseaux de neurones compétitifs
Chapitre 4
cation plus subtile lorsque les principaux éléments sont placés
sur la carte.
2. Pour faire tracer la fonction d’apprentissage géométrique que vous avez
utilisée durant ce TP :
figure ;
plot (1:length(alpha), alpha)
UN DERNIER ESSAI
Pour le plaisir intellectuel (si vous ne voyez pas de contradiction dans cette
expression), vous allez tracer la carte de Kohonen de chiffres manuscrits. Nous
aurons d’ailleurs l’opportunité d’expérimenter la classification de ces chiffres
manuscrits avec divers modèles de réseaux de neurones afin d’illustrer les capacités de classification de ces divers réseaux.
1. Chargez la base de chiffres manuscrits :
load digits
2. Les vecteurs de données étant constitués de 100 bits, il est suggéré
d’observer la carte de Kohonen seulement pour les chiffres 0, 1 et 2 afin de
réduire le temps de calcul :
d=[d0;d1;d2];
mapsize=[10 10];
som (d, mapsize, ’alpha’, alpha, ’datamap’, 1) ;
⇒ Que pensez-vous de la dispersion de vos données ? Voyez-vous pourquoi
certains individus d’une classe convergent vers le prototype d’une autre
classe? Comment utiliseriez-vous la carte de Kohonen dans une application
de reconnaissance de caractères manuscrits?