Prof. Beatrice Lazzerini Self-organizing feature maps Prof. Beatrice Lazzerini Self-organizing feature maps SELF-ORGANIZING FEATURE MAPS Una self-organizing feature map (introdotta da T. Kohonen) è costituita da uno strato bi-dimensionale di neuroni collegati ad un insieme comune di ingressi. La posizione di ogni neurone nella mappa è individuata dalle sue coordinate. SELF-ORGANIZING FEATURE MAPS FEATURE MAP ... Prof. Beatrice Lazzerini Dipartimento di Ingegneria dell’Informazione Via Diotisalvi 2, 56122 Pisa n INGRESSI ... ... Ogni vettore di ingresso “eccita” un gruppo locale di neuroni. La mappa si auto-organizza nel senso che, dopo una fase di apprendimento non supervisionato, che prevede la presentazione di un insieme di ingressi alla rete, le posizioni spaziali dei gruppi di neuroni eccitati della mappa rappresentano una mappa topologica dei vettori di ingresso. Questo significa che le relazioni di distanza nello spazio n-dimensionale degli ingressi sono rappresentate approssimativamente da relazioni di distanza sulla mappa neurale bi-dimensionale. La mappa neurale è un reticolo bi-dimensionale di neuroni. La risposta di un neurone nella posizione l del reticolo è il prodotto scalare: yl = X ⋅Wl = X Wl Cos ϑ del vettore di ingresso X e del vettore dei pesi Wl del neurone. ϑ è l’angolo compreso tra X e Wl. I pesi Wl sono i pesi sulle connessioni tra gli ingressi e il neurone. I vettori di ingresso sono normalizzati a lunghezza unitaria (i pesi possono non essere normalizzati in maniera esplicita poiché, come vedremo, il processo di apprendimento prima o poi li normalizzerà). Il processo di apprendimento prevede, a fronte della presentazione di un ingresso X, di modificare i pesi dei neuroni vicini alla posizione m del 1 2 Prof. Beatrice Lazzerini Self-organizing feature maps reticolo per cui la risposta X ⋅Wm è massima. Più precisamente, i pesi vengono modulati in funzione della distanza dei neuroni da m. A tale scopo si utilizza una funzione hlm, che assume valori maggiori per posizioni l vicine ad m; di solito è una gaussiana: l −m hlm = exp − σ2 2 la cui varianza σ 2 / 2 controlla il raggio del gruppo di neuroni eccitati. Le variazioni dei pesi in seguito alla presentazione dell’ingresso X sono definite come segue: Prof. Beatrice Lazzerini Self-organizing feature maps metodo può essere usato sia in caso di vettori normalizzati (nel qual caso equivale al metodo precedente), sia in caso di vettori non normalizzati. Visualizzazione delle feature maps Esistono due metodi per visualizzare una feature map. Nel primo metodo ogni neurone è etichettato con il pattern di test che lo eccita maggiormente. In questo modo si realizza una partizione del reticolo in regioni ciascuna delle quali contiene neuroni che sono specializzati a riconoscere lo stesso pattern. Nel secondo metodo (esemplificato nella figura sottostante), la mappa è visualizzata come una rete virtuale nello spazio degli ingressi. Wl new = Wl old + α hlm ( X − Wl old ) = (1 − α hlm ) Wl old + α hlm X , con α ∈(0,1) . Wl old ∆W X − W old l Wl new X ∆W =α hlm ( X −Wl old ) La funzione hlm definisce, quindi, un vicinato del punto m all’interno del quale i pesi dei neuroni vengono adattati in modo decrescente con la distanza da m. In particolare, i vettori dei pesi dei neuroni del vicinato vengono avvicinati al vettore di ingresso. Di consequenza, neuroni “vicini” tenderanno a specializzarsi a riconoscere ingressi simili. Questa specializzazione permetterà, alla fine del processo di apprendimento, di definire il mapping tra lo spazio degli ingressi e lo spazio discretizzato della mappa: ogni vettore X sarà mappato nella locazione m associata al neurone per cui X ⋅Wm è massimo. Tale neurone è detto neurone vincitore. Una variante dell’algoritmo specificato sopra consiste nel determinare il neurone vincitore minimizzando la distanza euclidea X − Wm . Questo 3 La rete virtuale è costituita sia dall’insieme dei vettori dei pesi (rappresentati come punti nello spazio degli ingressi), sia da linee che connettono coppie di pesi (Wi,Wj) associati a neuroni i e j che sono vicini nel reticolo. La rete virtuale permette di visualizzare l’ordinamento topologico della mappa. Ovviamente questo metodo può essere usato solo per spazi al massimo tri-dimensionali. 4 Prof. Beatrice Lazzerini Self-organizing feature maps Applicazioni delle feature maps Le feature maps sono usate per varie applicazioni che includono le seguenti: - clustering: suddivisione di un insieme di dati in una collezione di classi, o cluster, contenenti pattern simili; - compressione di immagini: conversione di un’immagine con milioni di colori in un’immagine compressa, ad esempio, con 256 colori. Prof. Beatrice Lazzerini Self-organizing feature maps RETI COMPETITIVE E MAPPE AUTO-ORGANIZZANTI IN MATLAB I neuroni di una rete competitiva imparano a riconoscere gruppi di vettori di ingresso simili. Le mappe auto-organizzanti imparano a riconoscere gruppi di vettori di ingresso simili in modo tale che neuroni fisicamente vicini nella mappa rispondono a vettori di ingresso simili. In altri termini, le mappe auto-organizzanti imparano sia la distribuzione (come fanno le reti competitive) sia la topologia dei vettori con cui sono addestrate. RETI COMPETITIVE L’architettura di una rete competitiva è la seguente: Il blocco ndist produce un vettore i cui elementi sono la distanza negativa tra il vettore di ingresso p e i vettori dei pesi costituiti dalle righe della matrice IW. L’attivazione di un neurone competitivo è ottenuta sommando al vettore prodotto da ndist il vettore dei bias b. Osserviamo che se tutti i bias fossero zero, la massima attivazione che un neurone potrebbe avere è zero. Tale situazione si verifica quando il vettore di ingresso p coincide con il vettore dei pesi del neurone. La funzione di trasferimento competitiva C riceve in ingresso il vettore delle attivazioni dei neuroni e restituisce un vettore che contiene tutti zeri escluso un 1 in corrispondenza del neurone vincitore, ovvero il neurone con l’attivazione “più positiva”. Se tutti i bias sono zero, il neurone che ha 5 6 Prof. Beatrice Lazzerini Self-organizing feature maps il vettore dei pesi più vicino al vettore di ingresso ha l’attivazione “meno negativa”, e quindi vince la competizione. Prof. Beatrice Lazzerini Self-organizing feature maps ovvero la rete è addestrata per classificare gli input in due classi: quelli vicino all’origine (classe 2) e quelli vicini a (1,1) (classe 1). Creazione di una rete neurale competitiva Può essere interessante vedere i valori finali dei pesi: Una rete neurale competitiva si crea con la funzione newc: >> net.iw{1,1} net = newc(pr,s,klr,clr) dove: ans = 0.8031 0.1536 pr = matrice Rx2 dei valori minimi e massimi per gli R elementi di ingresso s = numero di neuroni klr = Kohonen learning rate, default = 0.01 clr = conscience learning rate, default = 0.001. I pesi sono inizializzati ai valori centrali dei range di variazione degli ingressi con la funzione midpoint. I bias sono inizializzati con la funzione initcon. 0.8031 0.1969 Il primo peso (prima riga della matrice dei pesi è vicino agli ingressi prossimi a (1,1), mentre il secondo è vicino agli ingressi prossimi a (0,0). Ovviamente si possono ottenere valori leggermente diversi poiché l’ordine in cui vengono presentati alla rete i vettori di addestramento è casuale. Graficamente si ottiene la seguente situazione: Esempio Vogliamo dividere in due classi quattro vettori bi-dimensionali: p = [.1 .8 .1 .9; .2 .9 .1 .8]; plot(p(1,:),p(2,:),'+'); axis([0 1 0 1]); net = newc([0 1; 0 1],2); net = train(net,p); y = sim(net,p); yc = vec2ind(y) % converte il vettore y in indici di classi (gli indici delle % classi sono le posizioni in cui le colonne di y contengono ‘1’) Osserviamo che una rete competitiva puó essere addestrata sia con train che con adapt. Con riferimento al codice precedente, si ottiene, ad esempio: yc = 2 1 2 1 7 8 Prof. Beatrice Lazzerini Self-organizing feature maps Il simbolo ‘+’ rappresenta un input mentre il simbolo ‘.’ Rappresenta un peso. Legge di apprendimento di Kohonen (learnk) I pesi del neurone vincitore sono modificati con la regola di apprendimento di Kohonen (realizzata dalla funzione learnk): IW(i,:)new = IW(i,:)old + α (p - IW(i,:)old) (abbiamo supposto che il vincitore sia il neurone i). Il vettore dei pesi del neurone vincitore (che già era il più vicino al vettore di input) viene avvicinato ancora di più all’input in modo che aumenti la probabilità del neurone stesso di vincere in caso di presentazione in ingresso di un vettore simile. Alla fine, se ci sono abbastanza neuroni, ogni cluster di vettori di ingresso simili avrà un neurone la cui uscita è 1 a fronte della presentazione di un vettore del cluster e zero in tutti gli altri casi. Legge di apprendimento dei bias (learncon) Una delle limitazioni delle reti competitive è il fatto che potrebbero esserci neuroni, detti dead neurons, che non vincono mai la competizione. Questo potrebbe accadere quando i vettori dei pesi di tali neuroni partono con valori molto distanti dai vettori di ingresso. Per risolvere questo problema in Matlab si usano i bias. Più precisamente, per ogni neurone si mantiene la media delle sue uscite (che equivale alla percentuale di uscite = 1 del neurone). Tale media è usata dalla funzione learncon per aggiornare i bias in modo che i bias di neuroni frequentemente attivi diminuiscano mentre i bias di neuroni raramente attivi aumentino. Quest’ultimo fatto fa sì che, all’aumentare del bias, un neurone inizialmente poco attivo cominci a rispondere ad un numero sempre crescente di vettori di input fino a che tutti i neuroni risponderanno più o meno allo stesso numero di input. Tra l’altro, come conseguenza, si ha che se una regione dello spazio di input ha un maggior numero di vettori presentati in ingresso rispetto ad un’altra regione, la prima regione attrarrà più neuroni e sarà classificata in sottoregioni più piccole rispetto alla seconda. 9 Prof. Beatrice Lazzerini Self-organizing feature maps MAPPE AUTO-ORGANIZZANTI Le mappe auto-organizzanti (self-organizing feature maps, o SOFM, per brevità) differiscono dalle reti competitive per il fatto che neuroni vicini nella mappa imparano a riconoscere zone vicine nello spazio di input. In tal modo, come detto precedentemente, le mappe auto-organizzanti imparano sia la distribuzione (come fanno le reti competitive) sia la topologia dei vettori con cui sono addestrate. I neuroni di una SOFM sono originariamente organizzati in accordo ad una certa topologia. Le funzioni gridtop, hextop e randtop organizzano i neuroni secondo una topologia a griglia, esagonale o casuale, rispettivamente. Le distanze fra neuroni sono calcolate con una delle seguenti funzioni: dist (distanza euclidea), boxdist, linkdist e mandist (spiegate nel seguito). Il neurone vincitore è individuato con la stessa procedura usata dalle reti competitive. Comunque, oltre al vincitore, vengono aggiornati i pesi di tutti i neuroni all’interno del vicinato del vincitore. La regola di aggiornamento usata è la regola di Kohonen. Non viene peraltro fatto uso di bias. Il vicinato di un neurone include i neuroni che giacciono all’interno di un certo raggio d dal neurone. La figura sottostante mostra due vicinati bidimensionale di raggio d=1 e d=2, rispettivamente, intorno al neurone 13. TOPOLOGIE • Griglia rettangolare pos = gridtop(2,3) pos = 0 1 0 1 % array di 2x3 neuroni 0 1 10 Prof. Beatrice Lazzerini 0 0 1 Self-organizing feature maps 1 2 2 Prof. Beatrice Lazzerini • Nella griglia il neurone 1 ha posizione (0,0), il neurone 2 ha posizione (1,0), il neurone 3 ha posizione (0,1), etc. Self-organizing feature maps Griglia esagonale La topologia esagonale è la topologia di default. pos = hextop(8,10); plotsom(pos) Ad esempio, un insieme di 8x10 neuroni con topologia a griglia può essere creato e visualizzato come segue: pos = gridtop(8,10); plotsom(pos) 11 12 Prof. Beatrice Lazzerini • Self-organizing feature maps Prof. Beatrice Lazzerini Self-organizing feature maps 1.0000 1.4142 0 1.0000 1.0000 1.4142 1.4142 1.0000 1.0000 0 1.4142 1.0000 2.0000 2.2361 1.0000 1.4142 0 1.0000 2.2361 2.0000 1.4142 1.0000 1.0000 0 Griglia casuale pos = randtop(8,10); plotsom(pos) La funzione boxdist calcola la distanza come esemplificato dalla seguente figura che si riferisce ad una topologia a griglia: Quindi : FUNZIONI DI DISTANZA Esistono quattro funzioni per calcolare la distanza fra un neurone e i suoi vicini. La funzione dist calcola la distanza euclidea. pos = gridtop(2,3) pos = 0 1 0 1 0 0 0 1 1 2 d = boxdist(pos) d= 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 2 2 1 1 2 2 1 1 2 2 1 1 0 1 2 2 1 1 1 0 La distanza tra il neurone 1 e i neuroni 2, 3 e 4 è 1, poiché questi ultimi sono nell’immediato vicinato. La distanza tra il neurone 1 e i neuroni 5 e 6 è 2. La distanza dei neuroni 3 e 4 da tutti gli altri neuroni è 1. 1 2 La funzione linkdist calcola la distanza come numero di passi per raggiungere il neurone considerato. d=dist(pos) d= La funzione mandist calcola la distanza di Manhattan. Dati due vettori x e y, la loro distanza di Manhattan è sum(abs(x-y)). 0 1.0000 1.0000 1.4142 2.0000 2.2361 1.0000 0 1.4142 1.0000 2.2361 2.0000 13 14 Prof. Beatrice Lazzerini Self-organizing feature maps Addestramento di una mappa auto-organizzante Prof. Beatrice Lazzerini Self-organizing feature maps Visualizzazione di un esempio di addestramento L’addestramento di una mappa auto-organizzante si verifica per un vettore di input alla volta. Per prima cosa, viene individuato il neurone vincitore. Poi i pesi del vincitore e dei suoi vicini sono avvicinati al vettore di input: i pesi del vincitore sono modificati in modo proporzionale al learning rate, mentre i pesi dei vicini sono modificati in modo proporzionale a metà del learning rate. Sia il learning rate che la distanza che determina il vicinato sono alterati durante l’addestramento attraverso due fasi: ordering phase e tuning phase. Fase 1: ordering phase Questa fase dura un determinato numero di passi. La distanza del vicinato è inizializzata alla massima distanza tra due neuroni e decresce fino a raggiungere il valore della distanza della fase 2 (tuning neighborhood distance). Il learning rate parte da un determinato valore (ordering-phase learning rate) e decresce fino a raggiungere il valore del tuning-phase learning rate. Mano a mano che la distanza del vicinato e il learning rate decrescono durante questa prima fase, i neuroni della rete tipicamente si ordinano nello spazio degli ingressi con la stessa topologia con cui sono ordinati fisicamente. Fase 2: tuning phase Questa fase dura per il resto dell’addestramento. La distanza del vicinato rimane al valore “tuning neighborhood distance” (che dovrebbe includere solo i vicini stretti (tipicamente tale valore è 1)). Il learning rate continua a diminuire, ma molto lentamente. In questo modo si effettua una sintonizzazione fine della rete, mantenendo stabile l’ordinamento imparato nella fase precedente. Di solito, il numero di epoche necessarie per la sintonizzazione fine è superiore a quello dell’ordinamento. 15 16 Prof. Beatrice Lazzerini Self-organizing feature maps Prof. Beatrice Lazzerini Self-organizing feature maps plotsom(net.layers{1}.positions); % mostra le posizioni dei neuroni net.trainParam.epochs = 25; net = train(net,p); plot(p(1,:),p(2,:),'.g','markersize',20) % disegna gli ingressi con punti verdi hold on plotsom(net.iw{1,1},net.layers{1}.distances) % mostra le posizioni dei pesi connettendo i pesi relativi % a neuroni che sono a distanza 1 hold off Si ottiene, ad esempio: Creazione di una mappa auto-organizzante Una mappa auto-organizzante si crea con la funzione newsom: net = newsom(pr,[d1,d2,...],tfcn,dfcn,olr,osteps,tlr,tnd) dove: pr = matrice Rx2 dei valori minimi e massimi per gli R elementi di ingresso di (i=1,2,…) = size of ith layer dimension, defaults = [5 8] tfcn: topology function, default = 'hextop' dfcn: distance function, default = 'linkdist' olr: ordering phase learning rate, default = 0.9 osteps: ordering phase steps, default = 1000 tlr: tuning phase learning rate, default = 0.02 tnd: tuning phase neighborhood distance, default = 1 Esempio Creiamo una rete auto-organizzante con vettori di input di due elementi nel range [0 2] e [0 1], rispettivamente. Supponiamo che la rete abbia 6 neuroni organizzati con topologia 2x3 esagonale. p = [rand(1,40)*2; rand(1,40)]; net = newsom([0 2; 0 1],[3 5]); 17 18