NEURBOOK_HOME
INTRODUZIONE
CAPITOLO 1 * ESEMPIO DI MEMORIA ASSOCIATIVA
CAPITOLO 2 * RETI NEURALI ERROR BACK PROPAGATION
CAPITOLO 3 * APPLICAZIONI PRATICHE DI UNA RETE NEURALE EBP
CAPITOLO 4 * RETI NEURALI AUTOORGANIZZANTI
CAPITOLO 5 * FUZZY LOGIC LA TEORIA DEL RAGIONAMENTO SFUMATO
CAPITOLO 6 * NEURFUZZ 1.0
CAPITOLO 7 * GUIDA AL FLOPPY DISK
CAPITOLO 8 * GUIDA AL SOFTWARE
BIBLIOGRAFIA

ESEMPIO DI MEMORIA ASSOCIATIVA

In questo capitolo vedremo brevemente il funzionamento di una memoria associativa realizzata in linguaggio c e contenuta nel dischetto in forma eseguibile. La rete è in grado di apprendere una associazione di immagini a coppie realizzate su files ascii con i caratteri "*" e "spazio" che rappresentano rispettivamente pixel acceso e pixel spento. Questa rete è una rete ciclica poichè presenta delle connessioni bidirezionali,cioè gli output ritornano in "retroazione" sugli input (fig.1).
Un sistema retroazionato può presentare differenti comportamenti:


1)si produce una variazione continua dell output tale che il sistema "esplode": si dice che è un sistema non convergente.

2)l output del sistema continua ad oscillare all infinito e quindi non converge anche in questo caso.

3)l output converge verso un determinato valore o verso una determinata configurazione dimostrando che il sistema è a tutti gli effetti una "macchina deterministica".

Quindi, da una rete neurale ciclica ci aspettiamo un comportamento come quello descritto al punto 3: la rete, in risposta ad un input, avrà un certo numero di oscillazioni prima di raggiungere uno stato di stabilità che coinciderà con una risposta in output. Il programma della memoria associativa contenuto nel dischetto si chiama associa.exe, ed è un programma esclusivamente didattico/dimostrativo: contiene una memoria associativa tipo BAM(Bidirectional Associative Memory).

  
                   Regola di apprendimento


La formula di addestramento utilizzata 
in questa memoria associativa è la
regola di Hebb:
                          DW(j,k)=P(j)*P(k)*t


dove  
        deltaW(j,k) = variazione del peso di connessione 
                      tra il neurone j e il neurone k
        P(j)=output del neurone j
        P(k)=output del neurone k
        t=fattore o tasso di apprendimento

Questa regola si può spiegare in questi termini: aumenta il peso che connette due neuroni in modo proporzionale al prodotto degli output da loro forniti per un determinato input. Non è una regola universalmente valida ed è applicabile solo per particolari tipi di reti neurali,come quella di cui parliamo in questo capitolo. Esistono diversi tipi di regole di apprendimento destinate a scopi specifici,come la regola delta (dalla quale deriva la retropropagazione dell errore di cui parleremo approfonditamente), o la regola di Kohnen: voglio sottolineare che la regola di apprendimento è il punto critico di ogni rete neurale al di là della architettura sulla quale viene applicata.




ASSOCIA.EXE

Il programma associa.exe è in grado di memorizzare la associazione di coppie di immagini realizzate con files tipo ascii. Per comodità si possono usare immagini di lettere e numeri e associare in fase di addestramento lettere minuscole con corrispondenti lettere maiuscole o lettere con numeri. Il programma presenta il seguente menù:

a) apprendimento
b) esecuzione
c) display immagine input
d) display immagine output
e) set dimensionale immagine
f) load pesi sinaptici da file
g) store pesi sinaptici su file
h) editor(per creare immagini)
i) edit su matrice dei pesi
l) mappare semigraficamente matrice pesi su file
m) calcolo automatico della distanza di Hamming
n) terminazione programma

Utilizzando la funzione edit disegnate su files le immagini che vi interessano utilizzando i caratteri spazio(pixel spento) e "*"(pixel acceso)(vi sono sul dischetto immagini di lettere già preparate che potete seguire come esempio). Effettuate la fase di apprendimento fornendo i nomi dei due files da associare e provate il richiamo con la funzione "esecuzione". Provate poi il richiamo modificando leggermente qualche pixels dell immagine di input: potrete vedere come output l immagine corretta associata. In questo punto sta il vero significato di una memoria associativa realizzata con una rete neurale: una associazione tra due immagini potrebbe essere realizzata con un qualsiasi semplice algoritmo, ma una leggera imprecisione nei dati di input non porterebbe ad una risposta corretta.La rete neurale è in grado di essere insensibile al rumore presente nell input e risalire all immagine di input corretta, partendo da quella rumorosa, per poi fornire come output l immagine associata. Abbiamo realizzato un robusto sistema di accesso alla memoria per contenuto e non per indirizzo.Provate a visualizzare l immagine di input con "c" dopo avere eseguito la rete con un input rumoroso e vedrete che l'immagine è stata corretta sui neuroni del primo strato della rete dai cicli dovuti ai segnali di riporto dall'output. Potete addestrare la rete neurale con altre coppie di immagini e verificare in esecuzione, ma noterete che la capacità di memoria è molto limitata per cui dopo quattro o cinque coppie cominceranno malfunzionamenti. La funzione di trasferimento di ogni neurone di questa rete è del tipo a gradino(fig.2). Una rappresentazione schematica della rete è visibile in fig.1 dove si possono notare due strati di neuroni in cui i neuroni di ogni strato sono tra loro scollegati,mentre sono collegati i neuroni di strati differenti.La funzione di trasferimento va intesa come bidirezionale:

feedforward (ciclo input>output) backforward(ciclo di retroazione)

U(k)= -1 se SI(k)<0 U(k)=-1 se SI(k)<0

U(k)= +1 se SI(k)>=0 U(k)=+1 se SI(k)>=0

dove U(k)=uscita o attivazione del neurone k e SI(k)=sommatoria degli inputs del neurone k

La rete in esecuzione oscilla finchè non è stato verificato uno stato di stabilità che corrisponde all assenza di variazioni di attivazione di ogni neurone della rete. In una realizzazione software si devono utilizzare alcune semplici procedure:

1) caricamento dei dati input nei neuroni del primo strato (vettore int) da file (pixels immagine)

2) visualizzazione dello stato dei neuroni del secondo strato(vettore int) mappati sull immagine

3) procedura apprendimento contenente regola di Hebb

4) procedura esecuzione che cicla finchè non viene verificata la stabilità

Tralasciamo le procedure 1 e 2 che dipendono dall utilizzo specifico della rete che può essere differente dall associazione di immagini e, comunque, è abbastanza banale per un programmatore realizzare una procedura che porti i dati da un file grafico o di testo su un vettore binario (perchè la rete accetta in input solo valori 0 o 1),o che visualizzi i dati binari contenuti in un vettore in forma grafica. Vediamo invece più in dettaglio la realizzazione delle funzioni di apprendimento ed esecuzione:


 note: peso[k][j] =peso del collegamento 
                   tra il k_esimo neurone del primo strato
                   e il j_esimo neurone del secondo strato
       A[j]= somma dei segnali di ingresso del j_esimo neurone
       U[j]= uscita del j_esimo neurone


apprendimento() { carica i dati input nel vettore neuroni primo strato di dimensione k carica i dati da associare nel vettore neuroni secondo strato di dimensione j per ogni neurone output(j) { per ogni input(k) { peso [k][j]=peso[k][j] + input[k]*output[j] (regola di Hebb) } } return }

esecuzione() { carica i dati di input nel vettore input di dimensione k finchè non è verificato stabilità=vero { stabilità=vero dall input verso l output: per ogni neurone output(j) { per ogni neurone input(k) { A2(j)=A2(j)+U1(k) * peso[j][k] } if (A2(j)>=0) then U2(j)=1 (funzione di trasferimento del neurone) else U2(j)=-1 } dall output verso l input(retroazione): per ogni neurone input(k) { per ogni neurone output(j) { A1(k)=A1(k)+U2(j) * peso[j][k] } if((A1(k)<0 and U1(k)=1) or (A1(k)>=0 and U1(k)=-1)) then stabilità=falso (cambiamento) if (A1(k)>=0) then U1(k)=1 (funzione di trasferimento del neurone) else U1(k)=-1 } } (chiude il ciclo verifica stabilità) return }

ALTRE FUNZIONI DI ASSOCIA.EXE

Per misurare la resistenza al rumore della rete potete modificare i files che contengono le immagini di input, un pixel alla volta e presentarle in esecuzione. Quando avete il primo risultato scorretto calcolate la distanza di Hamming* tra l immagine rumorosa e l immagine originale:questa può essere una misura della resistenza al rumore di questa memoria associativa. Con questo programma è possibile editare il file di pesi delle connessioni tra i neuroni, cambiandone qualcuno per simulare un "guasto neuronale" (che potrebbe esistere in una implementazione hardware di rete neurale).

LIMITI DI QUESTA MEMORIA ASSOCIATIVA

I grandi limiti di questa memoria associativa sono:
-scarsa capacità di memoria
-possibilità di lavorare con soli inputs booleani (0-1)
-necessità di avere dati di input tutti ortogonali tra loro: questo significa, per esempio nel caso di immagini, che circa la metà dei pixels di ogni immagine devono essere differenti da quelli di tutte le altre immagini. Anche in questo caso è possibile calcolare la ortogonalità delle immagini con la distanza di Hamming: per funzionare bene la nostra memoria associativa richiede immagini che abbiano tra loro distanze di Hamming comprese tra 0.40 e 0.60.

*distanza di Hamming= S(k) |px(k) - py(k)| cioè sommatoria dei moduli della differenza pixel - pixel di due immagini


RETI NEURALI SU PERSONAL COMPUTER + FUZZY LOGIC
marchese@mbox.ulisse.it