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


DOWNLOAD FLOPPY DISK
from
Walnut Creek CDROM


GUIDA AL FLOPPY DISK

CAPITOLO N.1

Nella directory "cap.1" sono presenti i seguenti files:

-associa.c: sorgente in codice C del programma dimostrativo associa.exe

-associa.exe: programma dimostrativo che simula una memoria associativa tipo b.a.m (bidirectional associative memory).

-a.min, a.cap, b.min, b. cap, c.min, c.cap: sono files ascii che contengono le "immagini" di lettere dell'alfabeto che possono essere associate.

Per associare le immagini è sufficiente eseguire la funzione apprendimento e fornire i nomi dei files che si vogliono associare come img.x(input) e img.y (output). Dopo un ciclo di apprendimento si può effettuare una esecuzione della rete fornendo come input la immagine usata come img.x in apprendimento. Si può visualizzare l'immagine y (output) che la rete ha fornito come "immagine associata" all input. Possono essere modificati i files delle immagini di input in modo da inserire del "rumore": dopo una esecuzione della rete con un input rumoroso si può constatare, tramite la funzione di visualizzazione dell immagine x, che lo stesso contenuto dell input è stato corretto dai cicli di retroazione della rete. Questo programma contiene anche una funzione per calcolare la distanza di Hamming tra due immagini, nel formato ascii proposto, come spiegato nel capitolo.

CAPITOLO N.2

Nella directory cap.2 si trovano i seguenti files:

-backprop.c: sorgente in linguaggio C della rete neurale error back propagation backprop.exe.

-backprop.exe: programma di simulazione di una rete neurale a retropropagazione dell errore con due strati nascosti.

-profil.lrn: file contenente gli esempi di addestramento della rete inerenti al problema "giocattolo" del riconoscimento di profili altimetrici: un esempio è raffigurato in tab.1.

-profil.val: file contenente gli esempi del validation set necessari alla verifica della capacità di generalizzazione della rete dopo l'apprendimento.

-profil.wgh: contiene i valori sinaptici della rete dopo un addestramento sul file profil.lrn e può essere direttamente caricato con la funzione "load" (la rete risulta come addestrata).


TAB.1


0.345 cinque valori input=monte
0.480
0.897
0.389
0.123
1 monte
0 valle
0 pendenza +
0 pendenza -
0 piano


La prima operazione che bisogna eseguire è quella di definire il numero di inputs e outputs(determinati dal problema) e il numero di neuroni per ognuno degli strati hidden: nel capitolo è stato presentato un esempio in cui si sono utilizzati cinque neuroni per ogni strato hidden. Il problema dei profili altimetrici nel file profil.lrn presenta cinque inputs ma si possono creare altri files con più inputs e per problemi differenti. Dopo tale passo si può procedere all'addestramento fornendo il nome del file contenente gli esempi, il valore desiderato per il tasso di apprendimento (consigliabile intorno a 0.5), il numero di epoche che devono essere eseguite senza pausa e il valore di errore che si desidera raggiungere (esempio target error =0.03 indica errore del 3%). Una volta raggiunto l'errore desiderato si può testare la rete inserendo dei dati nel file di input: tramite l'editor interno si editi il file "net.in" inserendo dei dati inerenti all'addestramento come mostrato in tab.2.


TAB.2

esempio di file input con un profilo altimetrico a cinque valori che rappresenta un "monte".

0.2
0.4
0.8
0.5
0.2


Dopo avere salvato il file net.in ed eseguito la rete con la funzione "exec" si può editare il file "net.out" per verificare il risultato. Quando è stato terminato un valido addestramento è bene salvare il contenuto dei collegamenti sinaptici in un file che potrà essere ricaricato in ogni momento senza dover ripetere il processo di apprendimento: le funzioni "save" e "load" permettono, rispettivamente, queste due operazioni.

CAPITOLO 3

Il capitolo 3 utilizza ancora il programma Backprop ma fornisce nuovi e più interessanti files di addestramento che rivelano le capacità sorprendenti di una rete neurale multistrato come questa. I files contenuti nella directory cap.3 del dischetto sono:

-backprop.exe: è lo stesso programma del cap.2

-sin_gen.c: sorgente in linguaggio C del programma sin_gen.exe.

-sin_gen.exe: programma che genera files contenenti valori che descrivono sinusoidi e funzioni derivate dalla somma di sinusoidi: una delle due funzioni è periodica mentre l'altra è aperiodica perchè una delle due sinusoidi componenti ha periodo incommensurabile.

-period.lrn, aperiod.lrn, compon1, compon2: sono files generati con il programma sin_gen.

CAPITOLO 4

In questo capitolo sono trattate le reti neurali autoorganizzanti e nel dischetto, nella directory cap.4, è contenuta una simulazione di una rete classificatrice autoorganizzante. Complessivamente sono contenuti i seguenti files:

-som.c: file sorgente in linguaggio C del programma som.exe

-som.exe: simulazione di una rete autoorganizzante costruita sulla base di una rete di Kohonen con alcune variazioni che non ne modificano, comunque, la struttura fondamentale.

-profil.lrn: è un file di addestramento per la rete "som" relativo al problema visto nel capitolo 2 del riconoscimento di profili altimetrici.

Come potrete notare il file contiene esempi di cinque valori di altitudine disposti consecutivamemente, senza nessun valore di output desiderato: il training set di una rete autoorganizzante come questa non deve contenere valori di output desiderato come invece avviene nei training set di reti ad apprendimento supervisionato(tab.3).

-profil.val: contiene gli esempi di validazione dell apprendimento. Viene comunemente chiamato validation.set e il programma "som" inizia a testare l apprendimento appena terminato(completate le iterazioni sul training set) con gli esempi contenuti in questo file.


TAB.3

0.956 cinque valori esempio 1
0.767
0.486
0.800
0.900
0.300 cinque valori esempio 2
0.400
0.500
0.600
0.700


Eseguendo il programma "som" vengono richiesti il nome del file di addestramento, il nome del file di validazione, il numero di inputs(in questo caso sono cinque) e il numero di "iterazioni" che si vuole far compiere all algoritmo di addestramento. Con un file così semplice e una rete così piccola (100 neuroni sulla griglia output) sono sufficienti poche iterazioni(5-10) per creare una traccia nei pesi sinaptici.Terminata l'ultima iterazione sul file contenente il training set(es profil.lrn) il programma inizia una fase di test con gli esempi contenuti nel validation.set(es profil.val).In fase di test è visibile la matrice 10x10 dei neuroni di output con un simbolo "*" sul neurone winner(vincente). Sul lato sinistro del video compare l'insieme dei valori dell'input pattern e ciò vi permette di verificare su quali neuroni vengono "classificati" i vari patterns. Con poche iterazioni sono stati ottenuti i risultati di fig.1. Bisogna notare che il problema del riconoscimento di profili altimetrici presenta, per il tipo di rete che abbiamo realizzato, il problema del "pattern piano" che richiederebbe la modifica della legge di trasferimento dei pattern di input sull output. Nella rete realizzata con il sistema classico si effettua una moltiplicazione vettoriale del vettore di input con il vettore dei pesi che connettono l'input con l output: è evidente che la moltiplicazione di due vettori con forme simili porta ad un vettore in cui la somma degli elementi è più elevata.

Esempio:

1) monte / monte

input(0.2-0.4-0.5-0.2-0.1)* pesi(0.3-0.4-0.6-0.4-0.3)=

=(0.06-0.16-0.3-0.08-0.03)

e output=S(0.06,0.16,0.3,0.08,0.03)=0.63

2) monte / valle

input(0.2-0.4-0.5-0.2-0.1)* pesi(0.6-0.4-0.3-0.4-0.6)=

=(0.12-0.16-0.15-0.08-0.06)

e output=S(0.12,0.16,0.15,0.08,0.06)=0.57

Da questo esempio risulta evidente che il pattern piano si pone in una situazione di neutralità tra le varie forme e potrà pertanto essere clssificato in neurodi di output appartenenti ad altre classi e viceversa. Per una soluzione efficace del problema di pofili altimetrici come quello esposto, con una rete autoorganizzante si può intervenire con le seguenti azioni:

1)modificare il trasferimento del vettore di input attraverso il vettore pesi in modo che si effettui una differenza vettoriale anzichè una moltiplicazione: questa modifica permette al pattern piano di assumere una "forma propria".

2)effettuare una operazione di "stretching" dei vettori di input in modo che la rete diventi sensibile solamente alla "forma" del vettore e non ai valori assoluti dei suoi elementi. Mentre l'algoritmo di apprendimento resta invariato, la funzione di trasferimento diventa:

O(k)=1/(S|x(j)-w(k)(j)|+e)

e=0.01

Lo stretching del vettore di input si ottiene invece come preprocessing prima dell'inserimento nella rete. Lo stretching può essere effettuato in questo modo:

vettore iniziale= 0.2,0.3,0.4,0.2,0.1 (monte)

Si sottrae ad ogni elemento il valore più basso tra tutti gli elementi, in modo da portare la base del vettore sullo zero e poi si stira il vettore in modo che l'elemento di valore maggiore diventi uguale a 1.0. Per fare ciò si imposta a 1.0 l'elemento di valore più elevato e si dividono tutti gli altri elementi per il suo valore. In questo esempio valore min=0.1 e la prima operazione porta al nuovo vettore:

0.1,0.2,0.3,0.1,0.0

Adesso valore max=0.3 diventa 1.0 e

0.1 diventa 0.1/0.3=0.33

0.2 diventa 0.2/0.3=0.66

Il nuovo vettore è 0.33,0.66,1.0,0.33,0.0

Nel caso di valore max = valore min(es piano) si avrebbe un vettore di elementi nulli non accettabile per questa rete: si può ovviare aggiungendo 0.1 ad ogni elemento quando tale condizione si verifica. Questo procedimento è rappresentato graficamente in fig.2 dove si evidenzia come di "enfatizzare" la forma del pattern di input amplificandolo fino alla saturazione del range di lavoro. In questo modo si amplificano le differenze di forma tra i patterns e si equalizzano i valori assoluti. Esistono molti tipi di preprocessing dei dati per la presentazione di essi alle reti neurali e sono strettamente vincolati al tipo di problema da esaminare e al tipo di rete utilizzata. Un corretto preprocessing dei dati è molto spesso determinante per il raggiungimento di risultati affidabili con qualsiasi rete neurale. Quello appena visto può essere utilizzato nel riconoscimento di segnali, di profili, di immagini o comunque in tutte quelle applicazioni in cui è importante distinguere forme indipendentemente da valori assoluti.




CAPITOLO 6

Nella directory cap.6 sono contenuti i files eseguibili di un completo programma di generazione di reti neurali a retropropagazione dell errore in codice C. Inoltre è presente anche un programma che permette di generare codice C per motori inferenziali basati su regole tipo "if then" operanti su dati fuzzy. Il programma Neuronx è in grado di addestrare un rete neurale a retropropagazione dell errore con due strati nascosti e di generare il codice c "addestrato". Il programma Fuzzkern è in grado di generare motori inferenziali in codice C editando le regole nella apposita shell. I programmi generati da Neuronx e da Fuzzkern sono interfacciabili, per cui i due tools sono stati raggruppati nel menù Neurfuzz: per avere il menù principale è sufficiente digitare "neurfuzz". Nei file con estensione "hlp" sono contenuti gli help in linea di Neurfuzz e, pertanto, non devono essere editati. Il file manual.doc contiene un manuale in inglese per l utilizzo di Neurfuzz che approfondisce maggiormente alcuni aspetti delle interfacce fuzzy, rispetto all help in linea(manual.doc è visibile e stampabile attraverso Word per Windows). Nel file Neurfuzz.zip sono contenuti tutti gli altri files zippati con Pkzip.


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