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