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

APPLICAZIONI PRATICHE DI UNA RETE NEURALE EBP




INTRODUZIONE


I campi di applicazione delle reti neurali sono tipicamente quelli dove gli algoritmi classici, per la loro intrinseca rigidità(necessità di avere inputs precisi), falliscono. In genere i problemi che hanno inputs imprecisi sono quelli per cui il numero delle possibili variazioni di input è così elevato da non poter essere classificato. Ad esempio nel riconoscimento di un immagine di soli 25 pixels (5*5) in bianco e nero senza toni di grigio abbiamo 2**25 possibili immagini da analizzare. Se consideriamo una immagine di 1000 pixels con 4 toni di grigio dovremo analizzare 6**1000 immagini possibili. Per risolvere questi problemi si utilizzano normalmente algoritmi di tipo probabilistico che, dal punto di vista della efficienza risultano, comunque, inferiori alle reti neurali e sono caratterizzati da scarsa flessibilità ed elevata complessità di sviluppo. Con una rete neurale dovremo prendere in considerazione non tutte le immagini possibili ma soltanto quelle significative: le possibili variazioni in un range intorno all'immagine sono gia riconosciute dalla proprieta' intrinseca della rete di resistenza al rumore. Un altro campo in cui gli algoritmi classici sono in difficoltà è quello dell' analisi di fenomeni di cui non conosciamo regole matematiche. In realtà esistono algoritmi molto complessi che possono analizzare tali fenomeni ma, dalle comparazioni fatte sui risultati, pare che le reti neurali risultino nettamente più efficienti: questi algoritmi sfruttano la trasformata di Fourier per scomporre il fenomeno in componenti frequenziali e pertanto risultano molto complessi e riescono ad estrarre un numero limitato di armoniche generando notevoli approssimazioni. Come vedremo, una rete neurale addestrata con i dati di un fenomeno complesso sarà in grado di fare previsioni anche sulle sue componenti frequenziali e ciò significa che realizza al suo interno una trasformata di Fourier anche se nessuno le ha mai insegnato come funziona!


RICONOSCIMENTO IMMAGINI


Con una rete neurale tipo error_back_propagation, al contrario di una memoria associativa(che ammette solo valori 1/0 di input), possiamo pensare di analizzare immagini con vari livelli di grigio abbinando ad ogni input un pixel dell'immagine e il livello di grigio definito dal valore (compreso tra 0.0 e 1.0) dell'input. L'utilizzo potrebbe essere quello di riconoscere un particolare tipo di immagine o di classificare le immagini ricevute in input: il numero degli output pertanto è uguale al numero di classi previste ed ogni output assume un valore prossimo a 1 quando l'immagine appartiene alla classe ad esso corrispondente, altrimenti un valore prossimo a 0. Utilizzando una rete con 100 input si possono classificare immagini di 10*10 pixel(fig.1). Dovendo analizzare immagini più complesse (esempio 900 pixel 30*30) risulta piu pratico utilizzare uno schema di apprendimento modulare anzichè una singola rete con 900 input. Ad esempio possiamo utilizzare 9 reti da 100 input ciascuna che riconoscono una parte definita della immagine divisa in zone, ed infine una rete neurale con 9 input viene addestrata con le combinazioni di uscita delle 9 reti (fig.2). In tab.1 si vedono i dati di training della rete finale che ha il compito di riconoscere se il numero di reti precedenti che ha riconosciuto la stessa classe di appartenenza è sufficiente a stabilire che l'immagine appartiene a tale classe: in pratica la tabella rivela una funzione di AND che però risulta "elasticizzato" dalla rete(per semplicità consideriamo solo 3 zone). In un tale sistema la resistenza al rumore della rete finale viene posta "in serie" con quella delle reti precedenti e pertanto è conveniente effettuare addestarmenti con raggiungimento di errori abbastanza piccoli al fine di evitare una eccessiva flessibilità del sistema.








RICONOSCIMENTO SCRITTURA


E abbastanza evidente come sia facilmente trasportabile il problema del riconoscimento scrittura manuale al problema del riconoscimento immagini. Se pensiamo alle lettere manoscritte incasellate in un modulo quadrettato e letto da uno scanner, il problema si riduce al riconoscimento dell'immagine contenuta in ogni quadrato in modo sequenziale(fig.3). Se la scrittura è invece completamente libera il problema diventa più complesso e si rende necessario un preprocessor che sia in grado di ricomporre la scrittura scomponendo le singole lettere su matrici definite: i risultati sono ovviamente meno affidabili.


PREVISIONE DI FENOMENI COMPLESSI


Una delle applicazioni più importanti delle reti neurali è sicuramente quella delle previsioni di fenomeni complessi come i fenomeni meteorologici o quelli finanziari o socio-economici. Esistono metodi per la previsione di tali fenomeni che si basano su tre diverse linee di principio:
1)classico
2)frequenziale
3)moderno
Non vogliamo analizzare in questa sede queste tre teorie, ma accennare solo alla seconda che si basa sulla scomposizione in componenti armoniche secondo la legge di Fourier. Il principale difetto di questo metodo è che i calcoli relativi alle componenti frequenziali piu alte appesantiscono eccessivamente l'algoritmo al punto che si rende necessario accontentarsi di selezionare le armoniche che si ritengono maggiormente influenti, ottenendo un evidente errore di approssimazione. Con una rete neurale è possibile fare previsioni analizzando le serie storiche dei dati esattamente come con questi sistemi ma non è necessario fare supposizione alcuna per restringere il problema ne, tantomeno, applicare la trasformata di Fourier. un difetto comune ai metodi di analisi sopra elencati è quello di essere applicabili solamente se si attuano delle restrizioni nel problema utilizzando delle ipotesi che talvolta potrebbero rivelarsi errate. In pratica si addestra la rete neurale con successioni di serie storiche di dati del fenomeno che si vuole prevedere. Supponiamo di voler prevedere, sulla base di n valori consecutivi che la variabile x(t) ha assunto, i successivi m valori che assumerà: addestriamo la rete di fig.4 con la prima serie storica di n dati della variabile in input e la seconda serie di successivi m dati in output e cosi via per altre coppie di serie storiche ciascuna delle quali rappresenta un esempio. In questo modo la rete apprende l'associazione che esiste tra i valori della variabile in n punti e quelli in m punti successivi ma anche l' associazione tra le derivate inquanto l'informazione di due soli valori vicini della variabile è un indice della derivata in quel punto. Esistono due tipi di previsione: univariata e multivariata. La prima riguarda la previsione dei valori di una sola variabile di un fenomeno in base ai dati storici della variabile stessa. La seconda riguarda la previsione dei valori di piu variabili in base ai dati storici delle stesse ed eventualmente anche di altre variabili: in questo secondo caso è l'insieme dei valori delle sequenze storiche di tutte le variabili di input che concorre alla determinazione dell'output di ognuna delle variabili su cui si vuole fare la previsione. Esistono casi in cui le sequenze storiche elementari(quelle che rappresentano un esempio) devono essere composte da molti dati consecutivi per avere dei buoni risultati e ciò comporta la necessità di utilizzare reti con un numero di inputs molto elevato: è possibile fare questo ma, talvolta, si preferisce utilizzare "reti ricorrenti" che sono reti neurali dotate di "memorie sugli input" tali che ogni variabile possa avere un solo input fisico ma la rete ad'ogni istante t sia condizionata non solo dagli input dell istante t ma anche da quelli degli istanti precedenti(t-1 ... t-n , dove n rappresenta l'ampiezza delle sequenze storiche).






PREVISIONE UNIVARIATA


Si tratta in pratica di ciò di cui si è gia parlato riferendoci alla fig.4. Vediamo due esempi di previsione di due processi dei quali il primo è di tipo periodico(naturalmente la previsione di un processo periodico ha senso solo a livello didattico), e il secondo aperiodico. Possiamo effettuare previsioni sulla funzione: x(t)=sin(2*pigreco*t/40)+sin(2*pigreco*t/100) [due sinusoidi con periodi 40 e 100] Utilizziamo il generatore di file di esempi sin_gen e addestriamo una rete neurale error_back_propagation con il file di esempi generato. Usiamo una rete neurale con 2 inputs che corrispondono ad una serie storica di 2 valori e con 1 solo output che corrisponde al valore successivo previsto: con un training set di 40 esempi(120 valori del file period.lrn composto di 200 valori) e periodo 40 (la seconda sinusoide assume automaticamente periodo 100), otteniamo il risultato di fig.5 (il target_error=0.01. E stato ottenuto con un numero considerevole di epoche su una spark station). Il risultato viene ottenuto ripetendo piu volte la funzione exec del programma di simulazione di rete neurale con valori di input scelti nel range dei valori possibili della funzione Utilizzando una rete con due input e un output abbiamo una informazione su due valori precedenti ma anche sulla derivata in quel punto. Per effettuare l'addestramento con con il programma presentato nel capitolo precedente si può utilizzare lo stesso training set impostando diversamente il numero degli input e degli output(tenendo presente che deve essere (n_in + n_out)*n_es < n_gen). Avendo il programma utilizzato una funzione di trasferimento a sigmoide che fornisce valori compresi tra 0 e 1, il programma sin_gen genera degli esempi normalizzati con valori che variano tra 0.0 e 1.0.

NOTA IMPORTANTE: bisogna distinguere le previsioni fatte nel range del training set(interpolazioni), che non sono previsioni vere e proprie, da quelle effettuate al di fuori di esso che rappresentano la reale capacità predittiva della rete neurale.

IN PRATICA: nella previsione di fenomeni complessi si utilizzano serie storiche composte da un numero molto maggiore di dati e i valori da predire sono sempre piu di uno a seconda del campo predittivo che l'applicazione richiede.

Passiamo adesso ad analizzare una funzione aperiodica che risulta essere sicuramente piu interessante ai fini delle previsioni. Utilizziamo una funzione composta dalla sovrapposizione di due sinusoidi di cui una con periodo incommensurabile:

x(t)=sin(2*pigreco*t/40)+sin(sqrt(2*pigreco*t/40))

Generiamo il file di esempi con il generatore sin_gen selezionando la funzione 2 e addestriamo una rete con tre inputs e un output(usiamo 5 neuroni in ogni strato hidden). Il risultato di previsione che otteniamo dopo un addestramento che porta ad un errore=0.01 è quello di fig.7. L'addestramento è stato effettuato con 16 esempi che costituiscono 64 generazioni (16*(3input+1output)) delle 100 generate da sin_gen utilizzando l'opzione aperiodica e periodo=40. Adesso proviamo a verificare se la rete addestrata con il processo aperiodico è in grado di fare predizioni anche sulle componenti frequenziali del processo stesso. Possiamo generare con sin_gen due files di riferimento con i valori reali delle componenti frequenziali e prelevare da essi delle serie storiche di tre dati consecutivi da usare come input della funzione exec e costruire la funzione in base al valore dato come output nel file net.out. Sia nel caso della prima componente che nel caso della seconda abbiamo risultati di previsione analoghi a quelli della funzione composta e ne deduciamo che la rete è in grado di riconoscere le componenti frequenziali del processo, proprio come se applicasse una trasformata di Fourier "virtuale". Per avere una controprova di ciò possiamo tentare di fare una previsione su una sinusoide di frequenza differente da quelle componenti: la rete fa delle previsioni con errori tangibilmente maggiori dimostrando di essere sensibile solamente alle componenti frequenziali del processo relativo ai dati di addestramento(fig.9 fig.10 fig.11). Effettivamente questa controprova risulta molto più evidente se l'addestramento avviene con serie storiche più ampie di quella utilizzata, attraverso le quali la rete assume informazioni piu precise in merito alla frequenza delle varie componenti.






PROCESSI NON STAZIONARI


Negli esempi precedenti abbiamo esaminato processi stazionari, cioè processi in cui la variabile considerata può variare entro un range ben definito. Se consideriamo processi non stazionari la varabile da predire puo variare al di fuori di qualunque range di valori e ciò comporta un problema nella normalizzazione dei dati. La normalizzazione infatti consiste nel riportare valori reali del processo a valori compresi tra 0 e 1 o tra -1 e 1 a seconda del tipo di rete e di funzione di trasferimento dei neuroni: si ottiene questo nel modo più semplice dividendo tutti i valori del processo per il valore più alto di essi, ma in un processo non stazionario quest'ultimo non è conosciuto. Per risolvere questo problema si rende necessario effettuare una normalizzazione non lineare del processo in modo che la variabile analizzata, che può teoricamente variare tra -inf e +inf , vari tra -k e +k. Si possono utilizzare funzioni logaritmiche, radici cubiche e funzioni nonlineari come la sigmoide utilizzata nella funzione di trasferimento dei neuroni di una rete e_b_p. Naturalmente l'imprecisione aumenta se ci si avvicina agli estremi della funzione dato che il rapporto tra la variazione della variabile normalizzata e quella non normalizzata decresce.

esempio 1 di normalizzazione per proc. non stazionario:
x_normaliz= 1/(1+exp(-x))
dove -inf < x < +inf e 0 < x_normaliz < 1

esempio 2 di normalizzazione per proc. non stazionario:
x_normaliz=logn(x)/k
dove 0 < x < +inf e
k=costante valutata in base alla probabilità che la variabile oltrepassi un certo valore

Naturalmente con una normalizzazione di tipo 1 abbiamo la certezza che tutti i valori normalizzati cadano entro il range 0.0/1.0, mentre con il secondo metodo dobbiamo fare una ipotesi restrittiva sui valori massimi che la variabile potra assumere. In ogni caso, l'utilizzo di funzioni di questo tipo è piu utile per effettuare delle "ridistribuzioni dei dati" (non tratteremo qui questo argomento). Per aggirare il problema dei processi non stazionari si possono considerare serie storiche di derivate anzichè di valori della variabile: in questo modo siamo sicuri che i dati in ingresso sono compresi tra due valori definiti. Analogamente al caso di serie storiche di valori della variabile, gli intervalli di campionamento dei dati per l'addestramento dovranno essere tanto piu piccoli quanto piu alta è la frequenza di variazioni significative della variabile.



PREVISIONE MULTIVARIATA


Abbiamo precedentemente analizzato le problematiche relative alla previsione univariata, cioè quella in cui si cerca di stimare valori futuri di una variabile in base ai valori assunti precedentemente. Il caso della previsione multivariata non è concettualmente molto più complesso inquanto in esso esistono soltanto delle variabili che sono tra loro correlate per cui la previsione di valori assunti da una o piu variabili dipende dall'insieme delle serie storiche di ognuna delle variabili di ingresso. Il contesto di analisi della rete neurale diventa molto piu ampio, dato che l'output dipende da

n_informazioni=n_variabili_input * n_dati_serie_storica.

Ciò che rende differente e più interssante il problema è che i fenomeni complessi che si possono studiare analizzando l'evoluzione delle variabili appartenenti sono in genere sistemi nei quali le ucite non sono direttamente influenzate solo dalle variazioni degli ingressi ma sono funzione dello stato del sistema associato agli eventi negli ingressi. In realtà dobbiamo considerare tre tipi di variabili:
1)di ingresso
2)di stato del sistema
3)di uscita.
Le variabili di stato sono funzione di se stesse e degli input e le variabili di uscita sono funzione delle variabili di stato e degli inputs:

dS(t)/dt= f(S,i) dove S=stato del sistema i=input

u(t) = f"(S,i) dove u=output

f e f" sono rispettivamente la funzione di evoluzione dello stato rispetto agli ingressi e la funzione di evoluzione dell' uscita del sistema

Nella realtà è abbastanza lecito semplificare nel seguente modo:

u(t) = f"(S)

perchè le uscite sono, nella maggior parte dei casi, scarsamente influenzate direttamente dalle variazioni degli ingressi ma sono significativamente influenzate dalle variazioni di stato del sistema(fig.14). Considerando un sistema in cui gli ingressi variano lentamente, si possono calcolare le uscite all'istante t sulla base dello stato e degli ingressi all'istante t-1:

S(t)=f(S(t-1),i(t-1))

u(t)=f"(S(t-1))=f"(f(S(t-1),i(t-1)))




Considerando un sistema in cui gli ingressi variano molto velocemente bisogna tenere conto dell'errore che deriva dal trascurare l'evoluzione dello stato dovuta alla variazione degli ingressi dall'istante precedente a quello relativo alla previsione. Per fare questo è bene inserire come variabili di input della rete, non soltanto variabili di stato del sistema ma, anche variabili di input del sistema in modo che la rete possa fare previsioni sulle evoluzioni degli stessi. In ogni caso la previsione multivariata risulta molto più precisa e affidabile della previsione univariata, dato che si basa su un numero maggiore di informazioni. Per questo motivo è possibile utilizzare serie storiche ridotte rispetto alla previsione univariata: possiamo parlare di quantità di informazione verticale (numero variabili analizzate) e orizzontale(estensione delle serie storiche) e considerare come misura della completezza dell'informazione l'area del rettangolo di fig.13.





CONCLUSIONI



Per uscire un pò dalla teoria vi fornisco un elenco di applicazioni pratiche realizzate con reti neurali in maggioranza di tipo error_back_propagation:

-sistema di guida autonoma di automobili che puo guidare alla velocità di circa 5 Km/h nei viali della Carnagie Mellon University, avendo come input l'immagine della strada.E' una rete neurale error_back_propagation addestrata con 1200 immagini in 40 epoche su un supercomputer Warp. Il tempo di addestramento è stato di 30 minuti mentre la sua esecuzione richiede circa 200 msec su Sun-3.

-classificatore di segnali radar che raggiunge prestazioni che con tecniche Bayesiane non sono mai state raggiunte.

-lettore di testi che può pronunciare parole mai viste prima con una accuratezza del 90%: si tratta di una rete error_back_propagation con 309 unità e 18629 connessioni implementata in linguaggio c su VAX_780.

-riconoscitore di oggetti sottomarini attraverso sonar realizzato da Bendix Aerospace

-un sistema di scrittura automatico su dettatura in lingua finlandese o giapponese che ha una accuratezza compresa tra l'80% e il 97%.L'hardware prevede un filtro passa_basso e un convertitore analogico_digitale, mentre la rete neurale è di tipo autoorganizzante realizzata su pc AT con coprocessore TMS-32010.

-sistema di supporto alla decisione per la concessione prestiti realizzato con rete error_back_propagation con 100 input e 1 output(prestito concesso o no). L'apprendimento è stato effettuato con 270.000 casi di prestiti in 6 mesi.

-la rete Neuro-07 sviluppata da NEC riconosce al 90% caratteri stampati e la rete sviluppata dalla Neuristique riconosce il 96% dei caratteri numerici scritti a mano.La sua architettura prevede 256 input(16*16 pixels), uno strato nascosto di 128 neuroni ed un secondo di 16, uno strato di output di 10 neuroni(cifre da 0 a 9).

-la Hughes Research Lab ha realizzato una rete che può riconoscere visi umani anche con disturbi(barba/occhiali/invecchiamento).

-è stata realizzata una rete avente come input una immagine di 20*20 pixel con 16 livelli di grigio proveniente da proiezioni tomografiche di polmoni che restituisce in output l'immagine depurata del rumore(che è tanto più ampio quanto minore è il numero delle proiezioni). In pratica la rete fa una interpolazione di immagini discontinue sulla base di un addestramento di 60 immagini di polmoni con validation set di 120 immagini.

-la PNN(Probabilistic Neural Network) sviluppata da Lockheed interpreta correttamente il 93% dei segnali sonar con un addestramento di 1700 esempi di segnali riflessi da sommergibili e di 4300 esempi di echi riflessi da navi o da movimenti dell'acqua in superfice.

-una rete neurale è stata applicata in robotica per risolvere un problemma di "cinematica inversa" del tipo: un braccio meccanico con due snodi deve raggiungere un target di coordinate R_t e alpha_t(R=raggio alpha=angolo) partendo da una situazione degli snodi alpha1_b e alpha2_b. Tale problema per essere risolto richiede il calcolo di funzioni trascendenti (trigonometriche inverse) ma con una rete neurale di 4 input(R_t,alpha_t,alpha1_b,alpha2_b), due strati intermedi rispettivamente di 6 e 4 neuroni e due neuroni di otput(alpha1_b,alpha2_b) si ottiene un risultato migliore con poco sforzo. Tale rete che comanda il manipolatore INTELLEDEX 605T è simulata su un PC_AT ed è stata addestrata con 64 esempi contenenti posizioni relative diverse tra target e braccio. Ciò che ha reso ancora più interessante l'applicazione è stato il fatto che la rete è risultata in grado di correggere disturbi al moto di avvicinamento del braccio e seguire un target in movimento(fig 15).

Per finire una considerazione: notate come con pochi neuroni negli strati intermedi si possano ottenere risultati applicativi di livello molto elevato.

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