|
||||||
DOCUMENTS
elab.immagini
galileo
realtà virtuale
vrml
biomeccanica
esapodi
formula1
intelligenza
Papers
meccanica
sistemi
robotica
CARATTERISTICHE GENERALI
Le Reti Neurali
nascono dall’idea di poter riprodurre alcune delle funzioni e capacità del
cervello umano.
L’area di applicazione dominante delle Reti Neurali (RN) è il riconoscimento di pattern,
pattern recognition, e l’obiettivo fondamentale di tale
caratteristica è la classificazione: dato un input la rete è in
grado di analizzarlo e di formulare un output che corrisponda ad una
determinata e significativa categorizzazione.
Un esempio delle sue
potenzialità è la possibilità di riconoscere volti, voci etc.
La
classificazione della RN consiste nel
decidere a quale delle categorie indicategli, un pattern di input si
avvicina maggiormente in termini di distanza. In base al metodo di
misurazione di tale distanza, i classificatori di pattern si dividono in
due grandi categorie, numerici e non-numerici.
Le
tecniche numeriche misurano le distanze in modo deterministico e
statistico; tali misure possono essere considerate come misure effettuate
in uno spazio geometrico dei patterns.
Le tecniche non-numeriche sono
invece quelle legate a processi simbolici come i fuzzy
sets.
STRUTTURA
La RN è strutturata in
modo da essere un semplice modello della struttura e delle funzionalità
del cervello umano.
Una RN è
costituita da un determinato numero di neuroni e da connessioni tra essi
che rappresentano le connessioni sinottiche tra i neuroni biologici. La
funzione di un neurone biologico è quella di sommare i suoi input e
produrre un output qualora tale somma sia maggiore di un dato valore di
soglia.
Tali output vengono poi trasmessi a successivi neuroni
attraverso le giunzioni sinottiche; alcune di esse sono buone giunzioni
per cui il segnale trasmesso è alto, mentre altre sono cattive giunzioni
per cui il segnale trasmesso risulta più basso.
L’efficienza delle
giunzioni viene modellata considerando una fattore moltiplicativo (peso)
per ciascun input del neurone: una buona sinapsi avrà un peso maggiore di
quello della sinapsi cattiva. In linea di principio, in una RN, ogni unità può
essere connessa con qualunque altra unità.
Nella RN, quindi, un
neurone calcola la somma pesata I, degli input xi, (vedi Eq.1) e la
confronta con un valore di soglia, se la somma risulta maggiore di tale
soglia il neurone "si accende" e trasmette un output.
(1)
dove wi rappresenta il peso dell’ i-esimo
neurone.
Un modo alternativo e
maggiormente usato per raggiungere il medesimo effetto è quello di
considerare la soglia come un ulteriore valore di input fissato sempre
pari a 1:
(2)
L’output di un neurone è dato dalla trasformazione dell’input I,
cioè della somma pesata, tramite una funzione detta di
attivazione. Analogamente quindi, ai neuroni biologi, la funzione di
attivazione ha due principali caratteristiche: deve tenere conto della
soglia e non deve mai superare un livello di saturazione.
La funzione
può essere, ad esempio, a gradino:
(3)
o una funzione continua differenziabile detta logistica o sigmoide, Eq. 4, nel caso in cui la soglia sia considerata come un ulteriore input pari a 1.
(4)
E’
importante sottolineare che il modo con cui una RN risponde ad un pattern dipende
interamente dai pesi delle connessioni.
APPRENDIMENTO
Il principio guida
che permette alla rete di apprendere è quello di lasciare che la rete
impari dai suoi errori.
Le reti hanno, inizialmente, dei pesi scelti a
caso (in particolare valori normalizzati, ovvero compresi fra 0 e 1 o tra
-0.5 e +0.5); a questo punto esistono diversi metodi con cui le reti
modificano automaticamente questi pesi fino ad assegnare loro quei valori
che consentono di rispondere nel modo desiderato ad una certa stimolazione
esterna.
Tutti i metodi di apprendimento si dividono in due classi:
metodo supervisionato e non-supervisionato. Quello
maggiormente considerato è quello supervisionato in cui esiste una specie
di "insegnante" esterno che di volta in volta dice alla rete quale è la
prestazione desiderata.
La rete si modifica in conseguenza a tale
insegnamento cosicché, dopo un certo numero di volte (dell’ordine delle
migliaia) che le è stato detto quale è l’output appropriato per un certo
input, diventa capace di produrre da sola l’output corretto per ogni
input.
Un esempio di apprendimento supervisionato è quello della
back-propagation (BP), cioè della propagazione all’indietro
dell’errore: la rete calcola, per ogni unità di output, l’errore cioè la
differenza tra lo stato di attivazione prodotto dalla rete e quello
stabilito nell’input di insegnamento; questo errore serve a modificare i
pesi delle connessioni tra i neuroni.
Nei casi di apprendimento
non-supervisionato la rete impara scoprendo regolarità negli stimoli senza
che nessuno le dica dall’esterno quali sono queste regolarità. Così accade
nelle reti che sviluppano "mappe di tratti" (feature maps) di
Kohonen.
Le reti non danno risultati completamente corretti o
completamente sbagliati, ma solo approssimativamente corretti o sbagliati
(non 1 o 0 ma 0.96 o 0.03). Inoltre, se una rete ha imparato, ad esempio,
a dare B in risposta ad A, quando le si presenta uno stimolo A’ che sia
simile ad A, risponde automaticamente e spontaneamente in modo sensato: o
dà la stessa risposta data per A, cioè B, o risponde con B’, cioè dà una
risposta simile a quella data per A.
Questa capacità di estrapolare, di
rispondere sensatamente al nuovo, è una delle più importanti proprietà
delle RN, e uno dei loro principali
vantaggi rispetto ai sistemi simbolici tradizionali.
Le principali
RN utilizzate oggi, differenziate per
struttura e quindi per funzionalità e scopo, sono: Multilayer Perceptron
con Back Propagation come metodo di apprendimento, Reti di Hopfield e Reti
di Kohonen.
THE MULTILAYER PERCEPTRON E
BACK PROPAGATION
Il Perceptron è stato la prima RN utilizzata ed era costituita da un singolo
strato di neuroni che riceveva un input e calcolava direttamente
l’output.
In questo modo la rete era limitata nel calcolo di una
singola retta, nello spazio geometrico dei pattern, di separazione tra le
classi senza essere quindi in grado di classificare problemi
complessi.
Per poter superare il limite di separabilità lineare delle
classi mantenendo intatta la capacità di apprendere, sono state eseguite
alcune variazioni strutturali aggiungendo uno o più strati di neuroni in
modo che ogni neurone di ciascuno strato riceva come input l’output dei
neuroni dello strato precedente e che l’output di rete sia quello
calcolato dall’ultimo strato.
La rete così ottenuta viene chiamata
Multilayer Perceptron.
I
neuroni (o unità) che costituiscono questo tipo di reti, quindi, sono
organizzati in strati, layer: uno strato di input, uno di output e
un certo numero di strati intermedi tra input e output detti nascosti,
hidden.
In tali reti la funzione di attivazione non è a gradino
ma è la funzione sigmoide. Le unità dello strato di input hanno il solo
compito di trasmettere i valori di input allo strato successivo calcolando
solo la somma pesata degli input.
Il fatto di utilizzare la
funzione sigmoide per calcolare l’output di una rete piuttosto che una
funzione a gradino permette di suddividere la spazio dei pattern con linee
curve piuttosto che semplici rette in modo da classificare oggetti
complessi.
Per visualizzare come funziona tale rete chiamiamo
Tpj l’output corretto, o target, per il pattern
p e il neurone di output j, Opj l’output calcolato dal
j-esimo neurone per il medesimo pattern p e wij il
peso legato alla connessione tra il neurone i e il neurone
j
L’algoritmo di apprendimento della rete è il
seguente:
1) Inizialmente si pongono i valori dei pesi
casuali compresi fra [0,1] o [-0.5,0.5] in modo che siano piccoli e
normalizzati.
2) Si presenta un pattern p di input alla
rete: xp = (x0, x1, x2, ..., xn-1) con x0=1 e un vettore costituito dai valori di output corretti
Tp = (T0,T 1,
T2, ..., Tm-1). In questo modo la
rete sarà costituita da (n-1) neuroni di input e (m-1) neuroni di
output.
3) Per ogni layer si calcola la somma pesata degli
input e il suo valore di attivazione, ovvero l’output dato dall’equazione
(4) con I dato dalla (2).
Dopo aver eseguito l’ultimo punto per
tutti gli strati, si devono modificare i pesi in modo che l’output della
rete, cioè l’output dell’ultimo strato di neuroni, si avvicini sempre più
a quello desiderato. Per questo viene definita una funzione errore Ep proporzionale al quadrato della differenza tra output e
target per tutti i neuroni di output:
(5)
A
questo punto si applica la Back Propagation ovvero di variano i
pesi in modo che l’errore Ep tenda a zero partendo
dall’ultimo strato verso il primo (ecco il perché della propagazione
all’indietro).
Si definisce, per il pattern corrente p, una variazione
D wij del peso wij tra il neurone
i e quello j data da:
(6)
dove a è il coefficiente di apprendimento (learning rate), è il momento e p-1wij è la variazione del medesimo peso calcolata al pattern
precedente.
I nuovi pesi saranno quindi dati da:
(7)
La variazione dei pesi viene calcolata a partire dallo strato di neuroni di output e a ritroso verso il primo strato nascosto. Le derivate possono essere calcolate:
(8)
dove Ai è il valore del’i-esimo neurone dello strato che si sta considerando mentre j è:
(9)
se si sta considerando lo strato di output, mentre per tutti gli altri strati intermedi è:
(10)
dove le somme sono estese a tutti i neuroni dello strato successivo (considerando l’ordine da input ad output) a quello che si sta considerando.
Per far apprendere una rete è infatti necessario mostrarle un certo
numero di volte, circa 1000, un determinato numero di diversi pattern per
ognuno dei quali verranno modificati i pesi in modo da diminuire l’errore
e avvicinare i valori di output al target.
Tale procedimento viene
eseguito un certo numero di volte fino a quando l’errore risulta minore ad
un certo valore prefissato o non diminuisce ulteriormente. A questo punto
la rete ha appreso, i pesi sono fissati ed è pronta per classificare un
nuovo input di cui non si conosce il target.
I parametri e vengono scelti dall’utente con
valori compresi fra 0 e 1 (o meglio tra 0.2 e 0.8 in modo che non siano
troppo vicini agli estremi dell’intervallo): i valori fissati sono
caratteristici della rete. In particolare a è legata alla convergenza
della rete, maggiore è il suo valore e maggiore è la velocità di
convergenza della rete; aumentando però tale convergenza è possibile che
la rete converga ad un minimo dell’errore non assoluto ma locale
(minimi locali) a cui non corrisponde un output corretto.
Per
evitare questo comportamento si può abbassare il valore di per rallentare la convergenza oppure,
quando si considerano casi non reali, si può aggiungere rumore ai pattern
di input o, come nel nostro caso, si aggiunge il termine momento in modo da non dover
rallentare la convergenza.
Il termine legato a permette di produrre grandi
variazioni dei pesi per poter "saltare" i minimi locali e piccole
variazioni quando i cambiamenti sono piccoli (cioè quando p-1 è
piccolo).
Problemi diversi, più o meno complessi, vengono risolti
da diverse reti neurali caratterizzate da un diverso numero di neuroni nel
hidden layer e da determinati valori di e .
In linea generale man mano che
il problema si complica dovrebbe essere necessario aumentare il numero di
strati intermedi, ma per il teorema di Kolmogorov è sufficiente aumentare
solo il numero dei neuroni mantenendo un unico strato
intermedio.
Infine, poiché l’apprendimento di queste reti consiste
nella modificazione dei pesi, è evidente che tutto il decorso
dell’apprendimento e il suo risultato finale varieranno da rete a
rete.
Quindi se si ripete lo stesso esperimento su reti diverse, cioè
aventi assegnazione iniziale di pesi differenti (diverse scelta casuale
dei pesi), non si possono aspettare risultati identici ma soltanto
risultati simili.
Il metodo BP di apprendimento viene anche
chiamato gradiente discendente in quanto le variazioni vengono
eseguite verso il minimo della funzione
errore.
Generalizzazione della RN
Una delle maggiori
caratteristiche delle RN è la loro
abilità a generalizzare ovvero a classificare con successo pattern che non
sono stati precedentemente mostrati (cioè mostrati durante
l’apprendimento).
Un vantaggio della rete a multi strati è quello
di poter classificare input rumorosi: ad essi verranno associate le classi
relative all’input senza rumore. Questa abilità permette di applicare con
successo queste reti a problemi reali, e quindi rumorosi, con risultati
migliori rispetto a quelli ottenuti con altri metodi di riconoscimento di
pattern o sistemi esperti.
Nel caso in cui l’input sia diverso da
quelli già classificati dalla rete nel ciclo di apprendimento, l’output
sarà meno preciso ed in particolare si posso considerare due casi. Se il
pattern di input è posto tra due pattern già visti; la rete lo classifica
come il pattern in esso dominante.
Se invece non è simile a nessun
pattern già visto, la classificazione avviene con un errore maggiore (se
si ottiene un errore del 10% con i pattern già visti dalla rete, si può
ottenere un errore di circa il 13-20% con pattern non ancora
classificati).
RETI DI
HOPFIELD
La funzione principale delle Reti di Hopfield è
quella di riconoscere pattern molto rumorosi come pattern che sono stati
"immagazzinati nella sua memoria" cioè già classificati: ad un pattern
rumoroso viene associato in output un pattern perfetto.
La Rete di
Hopfield è costituita da neuroni non suddivisi in strati, ognuno di essi
connesso a tutti gli altri (rete fully-connected).
I pesi delle
connessioni tra i neuroni sono simmetrici:
il peso della
connessione tra neurone i e neurone j, wij, è uguale
al peso della connessione nell’altra direzione tra il neurone j e il
neurone i, wij = wji.
Ciascun
neurone ha una soglia interna e la funzione di attivazione per calcolare
l’output dalla somma pesata dell’input è a gradino (Eq. (3)).
La rete
può avere solo due stati di input: binario (0,1) o bipolare
(-1,+1).
Gli input vengono mostrati a tutti i neuroni della rete
contemporaneamente; a questo punto la rete viene lasciata da sola per il
ciclo di apprendimento fino alla convergenza ottenuta quando i valori dei
neuroni non cambiano più. Tali valori ultimi rappresentano l’output della
rete. Poiché tutti i neuroni sono connessi a tutti, il valore di un
neurone influenza il valore di tutti gli altri; man mano che la rete passa
attraverso stadi intermedi cerca di raggiungere un compromesso tra tutti i
valori dei neuroni, e lo stadio finale è dato dal miglior
compromesso che la rete possa trovare.
Nel ciclo di apprendimento
ogni output di un neurone è un nuovo input per lo stesso neurone che
produrrà un nuovo output e così via.
Supponiamo di dover
immagazzinare nella rete un cerco numero M di pattern, indichiamo con
xi l’input all’i-esimo neurone
corrispondente all’s-esimo pattern e con wij il peso
dal i-esimo al j-esimo neurone.
L’algoritmo di apprendimento è il
seguente:
1) Inizialmente si assegnano i pesi delle connessioni
tra i neuroni:
(11)
dove i valori di x possono essere solo +1 e -1 oppure solo 0 e 1.
2) Assegnare ai neuroni i valori di input di un pattern
sconosciuto e calcolare i relativi output utilizzando una funzione a
gradino dopo aver assegnato una soglia per ciascun neurone.
Indichiamo
con Ti il valore di soglia per l’i-esimo
neurone:
(12)
dove N è il numero di neuroni. L’equazione (9) vale nel caso in cui
si stia considerando solo valori +1 e -1 altrimenti l’output di ciascun
neurone potrà assumere valori rispettivamente pari a 1 e
0.
3) Si ripete l’equazione (9), aggiornando i valori di
input xi con i nuovi valori f(xi)
di output, fino a quando questi ultimi non variano più.
E’
possibile definire un energia E della rete di Hopfield nel modo
seguente:
(13)
dove le somme sono estese a tutti i neuroni che costituiscono la
rete e xi sono gli output del i-esimo neurone e che
costituiranno i successivi input dei medesimi neuroni. I pesi della rete
contengono le informazioni di tutti i pattern (vedi Eq. 8) e quindi tutti
i pattern sono inclusi nell’energia così definita.
Qualora un
neurone subisca un incremento di attivazione dxi l’energia varierà della
quantità:
(14)
che è nulla o negativa. Infatti, qualora xi passi dal valore -1 al
valore +1 (o dal valore 0 al valore 1), sarà xi > 0
e dxi > 0, ed analogamente per gli altri casi
possibili. Dunque l’energia E non può che decrescere. Aggiornando gli
output sequenzialmente secondo la relazione (9) la rete, dopo un certo
numero di iterazioni, si stabilizza nello stato di minima
energia.
Quindi l’energia, che rappresenta tutti i pattern
considerati, è una funzione con minimi in corrispondenza dei pattern
immagazzinati nella rete.
Un pattern sconosciuto rappresenta un
particolare punto sull’iper-superficie dell’energia, e, man mano che la
rete calcola i valori di output verso lo stato finale, il punto si muove
sulla iper-superficie verso un punto di minimo: questa zona di attrazione
rappresenta lo stato stabile della rete, ovvero la rete è stata in grado
di associare ad un pattern sconosciuto (un punto nello spazio
dell’energia) una pattern già visto dalla rete (cioè un punto di minimo
dell’energia).
Eventuali errori nella ricostruzione di un pattern,
cioè quando vengono associati a pattern sconosciuti pattern in output
sbagliati, possono comparire quando sono stati immagazzinati nella rete
più di 0.5N con N numero di neuroni della rete. Questi pattern sbagliati
sono comunque stati stabili di output della rete a cui però non
corrisponde nessun pattern immagazzinato; c’è stata interferenza e
sovrapposizione tra i pattern immagazzinati da formare uno stato con
energia minima locale (come per le reti con back propagation) che la rete
considera come soluzione accettabile. Questi stati vengono chiamati
stati metastabili.
RETI DI
KOHONEN
Le Reti di Kohonen permettono di classificare
oggetti senza la supervisione esterna. Nascono dallo studio della
topologia della corteccia del cervello umano. Queste reti tengono conto
non solo delle connessioni sinottiche tra neuroni ma anche della influenza
che può avere un neurone sul vicino. E’ stato osservato che, nel caso
biologico, i neuroni che sono fisicamente vicini a neuroni attivi hanno i
legami più forti mentre quelli ad una particolare distanza hanno legami
inibitori. A questa caratteristica Kohonen attribuisce uno sviluppo nella
capacità di realizzare delle mappe topologiche localizzate nel cervello.
Questa caratteristica è stata modellata da Kohonen restringendo la
variazione dei pesi ai neuroni vicini ad un neurone scelto.
Una
Rete di Kohonen è costituita da una
serie di neuroni di input che, come per le reti a multi strati, servono
solo a calcolare la somma pesata di tutti gli input e da un singolo strato
bidimensionale di neuroni, sono cioè organizzati su una griglia posta su
un piano; tali neuroni calcolano l’output della rete. Ciascun neurone di
input è connesso a tutti i neuroni della griglia.
L’apprendimento è
legato alle interconnessioni laterali tra neuroni vicini. L’algoritmo di
apprendimento di questo tipo di RN è il
seguente:
1) Si definiscono con wij(t)
(0 i n-1 dove n è il numero di input) il
peso tra il neurone i-esimo di input e il neurone j-esimo della griglia al
tempo t. Con "tempo" si indica il passaggio del pattern di apprendimento).
I valori dei pesi vengono inizialmente posti casualmente tra 0 e 1. Si
pone come valore di Nj(0) il maggiore possibile
(Nj() dovrebbe essere il numero di neuroni vicini al
j-esimo neurone).
2) Si presenta un input: x0(t), x1(t), x2(t),...,xn-1(t)
dove xi(t) è l’i-esimo
input.
3) Si calcolano le distanze dj
tra l’input e ciascun neurone di output j:
(15)
4) Si seleziona il neurone a cui corrisponde la distanza
minima. Indichiamo con j* tale neurone.
5) Si modificano i
pesi dal neurone di input e il neurone j* e tutti i suoi vicini definiti
all’interno della superficie definita da Nj*(t).
I
nuovi pesi sono:
(16)
Il
termine (t) è la
funzione guadagno (o velocità di adattazione) (0 (t) 1) che decresce nel tempo in modo
da rallentare di volta in volta l’adattamento dei pesi.
Anche le
dimensioni di Nj*(t) decrescono nel tempo in modo da
individuare una regione di neuroni sulla griglia.
6) Si ripete tutto a partire dal punto 2).
Si osserva
come l’algoritmo di apprendimento di questa rete è molto più semplice di
quello delle reti precedenti in cui è stato necessario calcolare una
derivata; nel caso di Kohonen si confronta semplicemente un pattern di
input e il vettore dei pesi (vedi Eq.15). Il neurone con il vettore dei
pesi più vicino al pattern di input viene selezionato (j*); questo nodo
"claims" the input vector e modifica il suo vettore dei pesi in modo da
allinearlo a quello degli input x cioè in modo da diminuire dj.
Si può inoltre osservare che vengono modificati anche
i vettori dei pesi dei neuroni vicini a j*; il motivo di ciò è che la rete
sta cercando di creare regioni costituite da un ampio set di valori
attorno all’input con cui apprende (cioè non fa corrispondere un solo
valore per un input ma un set di valori), di conseguenza, i vettori che
sono spazialmente vicini ai valori di training saranno comunque
classificati correttamente anche se la rete non li ha mai visti.
Questo
dimostra le proprietà di generalizzare della rete.
Consideriamo ora
come la rete apprende cioè come vengono variati i pesi. La funzione
guadagno è una funzione decrescente che inizialmente viene mantenuta alta
(> 0.5) in modo da modificare velocemente i pesi verso una prima
mappatura approssimativa.
In seguito vengono eseguite delle mappature
fini avvicinando i vettori dei pesi a quelli di input, per eseguire queste
variazioni fini si riduce sempre più.
Kohonen suggerisce un guadagno che decresce
linearmente con il numero dei passaggi. Il processo di apprendimento dal
punto 2) al 6), deve essere eseguito dalle 100 alle 1000 volte circa. In
questa rete le somiglianze tra le classi vengono misurate con la distanza
euclidea.
La regione dei vicini può essere scelta essere un
quadrato, un cerchio o un esagono. Il valore di Nj*
(cioè il numero di vicini al neurone prescelto) deve essere scelto il
maggiore possibile all’inizio e decrescere anch’esso lentamente
all’aumentare dei cicli di apprendimento.
APPROFONDIMENTI TEORICI
Definiamo l'errore
della rete in funzione del quadrato della differenza tra l'output attuale
e quello desiderato per tutti i pattern che devono essere
appresi.
(1)
Il coefficiente "1/2" non altera la sostanza della formula ma presenta il vantaggio di semplificare alcuni calcoli successivi (*). Il valore di attivazione di ciascun nodo j al pattern p consiste nella somma pesata con w dei precedenti output o.
(2)
A sua volta ciascun output è dato dalla funzione di soglia f, nella fattispecie una sigmoide, applicata alla somma pesata.
(3)
Considerando il rapporto tra E e w possiamo scrivere
(4)
e soffermandoci sul secondo fattore evidenziamo che
(5)
Indicando
(6)
diventa.
(7)
Inoltre si può scrivere
(8)
ed essendo il secondo fattore Df(x)/Dx esso equivale a.
(9)
Considerando poi il primo fattore, e calcolando la derivata di E rispetto ad o, otteniamo.
(10)
Perciò, rimoltiplicando i fattori otteniamo.
(11)
Questo risultato presuppone che siano direttamente valutabili il target t e l'output o, e la sua validità è limitata al solo livello di output. Per i livelli intermedi consideriamo nuovamente il primo dei fattori in cui era stato scomposto g e notiamo che;
(12)
rimoltiplicando ancora i fattori abbiamo infine.
(13)
Questa equazione rappresenta la variazione dell'errore in relazione ai pesi della rete, e fornisce un criterio per ridurre tale errore. A questo punto non resta che calcolare la derivata di f(net).
(14)
ESEMPIO
Scaricate questo programma che genera una rete neurale:
Neural Networks Kit di Southern
Scientific