Vous êtes sur la page 1sur 15

168

Les rseaux de neurones comptitifs

T RAVAUX P RATIQUES

Chapitre 4

Rseau SOM de Kohonen

Le rseau SOM1, Self Organizing Map, de Kohonen effectue la classification automatique de donnes ; cependant, la diffrence des autres classificateurs, ce rseau produit une carte qui permet de visualiser la position relative
des classes. Les donnes manipules par le SOM sont de type rel, et non pas
seulement binaire comme cest le cas avec des rseaux comme Hopfield et
ART1 que nous tudierons dans des chapitres ultrieurs.
Plusieurs applications pratiques de ce rseau ont t proposes. Cependant,
il est utilis le plus souvent pour rduire la dimensionnalit des donnes, ou pour
mettre en vidence la structure globale des donnes.

SIMULATIONS MATLAB
Ce TP et quelques autres dans dautres chapitres utilisent lapproche
matricielle pour la simulation des rseaux de neurones au moyen du progiciel
MATLAB de la compagnie MathWorks. Une brve description de cette
catgorie de simulateurs apparat la section 1.7.2 du chapitre 1, Le paradigme
des rseaux de neurones artificiels. Les programmes et donnes ncessaires
pour le TP se retrouvent sur le site Internet du livre, sous le sous-rpertoire
gnral :
Travaux pratiques/TP4
Toutes les donnes et programmes ncessaires pour la ralisation du TP peuvent
tre tlchargs en transfrant le fichier compress tp4.zip. Dans votre
environnement de travail, les variables denvironnement sont initialises en
tapant tp4.
Dans lenvironnement de simulation MATLAB, de linformation sur
nimporte quelle fonction peut tre obtenue en tapant sur la ligne de
commande : help <nom de la fonction>. La liste des fonctions et donnes
ncessaires pour la ralisation du TP sobtient en tapant : help tp4.

1. Lacronyme SOFM, Self Organizing Feature Maps, est tout fait quivalent et est
autant utilis.

Travaux Pratiques

169

Un premier exemple : une carte linaire

UN PREMIER EXEMPLE : UNE CARTE LINAIRE


Nous tenterons de classifier un ensemble de donnes simples avec un rseau
ayant trois neurones de sortie disposs linairement :
y2

y1

y3

comptition

entre
x1
Figure 4.a

x2

Carte auto-organisatrice linaire de Kohonen.

Manipulations
1. Chargez vos donnes en mmoire avec load samples1. Vous aurez en
mmoire 16 chantillons 2 dimensions; chaque ligne de la matrice de
donnes data correspond un individu.
2. Visualisez vos donnes avec :scatter(data(:,1),data(:,2))
3. Dfinissez la taille du rseau :mapsize = [1 3];
et la fonction dapprentissage :alpha = geometric (1,.9,50);
4. Les donnes sont classifies par le rseau SOM :
[c,p] = som(data,mapsize,
alpha,alpha,protomap,1);
Dans la figure qui souvre, vous observez lvolution des poids durant
lapprentissage. Chaque cercle bleu correspond un neurone de la couche
de sortie, alors que les coordonnes (x,y) des cercles indiquent les valeurs
des poids associs ces neurones.

170

Les rseaux de neurones comptitifs

Chapitre 4

Comme pour beaucoup dautres classificateurs, chaque neurone de sortie


reprsente une classe. Le prototype de cette classe correspond simplement
aux poids rattachs ce neurone.
5. La disposition des prototypes parmi lensemble des points dentre peut tre
observe comme prcdemment grce la fonction scatter :
scatter([data(:,1);p(:,1)],[data(:,2);p(:,2)],
50,co)
o le paramtre 50 spcifie la grosseur des points et o co est un
vecteur qui indique la couleur des points affichs : rouge pour les vecteurs
prototypes, bleu pour les autres. Vous remarquerez une similitude entre les
nuages des individus et la position des prototypes. Ce nest pas un hasard :
puisquun prototype reprsente certains individus dans une population,
idalement ce prototype devrait donc se placer quelque part au milieu du
nuage de points quil dsigne.
La variable de sortie c indique la classe dappartenance respective des
individus, selon leur ordre dapparition dans la matrice de donnes data.
Par exemple, c(1) indique la classe dappartenance du premier individu, ie
data(1,:). Vrifiez 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 apparat
dans la variable de sortie p. Par exemple, le prototype de la classe 1
correspond p(1,:); , etc. Le cas chant, comparez ce rsultat aux
prototypes appris par dautres types de classificateur (e.g. ART1).

LA RDUCTION DE DIMENSION
Considrons maintenant une population de six personnes, dans laquelle chaque individu est caractris par trois mesures, certaines quantitatives et dautres
qualitatives :

Travaux Pratiques

171

La rduction de dimension

ge

poids

occupation

10

40

(tudiant)

20

58

(travailleur)

30

63

(technicien)

40

65

(professionnel)

50

67

(cadre)

60

60

(retrait)

Tableau 4.a Population de 6 individus

Manipulations
1. Chargez vos donnes en mmoire avec load persons. Vous aurez alors
en mmoire la matrice du tableau 4.a dans la variable persons.
2. Faites classifier ces donnes par un rseau de 8 neurones linaires :
mapsize = [1 8];
[c, p, pMap] =
som (persons, mapsize, alpha, alpha);
3. Vrifiez sur quel neurone est projet chaque individu : trouvez sa classe
dappartenance dans c, puis recherchez la position (x, y) du neurone associ
cette classe la cime ligne de la matrice pMap. Indiquez ensuite la
position de chaque individu sur la couche de sortie du rseau :

Prenez le repre indiqu gauche comme origine du systme de


coordonnes. Nimporte quelle autre origine serait aussi valable.
Une autre faon de prsenter le rseau SOM serait de dire quil
projette un domaine dentre dans un sous-espace de dimension
infrieure ; autrement dit, le rseau rduit la dimensionnalit
des donnes. Dans cet exemple, les donnes passent de 3 dimensions en entre une seule dimension en sortie. Ce nest pas une

172

Les rseaux de neurones comptitifs

Chapitre 4

simple classification, puisque les neurones de sortie ne sont pas


assigns arbitrairement.
Cette rduction de dimension peut servir diminuer la complexit des donnes brutes en vue dun traitement ultrieur, ou visualiser des donnes plus
de 3 dimensions. Rien noblige par ailleurs ramener les donnes 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 rsultats serait impossible, mais le rseau remplirait encore trs
bien sa fonction.

LA PRSERVATION TOPOLOGIQUE
Un aspect critique de ce genre dalgorithme est dintroduire le moins de distorsion possible lors de la projection. dfaut de pouvoir prserver exactement
les distances dans lespace de sortie, on veut au moins maintenir les relations de
voisinage.

Manipulations
1. Avec load qdist, chargez en mmoire les donnes suivantes qui
reprsentent les distances routires entre six villes du Qubec (Canada) :
Chic.

Mtl.

Qubec

Sherb.

Trois-Riv.

Rouyn

464

212

451

367

831

Montral

464

267

147

142

638

Qubec

212

267

241

135

882

Sherbrooke

451

147

241

158

782

Trois-Rivires

367

142

135

158

748

Rouyn

831

638

882

782

748

Chicoutimi

Tableau 4.b Distances routires en km de six villes du Qubec.


2. Faites classifier ces donnes par un rseau SOM 2 dimensions :
mapsize = [3 3] ;

Travaux Pratiques

La prservation 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 comptition) ainsi quune partie de la carte gographique du Qubec o
apparaissent les six villes. Dterminez, sur la carte de Kohonen, quelle ville
est associe quel neurone : marquez dabord la position de chaque classe
sur la couche de sortie laide des variables c et pMap. Indiquez finalement
les villes sur la carte en vrifiant la classe dappartenance des donnes
dentre. Comme dhabitude, les donnes correspondent aux lignes de la
matrice qdist.

Figure 4.b

(a)
(b)
Carte de Kohonen pour reprsenter des villes.
(a) Carte 3x3 de Kohonen (9 neurones).
(b) Carte gographique montrant les 6 villes.

En comparant la configuration de la carte de Kohonen et la carte


gographique, voyez-vous une affinit entre lemplacement rel des villes et
leur disposition sur la carte de Kohonen? Au besoin, reprsentez les villes
de la carte gographique 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 routire entre les deux villes correspondantes ! Sur la carte de
Kohonen, indiquez les distances euclidiennes entre quelques individus.
Les distances sont-elles respectes sur la carte de Kohonen?
Quel que soit lalgorithme utilis, il est impossible de prserver
les distances si on limine certaines dimensions. Cependant, le
SOM tente de prserver les relations de voisinage entre les

174

Les rseaux de neurones comptitifs

Chapitre 4

classes; cette caractristique le distingue particulirement des


autres classificateurs, qui assignent arbitrairement les classes
aux neurones de sortie.

LE PRINCIPE DE VOISINAGE
Chaque neurone de la couche dentre est reli tous les neurones de la couche de sortie. Durant lapprentissage, le rseau modifie peu peu les poids qui
les relient les uns aux autres de sorte que ces poids correspondent aux prototypes des classes. En opration, le rseau calcule alors la distance euclidienne
entre le vecteur dentre et tous les prototypes, et dclare gagnant le neurone de
sortie dont le prototype est le plus semblable ce vecteur1 . En deux mots,
Kohonen est un classificateur distance minimale.
Dtail crucial par contre, lapprentissage des vecteurs dentre se fait sur un
voisinage : les poids du neurone gagnant seront les plus modifis, mais les
poids des neurones voisins seront aussi un peu modifis, selon leur distance par
rapport au neurone gagnant.

Manipulations
1. Examinons dune part la pondration radiale, qui dtermine (entre autres)
la correction apporte aux poids durant lapprentissage, en fonction de la
distance par rapport au neurone gagnant :
figure ;
r = -3:.1:3 ;
plot (r, exp(-r .^2))
Au facteur dchelle prs, il sagit videmment dune gaussienne, avec
2
= ------- . Ceci indique que les poids du neurone gagnant (situ x = 0 )
2
seront modifis dun facteur de 1, que les poids des neurones situs dans un
1

rayon de 1 autour du neurone gagnant ( x = 1 ) seront modifis de e ,


etc.

1. Il existe une variante de Kohonen qui calcule plutt le produit scalaire entre le vecteur dentre et les prototypes. Le rsultat final est le mme si le vecteur dentre et les
prototypes sont normaliss (amplitude unitaire des vecteurs).

Travaux Pratiques

Le principe de voisinage

175

2. Voyons si on retrouve cette dcroissance de la rponse sur la carte de


Kohonen. Pour la simplicit, nous reprendrons les donnes 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 rponse des 10 neurones aprs apprentissage
pour chacun des 16 chantillons. Autrement dit, si on fournit le premier
chantillon data(1,:) au rseau, on obtiendra en sortie de chaque
neurone les valeurs indiques dans rMap{1}
3. Faites tracer la rponse du rseau pour quelques vecteurs dentre (dune
fois lautre, changez seulement la valeur entre accolades) :
plot (1:10, rMap{1})
Labscisse de la figure indique la position de chaque neurone sur la carte de
Kohonen, et lordonne leur rponse respective pour le vecteur dentre.
O est situ le neurone gagnant pour ce vecteur ? Pour confirmation,
consultez la classe dappartenance du vecteur dentre dans la variable c, et
lendroit o est projet cette classe sur la carte dans la variable pMap.
Pourquoi la courbe est-elle inverse?
Vous remarquerez que la courbe de rponse nest pas exactement
une gaussienne (inverse), et quelle prsente mme certains artefacts. Plusieurs facteurs peuvent tre en cause, dont la taille de
la carte (encore petite pour bien discrtiser la courbe), le nombre ditrations, la fonction dapprentissage alpha, etc. Limportant, cest de voir que la forme gnrale de la gaussienne est
l, cest--dire que la rponse du rseau nest jamais strictement
locale.
4. Maintenant que vous avez compris ce que fait Kohonen, traduisons nos
courbes de rponse sous une forme plus expressive :

176

Les rseaux de neurones comptitifs

Chapitre 4

[c, p, pMap, rMap] =


som (data, mapsize, alpha, alpha,
datamap, 1) ;
La nouvelle fentre qui souvre illustre les rponses du rseau pour tous les
vecteurs dentre, de la mme faon que vous lavez fait auparavant, mais
selon une chelle de couleur cette fois. Lchelle droite de la figure
indique la distance mesure entre les poids du neurone (le prototype) et le
vecteur dentre.

LE RAYON DAPPRENTISSAGE
Puisquil sagit dune exponentielle inverse, la fonction de pondration
radiale nest jamais nulle, et possde un rayon daction infini. Lors de lapprentissage, les neurones de la carte seront donc tous affects par les vecteurs
dentre, mme sils sont trs loigns du neurone gagnant. Diffrentes considrations inspires des neurones biologiques incitent croire par contre que la
zone dinfluence devrait diminuer progressivement lors de lapprentissage.
Nous tenterons de vrifier la pertinence de cet argument.

Manipulations
Cette section et la suivante du TP utilisent des donnes qui ont t proposes
par (Ritter, & Kohonen, 1989)1 pour illustrer lalgorithme SOM. Les donnes
reprsentent les caractristiques de certains animaux, codes sur des vecteurs
binaires 13 bits. Le tableau 4.c prsente le code utilis.
Caractristique Position des bits

Taille de lanimal

1-3

Valeurs possibles
100

petit

010

moyen

001

gros

Tableau 4.c Vecteur des caractristiques de certains animaux.


1. Ritter, H. & Kohonen, T. (1989). Self-organizing semantic maps. Biological Cybernetics, 61, 241-254.

Travaux Pratiques

177

Le rayon dapprentissage

Caractristique Position des bits

Valeurs possibles
1XXXXX deux pattes
X1XXXX quatre pattes

Morphologie

4-9

XX1XXX poil
XXX1XX sabots
XXXX1X crinire
XXXXX1 plumes

Comportement

10-13

1XXX

aime chasser

X1XX

aime courir

XX1X

aime voler

XXX1

aime nager

Tableau 4.c Vecteur des caractristiques de certains animaux.


La matrice animals, dans le fichier du mme nom, contient dans lordre
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 rseaux de neurones comptitifs

11. Zbre

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 donnes en mmoire avec load animals.
2. Effectuez une premire classification de ces donnes 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 exprience, prenons le temps dexaminer les
cartes de rponses pour mieux apprcier lutilit de la carte de Kohonen. Par
exemple :
- Dans quelle partie de la carte sont projets les
oiseaux ?
-

Y a-t-il dans cette rgion de la carte dautres


animaux qui ne sont pas des oiseaux ?

Voyez-vous des sous-groupes ? Au sein des


oiseaux, cherchez par exemple o sont projets
les oiseaux de basse-cour et les oiseaux de proie.

Sur une feuille de papier, divisez la carte en 3 ou


4 rgions principales, puis identifiez quels animaux sont projets dans quelles rgions. Voyezvous une quelconque logique dans la disposition
des classes sur la carte, ou bien la rpartition des
classes est-elle compltement alatoire ?

Travaux Pratiques

Le rayon dapprentissage

179

On observe ici llment central de ce rseau, quon appelle en


anglais Self-Organizing Feature Map (SOFM). La disposition
des classes sur une carte de Kohonen nest jamais alatoire (si
lapprentissage est suffisant) : elle est amnage en fonction des
caractristiques existantes dans les donnes. La proximit physique des classes sur la carte exprime aussi une proximit smantique des donnes.
Bien que le rseau SOM soit un classificateur automatique, la
carte de Kohonen est souvent plus intressante que les classes
identifies par le rseau ! De par sa proprit de prservation
topologique, la carte aide linterprtation des donnes, et dgager la structure globale des donnes.
Continuons maintenant notre exprience sur le problme du rayon dapprentissage.
3. Prenons le cas extrme : nous indiquerons au rseau de mettre jour
seulement les poids du neurone gagnant. Il suffit dindiquer un rayon
dapprentissage toujours nul :
radius=zeros(1,500);
4. Dtail technique : pour que la prochaine simulation nefface pas la carte
actuelle, faites :
set (gcf, HandleVisibility, off)
5. Refaites finalement une classification des donnes avec ces contraintes :
som (animals, mapsize, alpha, alpha,
radius, radius, datamap, 1 ,
datatags, names) ;
Comment se compare la nouvelle carte avec lancienne? Les classes sontelles projetes au mme endroit? La carte est-elle aussi loquente?
Pour ce cas, la carte est semblable celle quon obtiendrait avec
un rseau comptitif quelconque ; seule diffrence avec ce genre
de rseau, la topologie est encore prserve, bien que moins
vidente.

180

Les rseaux de neurones comptitifs

Chapitre 4

Pour rsumer la question, le rayon dapprentissage nest rien


dautre quun seuil appliqu sur la gaussienne de pondration
radiale. Compte tenu des observations biologiques, le rayon
devrait tre large au dbut de lapprentissage, 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 limplmentation fournie en laboratoire, le rayon


dapprentissage r(t) est dcroissance linaire, mais il ne sagit
l que dune avenue par dfaut, qui ne prtend pas tre
optimale ; certains auteurs suggrent par exemple une
dcroissance en escalier, mais il ny a pas de solution unique. Il
peut aussi tre utile de contrler ltalement horizontal de la
courbe de pondration radiale.

LA FONCTION DAPPRENTISSAGE
Il nous reste un dernier phnomne tudier dans cette introduction, soit la
fonction dapprentissage (le paramtre alpha que vous utilisez depuis le dbut
du TP).
Vous savez que de nombreux rseaux neuroniques utilisent une constante
dapprentissage pour dterminer lampleur de la correction effectuer sur les
poids. Ce principe apparat aussi avec le rseau de Kohonen, sauf que cette
constante varie dans le temps; do le nom de fonction dapprentissage.

Travaux Pratiques

181

La fonction dapprentissage

La fonction dapprentissage (t) contrle lamplitude verticale de la courbe


de pondration radiale. Par exemple, pour une fonction dapprentissage
linaire, on aurait :
(t)

etc.
t0

t1

t2

Manipulations
1. Vrifions leffet de la fonction dapprentissage sur la carte de Kohonen.
Nous utiliserons la fonction par dfaut de limplmentation, soit une
fonction linaire :
som (animals, mapsize, epochs, 500,
datamap,1,datatags, names);
En labsence dun paramtre dentre alpha ou radius, rien nindique la
fonction le nombre dpoques souhaites ; do lintroduction du paramtre
epochs. Pour mieux comparer le rsultat avec lancienne carte, nous
gardons le mme nombre dpoques quauparavant, soit 500.
Comment se compare la nouvelle carte avec lancienne? La topologie estelle prserve? Comment interprtez-vous ce que vous observez?
Pour ce cas, le rseau est moins nuanc dans son jugement.
Un avantage possible de ce genre dapprentissage serait dobtenir des classes et sous-classes plus strictes, moins fuzzy .
Comme pour la fonction qui contrle la dcroissance du rayon
dapprentissage (la fonction de seuillage radial), il ny a pas de
rgle absolue pour dterminer la meilleure fonction dapprentissage. Plusieurs auteurs mentionnent que la fonction dapprentissage devrait tre leve au dbut, dcrotre ensuite, puis
demeurer longtemps une valeur faible. Il sagit seulement
dune rgle empirique, et qui reprend le principe dune classification grossire au dbut de lapprentissage, puis dune classifi-

182

Les rseaux de neurones comptitifs

Chapitre 4

cation plus subtile lorsque les principaux lments sont placs


sur la carte.
2. Pour faire tracer la fonction dapprentissage gomtrique que vous avez
utilise 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 dailleurs lopportunit dexprimenter la classification de ces chiffres
manuscrits avec divers modles de rseaux de neurones afin dillustrer les capacits de classification de ces divers rseaux.
1. Chargez la base de chiffres manuscrits :
load digits
2. Les vecteurs de donnes tant constitus de 100 bits, il est suggr
dobserver la carte de Kohonen seulement pour les chiffres 0, 1 et 2 afin de
rduire 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 donnes ? Voyez-vous pourquoi
certains individus dune classe convergent vers le prototype dune autre
classe? Comment utiliseriez-vous la carte de Kohonen dans une application
de reconnaissance de caractres manuscrits?