You are on page 1of 17

1

Tecniche di visione artificiale Appunti dal corso studenti: Manghisi Vito Modesto.
Docente: Prof. Francescomaria Marino. Politecnico di Bari
2010/2011
La classificazione.
Abbiamo visto che nel momento in cui si deve fare una classificazione essa viene basata su alcune features
salienti. Il task della classificazione si può scomporre in due compiti separati:
1. Individuazione o estrazione delle features salienti (preprocessing) che discriminano la presenza o
no di una particolarità nell’oggetto. Questa fase risulta essere parimenti determinante rispetto la
fase di classificazione. L’estrazione e la individuazione delle features è infatti fondamentale ai fini
della correttezza della classificazione successiva. Di fronte ad una immagine composta da una o tre
matrici NxM (rilevante numero di dati), risulta più conveniente effettuare la classificazione sulla
base di un set di features che abbia una popolazione ristretta rispetto i dati completi dell’immagine.
Dobbiamo capire come estrarre le features salienti, al fine di ridurre la ridondanza (features che
presentano caratteristiche già presenti in altre features) ed ottenere una classificazione efficiente.
2. Classificazione (supponiamo per ora di tipo binario con un output 0-1).
La difficoltà del primo step risiede nel fatto che il primo ed il secondo step sono fortemente correlati. Ad
esempio se nel primo step estraggo i coefficienti di Fourier in una certa banda di frequenza, non è detto che
la scelta effettuata a questo livello sia ottimale per il classificatore che andrò ad utilizzare nella fase 2 (il
classificatore deve cioè essere in grado di individuare tra le features quale descrive una tipologia A e quale
una tipologia B). Ne risulta che i due task sono indipendenti ma comunque correlati.
Si può pensare di realizzare un classificatore che fa un esame esaustivo delle varie caratteristiche
applicandole a vari classificatori usando così la “forza bruta”.
Se sono di fronte ad una immagine posso estrarre da essa varie features, il metodo con cui si estraggono le
informazioni dall’immagine corrisponde alla applicazione di una trasformazione su di essa (vedi figura 1)

In questo modo da un segnale che è la rappresentazione puntuale di un oggetto (coefficienti legati ai singoli
pixel) otteniamo la rappresentazione in un altro dominio, che nel caso della trasf. di Fourier sono le
componenti armoniche (bidimensionali) del segnale. Posso allora lavorare in modo massivo cercando di
definire quali tra questi coefficienti meglio descrivono il fenomeno che voglio mappare, facendone anche
tutte le possibili combinazioni, ricercando quali coefficienti meglio descrivono in un classificatore un
fenomeno e poi valutare cosa accade per altri classificatori. In generale si può pensare di descrivere una
immagine con quella che prende il nome della teroria dei residui, ovvero descrivere l’immagine con il suo
valore completo, avere un set di atomi che sono ad esempio per la trasformata di fourier i valori assunti ad
ogni frequenza presente nell’immagine. Tra questi atomi individuiamo quello che meglio approssima
2

l’immagine che vogliamo descrivere a meno di un fattore proporzionale, cioè se l’immagine I è
i i
i
I c F =
¯
valuto quale dei

da solo meglio descrive l’immagine di partenza, in questo modo ho una approssimazione
al primo stadio che mi fornisce l’immagine
0
I commettendo l’errore
0 o
R I I = ÷ , dove
0 0 0
I a c = . Posso
iterare il processo di approssimazione fermandomi quando al passo ottengo una approssimazione
inferiore ad una certa tolleranza. In questo modo ho una serie di valori che meglio descrivono questa
situazione, questi valori sono dati dai coefficienti
i
c e gli indici che individuano gli atomi

. nel nostro
caso l’atomo è una funzione, nella fattispecie l’antitrasformate a quella frequenza, l’atomo è quindi una
immagine. Il coefficiente descrive quanto devo scalare questa immagine. Procedendo con le armoniche
ridurrò sempre di più l’errore fino ad ottenere un errore nullo.
Quando mi fermerò nel processo dovrò memorizzare i vari coefficienti utilizzati e gli indici che individuano
gli atomi. In questo modo una approssimazione dell’immagine è comprimibile in un insieme di coppie di
numeri ( ,
i
c i ), in cui un numero è un floating, e l’altro numero è un intero.
Posso estendere questo concetto all’utilizzo di un secondo dominio di descrizione dell’oggetto. L’insieme
degli atomi che descrivono un aggetto attraverso le coppie coefficiente indice costituiscono un dizionario,
così l’insieme dei coefficienti della serie di Fourier costituisce un dizionario che ha una corrispondenza
biunivoca ed esaustiva con l’immagine. Se ora applico all’immagine un’altra trasformata, ne ottengo la
rappresentazione in un altro dominio caratterizzato da altri atomi. Posso a questo punto effettuare la
descrizione “iterativa” dell’immagine attraverso una ricerca degli atomi più efficienti all’interno dell’insieme
di tutti i dizionari, è cioè possibile che si individui l’atomo maggiormente descrittivo tra quelli appartenenti
ad un dominio di trasformazione ed il successivo tra quelli appartenenti ad un altro. Alla fine del processo
iterativo (quando avrò ottenuto l’approssimazione desiderata) avrò individuato una serie di atomi che
potranno appartenere a più dizionari. Alla fine descriverò l’immagine con un insieme di atomi
e di pesi
i i
a c ovvero un insieme di pesi e di indici che punteranno ad un dizionario globale ristretto
rispetto l’unione dei dizionari. (N.B.: in uno step successivo non potrò mai ritrovarmi lo stesso atomo come
descrittore, poiché esso è ortogonale al residuo).
Possiamo fare un esempio pensando all’algebra vettoriale, e supponiamo di avere un’immagine di tre pixel
caratterizzata da tre valori che sono un punto nello spazio tridimensionale, sia il punto P(5,2,5), una base di
quasto spazio vettoriale è la terna {(1,0,0); (0,1,0); (0,0,1)}, se ora devo scegliere un atomo che meglio
descrive l’immagine, esso è il primo che con un peso pari a 5 mi da come descrizione (5,0,0), ottengo allora
come descrizione i=1 e ci=5.

3

Ottengo il residuo che è il minore di tutti gli altri che avrei dagli altri atomi. Sicomme ho un certo errore che
è maggiore di ε, itero il processo ricercando un altro atomo che in questo caso è il terzo (i=3) con peso 3. In
questo modo ho ridotto l’errore. Questo dizionario , fatto dai tre atomi è consistente, poiché da solo riesce
a descrivere questa realtà, è però possibile utilizzare un altro dizionario, (un’altra base dello spazio) ad
esempio la terna {(0,2,3); (0,1,0); (1,0,0)}. Ora supponiamo di avere a disposizione i due dizionari, se devo
fare la descrizione dell’immagine ho come dizionario globale quello in figura. Con un solo dizionario dopo il
secondo step ho un residuo dato dalla differenza (5.0.3) e (5.2.3), ora invece dopo il primo step vado a
scegliere il 4 con coefficiente 1 commettendo errore nullo.

In pratica si può pensare di descrivere nel modo più compatto possibile la fenomenologia da trattare per
poi passare alla classificazione.la classificazione si può fare con una serie di tecniche tra le quali le reti
neurali.
Le reti neurali
Una rete neurale è un sistema che dato un certo input ne discrimina l’appartenenza o meno ad una certa
classe, l’input alla rete sarà l’insieme di dati che descrivono il fenomeno da classificare (banalmente i pixel
dell’immagine, ma dato che la complessità della rete neurale dipende dal numero di dati in ingresso
dobbiamo cercare di ridurre il numero delle features salienti in ingresso).
La dimensione del primo stadio altri non è che il numero di input in ingresso, questi input sono dei numeri.

La rete neurale associa una serie di input ad una serie di uscite desiderate. Abbiamo che
K
X è l’insieme
delle features che descrivono un oggetto, mentre
dK
Y è la classe a cui quell’oggetto appartiene.
La rete opera in due fasi distinte:
- Addestramento (fa parte della fase di creazione del classificatore, nella quale fase, oltre definirne
la topologia, cioè definire ad esempio quanti neuroni posizionare in ogni stadio e quanti stadi
utilizzare, si vanno ad inserire all’interno dei neuroni i valori dei pesi con cuoi vengono pesate le
4

informazioni che arrivano ad i singoli neuroni. All’interno di questa prima fase è possibile, ma non
sempre, che l’addestramento subisca una evoluzione durante il funzionamento stesso della rete.
Nella fase di addestramento la rete viene affiancata (vedi figura) da una intelligenza che valuta il
comportamento della rete stessa.

Se la rete fosse già addestrata su un data train, essa con ingresso il data train fornirebbe in uscita le
risposte corrette
dK
Y desiderate, con un rating di errore pari a quello scelto in fase di
addestramento. Durante la fase di addestramento, invece, l’intelligenza esterna alla rete valuta se
c’è corrispondenza tra l’uscita fornita dalla rete
K
Y per un ingresso
K
X e quella desiderata
dK
Y .
Se la rete ha operato correttamente l’intelligenza superiore non interviene, se invece viene rilevato
un errore l’intelligenza interviene andando a variare i pesi della rete neurale, andando ad
introdurre un certo ∆w che è funzione dell’uscita della rete a prodotto e di quella che avrebbe
dovuto produrre.
- Fase di evoluzione.
Struttura rete neurale

Una rete neurale risulta composta da un insieme di neuroni o perceptroni che possono essere collegati con
opportune topologie. I neuroni sono tutti uguali, essi hanno il comportamento comune di accumulare
attraverso uno stadio di somma gli ingressi al neurone stesso. Tutti i neuroni a monte del neurone in esame
hanno delle uscite che vanno in ingresso al neurone a valle, tali ingressi vengono modulati dai pesi e
5

sommati nel primo stadio del neurone. Il risultato di questo stadio viene opportunamente sogliato, per
dare l’uscita del neurone. Se la somma pesata è superiore ad un certo teta, diremo che il neurone produce
una segnale di attivazione, altrimenti diremo che produce un segnale di inibizione.
NB: per ogni neurone i pesi in ingresso possono essere differenti.
L’uscita del sommatore è
ji i
i
net w x =
¯

Mentre l’uscita dal neurone è ( ) y HS net u = ÷
E’ possibile effettuare una semplificazione dello schema rendendo l’operatore di soglia indipendente da u ,
lo facciamo introducendo un ulteriore ingresso con valore costante pari a -1 e pesato con un peso pari a u ,
ottenendo la schematizzazione in figura

Ne otteniamo
ji i
i
net w x u = ÷
¯
, in questo modo la sogliatura viene fatta su net>0 e non più su net-u >0,
il risultato rimane lo stesso, ma svincola l’operazione di sogliatura da u . In questo modo tutti i neuroni
sono uguali e tutti i loro parametri particolari sono esternati nei pesi (u incluso). Ora devo solo valutare i
pesi per i neuroni e non i pesi e la soglia. Dobbiamo quindi trovare l’algoritmo per configurare i pesi.
Vediamo due esempi di classificazione:

Nel secondo esempio ho bisogno di fare una classificazione tra più classi (3), in questo caso un unico
neurone non può classificare tra più di due classi (una di appartenenza ed una di non appartenenza), quindi
6

ho bisogno nell’esempio di tre neuroni in uscita, ognuno dei quali classifichi l’appartenenza o no ad una
delle tre classi. (Nell’esempio A, B, C sono tre classificatori diversi !).
Addestramento del neurone
Pensiamo al momento al singolo neurone (il discorso è però legato a tutta la rete). Il neurone effettua un
accumulo pesato ed una operazione di soglia. Lo scopo della fase di adattamento consiste nella eventuale
correzione dei pesi in ingresso attraverso l’introduzione di un opportuno ∆w.

Il ∆w
i
che va introdotto è la quantità ηδ

dove η è il oeffiiente di pprendimento (lo pprofondiremo
dopo) e δ=(yd-y) è l’errore ommesso, quindi l orrezione sui pesi è ostituit on un unio fttore di
proporzionlit{ sui reltivi ingressi. Vedimo quli sono le fsi dell’lgoritmo di ddestramento.
Possiamo osservare come compiuta questa modifica il neurone si comporti in modo corretto.

Per prima cosa si deve creare un training set, cioè un insieme di dati che serve all’addestramento della rete.
L’insieme deve contenere un certo numero di campioni che la rete deve classificare (caratterizzati
attraverso i loro features vectors) associati a delle etichette che diano la corretta classificazione dei
campioni (classificazione binaria).
- Al primo passo si inizializzano i vari w
i
con valori casuali, dopo di che si inserisce nella rete una delle
K coppie, in base alla X
k
in ingresso la rete produrrà una uscita Y
k
, si confronta Y
k
con Y
dk
(nota
dall’etichetta di X
k
) e se sono uguali passo al prossimo elemento, altrimenti devo provvedere a
7

correggere i pesi. La correzione avviene sul singolo peso sommando ad esso l’errore compiuto
moltiplicato per l’ingresso x
i
al singolo peso e per il coefficiente di apprendimento η.
- Una volta effettuata la correzione sui pesi si procede nello stesso modo per tutti i valori del
training set, ovvero si iterano i passi dal 3 al 5 per tutte le coppie del training set. Completato
l’ddestrmento sul trining set si die he si è omplett un’epoca.
- A questo punto si ripete la classificazione sul training set procedendo nello stesso modo con la
realizzazione di epoche successive, ognuna che porta a certe correzioni sui pesi
- Mn mno he si proede on le epohe si h un progressiv riduzione dell’error rte dell
rete (in realtà potrebbe anche oscillare, ma con un range di oscillazione che tende a diminuire),
he ndr{ d ssestrsi su un pit{ fisiologi dell rete stess. Ci fermeremo nell’iterre le
epoche quando avremo raggiunto un error rate desiderato (in questo caso nel ciclo for di ogni
epoca va inserito un contatore che si incrementa in caso di errore di classificazione che
onsente ll fine di ogni epo di vere un vlutzione dell’error rte ottenuto ll’epo
preedente, il onttore si dovr{ poi zzerre ll’inizio di ogni nuov epo) o qundo avremo
nnullto l’errore.
Questo non significa che la rete abbia imparato a classificare, vediamo un esempio in cui al neurone sono
associati solo due ingressi. Il neurone nell’esempio fa la classificazione di un oggetto che è descritto in un
features space in
2
, per cui l’oggetto viene descritto da due valori (un punto nel piano). La classificazione
effettuata dunque porta alla suddivisione del piano in due semipiani. In sostanza il valore di y sarà 0 o 1
quando
1
1 1 2 2 2 1
2 2
1
0 ovvero 0 ;
i i
i
w
w x w x w x x x
w w
u u u ÷ > + ÷ > ¬ > ÷ +
¯
abbiamo quindi descritto
la disequazione associata ad una retta nel piano.

Questo ci fornisce un’informazione su quale è il grado di complessità di un classificatore finalizzato a
classificare un certo obiettivo in funzione di come la
classe che si vuole classificare può essere mappata
nello spazio dei parametri che descrivono la
classificazione. In uno spazio a due parametri posso
pensare di avere due classi di tipo binario, possiamo
supporre di avere una classificazione che porti ad un
valore di 1 se entrambe le caratteristiche sono
verificate, questo equivale alla implementazione di
una porta AND con la suddivisione del piano in due
semipiani suddivisi da una retta che delimita le due
8

aree, una prima in cui entrambe le condizioni verificate ed una seconda dove ciò non accade. Con i pesi in
figura ho
2 1
0.5 1. x x > ÷ + (Pesi finali). (Iniziali w
1
=0, w
2
=2).
Questo ci dice che un singolo neurone con due ingressi è in grado di effettuare la suddivisine di un piano
delle features in due semipiani separati da una retta. Vedremo degli esempi in cui non è sufficiente una sola
retta ed il classificatore dovrà essere necessariamente più complicato.
Limiti del perceptron
La schema appena visto funzione se il problema è linearmente separabile, ovvero se i pattern che
identificano l’appartenenza ad una classe sono
contenuti in un semipiano dello spazio di ingresso.
Nel caso in cui ho ingressi n_dimensionali, i pattern
devono essere separabili con un iperpiano. Se ho un
ingresso tridimensionale la separazione avviene
attraverso un piano. Ribadiamo che lo schema
funziona con un singolo neurone solo fino a quando
le classi sono separabili linearmente cioè da un
piano o un iperpiano.


Si comprende il significato di questa affermazione se al posto di implementare una AND si vuole
implementare una XOR. In questo caso la rete neurale non sarà implementabile con un singolo neurone, lo
possiamo osservare graficamente notando che la
classe da individuare non è individuata da una singola
retta. Dovrò usare più neuroni in qualche modo
strutturati per ottenere quelle che sono le topologie
multistrato. Avendo una idea di quella che sarà la
rappresentazione della classe nello spazio delle
features, decideremo quanti sono i parametri
significativi in ingresso (numero di ingressi al
neurone), noto invece come circoscrivere la classe (ad
esempio con un poligono) definiremo il numero di
neuroni necessari e la loro organizzazione topologica.

In questo caso sarà sufficiente pensare ad una organizzazione di tipo
multistrato con opportune funzioni di uscita , nell’immagine seguente
vediamo alcune possibili funzioni di uscita, altre quella di HeavySide vista
prima. Quando andremo a vedere come l’algoritmo di ricalcolo dei pesi
opera, ci accorgeremo che un vincolo che necessariamente queste
funzioni dovranno rispettare sarà la continuità della derivata e della
funzione stessa. Questo vincolo dovrà essere rispettato nella scelta della
funzione di uscita che ci porterà a selezionare una sigmoide a questo
scopo. Vediamo allora il modo di connettere i neuroni.
9

Reti multistrato
E’ possibile connettere i neuroni a nostro piacimento, ma si
osserva che una topologia di connessione, che introduce delle
semplificazioni nell’algoritmo di aggiornamento dei pesi e che non
toglie genericità alla capacità della rete di descrivere un evento, è
quella che prende il nome di schema multistrato. In uno schema
multilayer i neuroni sono raggruppati in più strati e i neuroni di
ogni strato hanno la caratteristica di ricevere gli ingressi
provenienti solo dai neuroni dello strato precedente, e di fornire
le loro uscite solo in ingresso allo strato successivo. Non è quindi
possibile un collegamento diretto tra due neuroni che siano in due strati non adiacenti, questa però non è
una limitazione topologica, poiché ove si avesse la necessità di realizzare un trasferimento del genere
sarebbe sufficiente inserire un neurone addizionale nello strato intermedio(in rosso in figura) con peso
unitario sull’uscita (in ingresso al neurone intermedio) da trasferire allo stato successivo.
Vediamo un esempio di rete a tre strati (in realtà qui lo strato di
input non è rappresentato da neuroni, ma dai semplici oggetti in
ingresso. Nel nostro esempio vogliamo implementare una
classificazione di tipo XOR in cui come già detto il problema non
è linearmente separabile. Le reti a tre strati sono in grado di
separare regioni convesse con numero di lati minore o uguale al
numero di neuroni nello strato nascosto.

Questa struttura consente di isolare
zone individuate da due rette. Se la rete è
realizzata con un solo neurone posso fare
una separazione del tipo nella figura(a)
seguente, effettuando una separazione del
piano in due semipiani, uno
corrispondente alla classe A ed uno alla classe non A. con un’altra rete
analoga posso fare una classificazione del tipo in figura(b). se ora invio
le uscite di queste due reti a singolo neurone in ingresso ad un altro
neurone strutturato come la AND dell’esempio precedente otterrò come
risultato l’implementazione della XOR visualizzabile in figura(c).
E’ possibile, aumentando il
numero di neuroni nello
strato intermedio, aumen-
tare il numero di rette o
semirette o segmenti che
delimitano una classe nello spazio delle features, è possibile
visualizzare un esempio nella figura seguente, in cui viene
delimitata da tre segmenti una regione convessa con uno strato
intermedio composto da tre neuroni.

10

In generale con una architettura a 3 strati con M neuroni nello
strato hidden possiamo individuare le classi in uno spazio delle
features n_dimensionale delimitando una regione convessa
racchiusa al più da M segmenti. Per individuare la topologia di
una rete neurale di questo tipo posso circoscrivere nel piano
delle features una regione convessa delimitata da un poligono
convesso ed associare alla retta passante per ognuno dei lati un
neurone che separerà il piano in due. I problemi sorgono se le
regioni da delimitare non sono convesse. Supponiamo per
comodità di trovarci ancora in uno spazio a due parametri.
Se ho la situazione nella figura affianco, se non avessi gli elementi
in rosso potrei supporre di delimitare l’area con 4 segmenti
(poligono verde) ad ognuno dei quali è associato un neurone nello
strato intermedio da mettere poi in AND nello strato finale. Questo
tipo di classificazione conterrebbe all’interno anche gli oggetti rossi
che invece non appartengono alla classe dei rettangoli neri. L’area
da delimitare è in realtà un poligono concavo e non è possibile
quindi effettuare la classificazione con una topologia a tre strati.
Per effettuare una classificazione corretta devo descrivere il
poligono che circoscrive la classe con i tratti in azzurro, non è
quindi possibile racchiudere la classe in un unico poligono
convesso, e la non convessità ci porterebbe con una rete a tre
layer o ad includere oggetti estranei alla classe o ad escludere
oggetti appartenenti alla classe. Per procedere dovremo
considerare la classe come racchiusa nello spazio delle
features da più sottoregioni convesse, implementeremo
quindi una parte della rete neurale per delimitare la classe
della sottoregione a destra ( e quindi 4 neuroni nello strato
intermedio che convergono in un neurone in uno strato successivo per delimitare la prima sottoregione
convessa), ed una seconda parte (ancora di 4 neuroni nello
strato nascosto convergenti in uno che implementa l’AND) per
delimitare la seconda sottoregione convessa. Sarà poi
necessario considerare l’insieme delle due sottoregioni che
sarà ottenuto facendo convergere le due uscite dell’ultimo
strato in un neurone aggiuntivo presente in un quarto strato
che fornirà in uscita l’OR delle due aree (l’Or sarà
implementato in modo simile all’AND solo che ora dobbiamo
considerare il semipiano che delimita tutte le coppie (x,1) e
(1,x)). In questo modo siamo passati ad una architettura a 4
strati che sono in grado di separare regioni qualsiasi. Quindi al terzo strato avrò tanti neuroni quanti sono i
sottopoligoni convessi da considerare. L’aggiunta di altri strati non migliora la capacità di classificazione.


11

Importanza della non linearità
Le funzioni di uscita sono quelle funzioni che in pratica vanno a modulare la sommatoria degli ingressi
pesati prima che questa vada in uscita dal neurone. Queste funzioni introducono una non linearità, il fatto
che la funzione sia non lineare ha una utilità fondamentale.
Se la funzione fosse lineare e quindi introducesse una
semplice rimodulazione lineare della sommatoria,
tutto quello fin qui visto sull’utilità di aggiungere uno
strato alla rete risulterebbe inutile. Se ci fosse una
linearità si potrebbe pensare che lo strato di ingresso
inserisce un certo numero di campioni descrivibile
come un vettore X, il vettore X (1xN) nel primo strato
viene moltiplicato per una matrice W
21
(NxM) dove M
è il numero di neuroni nello strato. Nella
moltiplicazione matrice per vettore (ottengo un
vettore 1xM) con tante componenti quanti sono gli
ingressi ai neuroni dello strato successivo che sarà
caratterizzato da una matrice W
32
di dimensione MxL dove l è il numero di neuroni dello strato. Se la
funzione di uscita non introduce discontinuità la trasformazione subita dai vettori in ingresso alla rete può
essere espressa con una unica trasformazione lineare data da un’unica matrice W
eq
=W
21
W
32
(a meno di un
eventuale coefficiente di proporzionalità introdotto dalle funzioni di uscita) di dimensioni NxL
corrispondente ad un unico livello composto da L neuroni secondo la trasformazione Z=W
eq
X e la rete
sarebbe sempre riconducibile ad una rete a due strati. E’ dunque l’introduzione di una non linearità che da
valenza all’organizzazione multistrato e che consente di descrivere regioni non convesse.
Addestramento della rete neurale
L’addestramento può essere eseguito con diverse metodiche,
l’algoritmo che ha preso più piede per l’addestramento di reti
multistrato è quello di back propagation. L’algoritmo è
applicabile su reti multistrato. L’ingresso a questi neuroni deve
avere un valore reale compreso tra 0 e 1 e la funzione di uscita
deve essere non lineare e nella fattispecie ha un andamento a
sigmoide. Si prende la sigmoide poiché servirà avere la
continuità nella derivata prima. Quando operiamo sul singolo
oggetto del training X
k
, con tante componenti quanti sono gli
elementi in ingresso alla rete (negli esempi che abbiamo fatto abbiamo visto essere 2, ovvero x
1
e x
2
),
ad esso è associata l’uscita desiderata Y
dK
, e l’uscita
ottenuta dalla rete Y
k
, il training set deve essere
composto da oggetti con associata una Y
dK
di entrambe le
classi, altrimenti la rete non apprenderebbe nulla. Nella
figura ho q neuroni nello strato di ingresso, p neuroni
nello strato intermedio e n neuroni nello strato finale.
Quando la rete ha più di due strati noi siamo a
conoscenza del valore corretto Y
dK
in uscita finale, se
andiamo a confrontarlo con il valore in uscita Y
k

12

possiamo capire se la classificazione è corretta o se si deve applicare una correzione ai pesi, non siamo però
in grado di comprendere se l’errore di classificazione è legato ad una scorrettezza nei pesi in ingresso al
livello intermedio o all’ultimo livello. Se allora vado a correggere i pesi tra i primi due livelli e l’errore viene
generato al livello successivo non riesco ad addestrare la rete (inoltre non sono in grado di valutare l’errore,
e quindi la correzione da apportare ai pesi, al livello intermedio). Non abbiamo infatti possibilità di
verificare la correttezza delle uscite ai livelli intermedi. L’idea alla base della back propagation è quella di
andare a fare il tuning dei pesi procedendo dagli ultimi strati della rete verso quelli superiori.
Vediamo come si procede. Sul generico oggetto X
k
da classificare l’errore nell’ultimo strato sarà calcolato
come l’errore quadratico e sarà calcolato come la somma degli errori commessi da tutti gli n neuroni di
quello strato
2
1
( )
n
k kj kj
j
E t y
=
= ÷
¯
. L’errore globale (valutabile alla fine di un epoca) sarà invece la somma
degli errori commessi su tutti gli oggetti del training_set sempre valutati sull’ultimo stadio
1
M
k
i
E E
=
=
¯
.
Su questi valori imposteremo la correzione dei pesi cercando di azzerare quanti più errori possibili,
l’algoritmo convergerà nel momento in cui l’errore globale sarà minore di un certo ε fissato.
Obiettivi della Back Propagation
L’obiettivo che si prefigge una rete neurale non è
evidentemente la mera corretta classificazione del training
set (negli effetti il training set è già classificato), ma
raggiungere per la rete la capacità di classificare
correttamente oggetti di cui non conosce la classe di
appartenenza e che non ha già avuto la possibilità di avere
in ingresso nella fase di training. Il primo obiettivo per la
rete è dunque l’apprendimento. Per questo motivo è
importante inserire nel training set degli oggetti che siano
efficaci nell’esemplificare tutti le possibili tipologie degli
oggetti da classificare. Se ad esempio siamo di fronte ad
una rete finalizzata ad una classificazione di caratteri di scrittura (OCR), se in fase di addestramento
inserisco come oggetti labelled solo alcune evenienze della “a”, in fase di successiva classificazione di
fronte ad un carattere “a” differente dalle evenienze presenti nel training set è probabile che la rete
fornisca una classificazione errata non riconoscendo in modo corretto il carattere; analogo discorso si può
fare su immagini riprese durante le 24 ore della giornata, se inseriamo nel training set solo immagini
relative alle ore più luminose è probabile che di fronte ad immagini per le ore meno illuminate (ad esempio
il crepuscolo) avrò una classificazione inconsistente. Per verificare se una rete addestrata raggiunge un
livello di classificazione adeguato su esempi mai analizzati, di norma viene creato oltre il training set un
insieme di oggetti detto validation set contenente dei campioni che non sono inclusi nel training set. Tale
validation set sarà anch’esso etichettato in base alla classe di appartenenza degli oggetti, e sarà mandato in
ingresso alla rete neurale in una fase successiva a quella di addestramento. Questo ci consentirà di
verificare se la rete è in grado di effettuare una classificazione consistente, andando a valutare l’errore
globale sul set di validazione e verificando se anche esso è inferiore alla soglia ε che abbiamo individuato
come valore per arrestare la fase di addestramento, ovvero come obiettivo di convergenza. E’ anche
possibile, al termine di questa fase di validazione, prendere gli oggetti del set di validazione, su cui è stato
13

commesso un errore di classificazione nella fase di validazione, ed inglobarli in un set di training allargato
che viene utilizzato per una nuova fase di addestramento che dovrebbe condurre ad una rete più efficiente.
Per quello che concerne l’obiettivo di convergenza, si
deve ottenere la minimizzazione dell’errore globali. Se
supponiamo che l’errore globale sia esprimibile in
funzione della matrice dei pesi del livello in esame, e che
sia possibile avere un grafico che descriva la variazione
dell’errore al variare dei pesi come nella figura affianco
(evidentemente non è possibile una rappresentazione
come quella della figura poiché lo spazio dei pesi è
multidimensionale), allora analizzando il grafico
osserviamo che vi sono due possibili andamenti: o la
variazione dell’errore è positiva al crescere del peso, o la
variazione dell’errore è negativa al crescere del peso.
Questa osservazione ci consente di ricavare una regola
per l’aggiornamento dei pesi:
- nel primo caso se 0
ji
E
w
c
>
c
per ottenere una
riduzione dell’errore nella fase di training
dovremo impostare un ∆w<0;
- nel secondo caso se 0
ji
E
w
c
<
c
per ottenere una
riduzione dell’errore nella fase di training
dovremo impostare un ∆w>0.
In generale sarà
ji
ji
E
w
w
n
c
A = ÷
c
(regola del gradiente),
dove η è il coefficiente di apprendimento (learning rate).
Il coefficiente di apprendimento esprimerà in qualche
modo la velocità con cui ci si approssima al minimo
dell’errore, con valori elevati di η si ha uno spostamento
maggiore verso il minimo rispetto ad un η piccolo.
L’utilizzo di un η elevato non è però sinonimo di un
avvicinamento ottimale al minimo come non lo è
un valore basso.
Nel primo caso è infatti possibile che si vada oltre il
minimo, passando al passo successivo in una
condizione in cui la correzione sui pesi è di segno
opposto entrando in una condizione di oscillazione
intorno al minimo. In questo caso una possibile
soluzione consiste nel variare η in funzione
14

dell’errore, in modo da accelerare la convergenza all’inizio e ridurre le oscillazioni alla fine, oppure si può
pensare di smorzare le oscillazioni con un filtro passa basso sui pesi con una correzione nella forma:
( ) ( 1),
ji j i ji
w t x w t no o A = + A ÷ dove α è detto momentum.
Nel secondo caso si hanno due controindicazioni, la
prima è che la velocità di apprendimento è minore, la
seconda è che, dato che la forma quadratica che
esprime l’errore risulta distorta dalla funzione di uscita,
essa può non presentare un profilo monotono e si corre
il rischio di fermarsi in un minimo locale prima di
incontrare il minimo globale, in questo caso occorre
ricominciare da capo con nuovi pesi. Non esiste una
metodica predeterminata per una scelta ottimale a
priori del fattore di apprendimento, si compie una
scelta, si effettua l’addestramento della rete e si valuta
l’error rate raggiunto. Se questo valore è accettabile si effettua la validazione valutando l’error rate sul
validation set, e in base ai risultati ottenuti si decide se rieffettuare l’addestramento su un training set
allargato, oppure se l’error rate sul training set non è accettabile vuol dire che si è rimasti intrappolati in un
minimo locale e quindi il valore del fattore di apprendimento va accresciuto. Ci accorgiamo invece che il
valore di tale coefficiente è troppo alto se osserviamo una oscillazione nell’error rate in iterazioni
successive del training.
Vediamo allora come si procede nella correzione dei pesi dal punto di vista analitico.
Abbiamo detto che la variazione da dare al singolo peso
è data dalla variazione dell’errore rispetto al singolo
peso moltiplicata per il fattore di apprendimento η
cambiata di segno

k
ji
ji
E
w
w
n
c
A = ÷
c
,
sviluppando la derivata di funzioni composte abbiamo

j
k
ji
j ji
net
E
w
net w
n
c
c
A = ÷
c c
,
essendo
1
p
j ji i
i
net w x
=
=
¯
, si ha
j
i
ji
net
x
w
c
=
c
e quindi posto
k
j
j
E
net
o
c
= ÷
c
, otteniamo
ji j i
w x no A = .
Resta a questo punto da calcolare il valore dei
j
o .
Osservando l’espressione di
j
o si vede che

;
j
k k
j
j j j
y
E E
net y net
o
c
c c
= ÷ = ÷
c c c

ma
2
1
( )
n
k kj kj
j
E t y
=
= ÷
¯

quindi
2
1
( )
2( );
n
kj kj
j
k
kj kj
j j
t y
E
t y
y y
=
c ÷
c
= = ÷ ÷
c c
¯

15

inseriremo il fattore -2 in η, e poiché
(1 ^ ) ( )
'( ) ;
j j j
j
j j j
f e net y f net
f net
net net net
c ÷ c c
= = = =
c c c

otteniamo ( ) '( ).
j kj j j
t y f net o = ÷
Da quest’ultima espressione si evidenzia la necessità che la funzione di attivazione sia derivabile, ed è per
questo che in genere si sceglie la sigmoide come funzione di attivazione, poiché essa ha la caratteristica di
essere non lineare (ricordiamo la necessità che la funzione introduca una discontinuità al fine di
implementare una rete multilayer) e di avere andamento continuo con la derivata prima. Possiamo in
questo modo effettuare gli aggiornamenti dei pesi all’ultimo strato.
Per procedere al calcolo dei
j
o nei neuroni intermedi
propaghiamo l’errore all’indietro. Se utilizzassimo il
calcolo fin qui visto avremmo ( ) '( )
i di i i
x x f net o = ÷
dove nel calcolo della quantità ( )
kj j
t y ÷ abbiamo
sostituito all’uscita desiderata
kj
t il valore di uscita
intermedia desiderata
di
x e all’uscita ottenuta il valore di
quello che sarà l’ingresso allo strato successivo
i
x . Qui
però non abbiamo a disposizione i valori desiderati
intermedi e quindi procediamo andando ad approssimare
l’errore compiuto a questo livello con la sommatoria delle
correzioni
j ji
w o del livello successivo. Possiamo
osservare che, quando si ha una classificazione corretta in
uscita all’ultimo strato, il coefficiente
j
o calcolato è nullo,
e questo fa si che siano nulle sia le correzioni dei pesi
sull’ultimo livello, sia quelle sui livelli precedenti dove il
i
o
è sempre combinazione lineare dei
j
o .
Possiamo ricapitolare l’algoritmo per l’addestramento
della rete:
Per quello che riguarda il processo di
apprendimento possiamo fare alcune
osservazioni sui valori di inizializzazione dei
pesi.
16

Partendo con dei valori iniziali piccoli dei pesi, essendo la funzione di attivazione a sigmoide, si osserva
come a dei piccoli valori dei pesi corrisponda un valore dell’argomento della funzione di attivazione
prossimo allo zero. Per questi valori dell’argomento la funzione di attivazione presenta i valori più elevati
della derivata prima e dunque questo porta ad una correzione maggiore sui pesi essendo ∆w ∝ f’(net).

Generalizzazione
E’ la capacità della rete di riconoscere stimoli
leggermente diversi da quelli con cui è stata addestrata.
Per valutare la capacità della rete di generalizzare gli
esempi del TS, si definisce un altro insieme di esempi,
detto Validation Set (VS). Terminato l’apprendimento sul
TS (E
TS
< ε ), si valuta l’errore sul VS (E
VS
).
Supponiamo di avere gli oggetti in figura e che essi
debbano essere classificati rispetto ad una certa retta, se
abbiamo pochi neuroni nascosti, nel descrivere la
poligonale che traccia il confine tra le due classi ho un
numero ridotto di possibili spezzature della curva.
Aumentando il numero dei neuroni nascosti posso
descrivere la classe in modo più dettagliato, però se gli
elementi del training set sono quelli rossi in figura, e la
descrizione è troppo dettagliata, si corre il rischio di fare
con troppi neuroni nascosti un fitting degli oggetti che li
comprenda con precisione, e che non lasci quindi spazio
alle sottoclassi individuate per contenere elementi
differenti da quelli del training set (avremmo cioè un
errore elevato sugli oggetti al di fuori del training set a
seguito di un processo di overtraining) .




Consideriamo la figura a destra e supponiamo di fare
un addestramento con un certo numero di iterazioni.
Supponiamo anche che con il nostro training set al
crescere del numero di iterazioni si arrivi ad un
comportamento con errore sul training set E
TS

TS
al
secondo punto di arresto in figura. Quando andiamo a
17

fare la verifica con il nostro set di validazione troviamo un errore di sul
set di validazione che dopo aver raggiunto un minimo (pari ad ε
VS
)nel
caso di rete addestrata con un numero minore di iterazioni, ritorna a
crescere. Questo accade perché anche in questo caso abbiamo
effettuato un overtraining della rete.
Per migliorare la capacità di generalizzazione si può addestrare la rete
sul TS, monitorare l’errore sul VS (E
VS
) e fermare l’apprendimento
quando E
VS
< ε
VS
.

Se ora applico all’immagine un’altra trasformata.0). sia il punto P(5.0). Posso a questo punto effettuare la descrizione “iterativa” dell’immagine attraverso una ricerca degli atomi più efficienti all’interno dell’insieme di tutti i dizionari. Procedendo con le armoniche ridurrò sempre di più l’errore fino ad ottenere un errore nullo. poiché esso è ortogonale al residuo). una base di quasto spazio vettoriale è la terna {(1.2. Quando mi fermerò nel processo dovrò memorizzare i vari coefficienti utilizzati e gli indici che individuano gli atomi.B.1)}. Possiamo fare un esempio pensando all’algebra vettoriale. questi valori sono dati dai coefficienti ci e gli indici che individuano gli atomi .0). se ora devo scegliere un atomo che meglio descrive l’immagine. i ).5). Alla fine descriverò l’immagine con un insieme di atomi ai e di pesi ci ovvero un insieme di pesi e di indici che punteranno ad un dizionario globale ristretto rispetto l’unione dei dizionari. nella fattispecie l’antitrasformate a quella frequenza. Posso iterare il processo di approssimazione fermandomi quando al passo ottengo una approssimazione inferiore ad una certa tolleranza. dove I 0  a0c0 .: in uno step successivo non potrò mai ritrovarmi lo stesso atomo come descrittore. esso è il primo che con un peso pari a 5 mi da come descrizione (5.0. In questo modo ho una serie di valori che meglio descrivono questa situazione. cioè se l’immagine I è I  valuto quale dei c F i i i da solo meglio descrive l’immagine di partenza.l’immagine che vogliamo descrivere a meno di un fattore proporzionale.1. l’atomo è quindi una immagine. (N. L’insieme degli atomi che descrivono un aggetto attraverso le coppie coefficiente indice costituiscono un dizionario. Il coefficiente descrive quanto devo scalare questa immagine. Posso estendere questo concetto all’utilizzo di un secondo dominio di descrizione dell’oggetto. nel nostro caso l’atomo è una funzione. ottengo allora come descrizione i=1 e ci=5. in cui un numero è un floating. ne ottengo la rappresentazione in un altro dominio caratterizzato da altri atomi. Alla fine del processo iterativo (quando avrò ottenuto l’approssimazione desiderata) avrò individuato una serie di atomi che potranno appartenere a più dizionari. In questo modo una approssimazione dell’immagine è comprimibile in un insieme di coppie di numeri ( ci . (0. (0. 2 . e supponiamo di avere un’immagine di tre pixel caratterizzata da tre valori che sono un punto nello spazio tridimensionale. così l’insieme dei coefficienti della serie di Fourier costituisce un dizionario che ha una corrispondenza biunivoca ed esaustiva con l’immagine. in questo modo ho una approssimazione al primo stadio che mi fornisce l’immagine I 0 commettendo l’errore R0  I o  I .0. e l’altro numero è un intero. è cioè possibile che si individui l’atomo maggiormente descrittivo tra quelli appartenenti ad un dominio di trasformazione ed il successivo tra quelli appartenenti ad un altro.0.

In pratica si può pensare di descrivere nel modo più compatto possibile la fenomenologia da trattare per poi passare alla classificazione. questi input sono dei numeri. Abbiamo che X K è l’insieme delle features che descrivono un oggetto.0. oltre definirne la topologia.3).0). nella quale fase. l’input alla rete sarà l’insieme di dati che descrivono il fenomeno da classificare (banalmente i pixel dell’immagine. è però possibile utilizzare un altro dizionario. fatto dai tre atomi è consistente.2. Questo dizionario . ora invece dopo il primo step vado a scegliere il 4 con coefficiente 1 commettendo errore nullo. Sicomme ho un certo errore che è maggiore di ε. itero il processo ricercando un altro atomo che in questo caso è il terzo (i=3) con peso 3.Ottengo il residuo che è il minore di tutti gli altri che avrei dagli altri atomi. Con un solo dizionario dopo il secondo step ho un residuo dato dalla differenza (5. La rete opera in due fasi distinte:  Addestramento (fa parte della fase di creazione del classificatore. si vanno ad inserire all’interno dei neuroni i valori dei pesi con cuoi vengono pesate le 3 . (0. (1.1.la classificazione si può fare con una serie di tecniche tra le quali le reti neurali.3) e (5.0.0)}. In questo modo ho ridotto l’errore. La dimensione del primo stadio altri non è che il numero di input in ingresso.2. cioè definire ad esempio quanti neuroni posizionare in ogni stadio e quanti stadi utilizzare. ma dato che la complessità della rete neurale dipende dal numero di dati in ingresso dobbiamo cercare di ridurre il numero delle features salienti in ingresso). mentre YdK è la classe a cui quell’oggetto appartiene. (un’altra base dello spazio) ad esempio la terna {(0. La rete neurale associa una serie di input ad una serie di uscite desiderate. Ora supponiamo di avere a disposizione i due dizionari.3). poiché da solo riesce a descrivere questa realtà. se devo fare la descrizione dell’immagine ho come dizionario globale quello in figura. Le reti neurali Una rete neurale è un sistema che dato un certo input ne discrimina l’appartenenza o meno ad una certa classe.

Fase di evoluzione. Tutti i neuroni a monte del neurone in esame hanno delle uscite che vanno in ingresso al neurone a valle. se invece viene rilevato un errore l’intelligenza interviene andando a variare i pesi della rete neurale.informazioni che arrivano ad i singoli neuroni. essi hanno il comportamento comune di accumulare attraverso uno stadio di somma gli ingressi al neurone stesso. con un rating di errore pari a quello scelto in fase di addestramento. tali ingressi vengono modulati dai pesi e 4 . Durante la fase di addestramento. Se la rete ha operato correttamente l’intelligenza superiore non interviene.  Struttura rete neurale Una rete neurale risulta composta da un insieme di neuroni o perceptroni che possono essere collegati con opportune topologie. che l’addestramento subisca una evoluzione durante il funzionamento stesso della rete. invece. All’interno di questa prima fase è possibile. ma non sempre. Se la rete fosse già addestrata su un data train. essa con ingresso il data train fornirebbe in uscita le risposte corrette YdK desiderate. l’intelligenza esterna alla rete valuta se c’è corrispondenza tra l’uscita fornita dalla rete YK per un ingresso X K e quella desiderata YdK . andando ad introdurre un certo ∆w che è funzione dell’uscita della rete a prodotto e di quella che avrebbe dovuto produrre. Nella fase di addestramento la rete viene affiancata (vedi figura) da una intelligenza che valuta il comportamento della rete stessa. I neuroni sono tutti uguali.

In questo modo tutti i neuroni sono uguali e tutti i loro parametri particolari sono esternati nei pesi (  incluso). Ora devo solo valutare i pesi per i neuroni e non i pesi e la soglia. quindi 5 . il risultato rimane lo stesso. L’uscita del sommatore è Mentre l’uscita dal neurone è net   w ji xi i y  HS (net   ) E’ possibile effettuare una semplificazione dello schema rendendo l’operatore di soglia indipendente da  . diremo che il neurone produce una segnale di attivazione. Vediamo due esempi di classificazione: Nel secondo esempio ho bisogno di fare una classificazione tra più classi (3).sommati nel primo stadio del neurone. ma svincola l’operazione di sogliatura da  . Se la somma pesata è superiore ad un certo teta. altrimenti diremo che produce un segnale di inibizione. Dobbiamo quindi trovare l’algoritmo per configurare i pesi. lo facciamo introducendo un ulteriore ingresso con valore costante pari a -1 e pesato con un peso pari a  . Il risultato di questo stadio viene opportunamente sogliato. >0. in questo modo la sogliatura viene fatta su net>0 e non più su net. per dare l’uscita del neurone. NB: per ogni neurone i pesi in ingresso possono essere differenti. ottenendo la schematizzazione in figura Ne otteniamo net  w i ji i x   . in questo caso un unico neurone non può classificare tra più di due classi (una di appartenenza ed una di non appartenenza).

(Nell’esempio A. altrimenti devo provvedere a 6 . in base alla Xk in ingresso la rete produrrà una uscita Yk. Lo scopo della fase di adattamento consiste nella eventuale correzione dei pesi in ingresso attraverso l’introduzione di un opportuno ∆w. Addestramento del neurone Pensiamo al momento al singolo neurone (il discorso è però legato a tutta la rete). quindi l orrezione sui pesi è ostituit on un uni o f ttore di proporzion lit{ sui rel tivi ingressi. Vedi mo qu li sono le f si dell’ lgoritmo di ddestramento. dopo di che si inserisce nella rete una delle K coppie. cioè un insieme di dati che serve all’addestramento della rete. ognuno dei quali classifichi l’appartenenza o no ad una delle tre classi. Il ∆wi che va introdotto è la quantità ηδ dove η è il oeffi iente di pprendimento (lo pprofondiremo dopo) e δ=(yd-y) è l’errore ommesso. Il neurone effettua un accumulo pesato ed una operazione di soglia.ho bisogno nell’esempio di tre neuroni in uscita.  Al primo passo si inizializzano i vari wi con valori casuali. si confronta Yk con Ydk (nota dall’etichetta di Xk) e se sono uguali passo al prossimo elemento. Per prima cosa si deve creare un training set. B. C sono tre classificatori diversi !). L’insieme deve contenere un certo numero di campioni che la rete deve classificare (caratterizzati attraverso i loro features vectors) associati a delle etichette che diano la corretta classificazione dei campioni (classificazione binaria). Possiamo osservare come compiuta questa modifica il neurone si comporti in modo corretto.

La correzione avviene sul singolo peso sommando ad esso l’errore compiuto moltiplicato per l’ingresso xi al singolo peso e per il coefficiente di apprendimento η. possiamo supporre di avere una classificazione che porti ad un valore di 1 se entrambe le caratteristiche sono verificate. Completato l’ ddestr mento sul tr ining set si di e he si è omplet t un’epoca. ma con un range di oscillazione che tende a diminuire). Il neurone nell’esempio fa la classificazione di un oggetto che è descritto in un features space in 2 . La classificazione effettuata dunque porta alla suddivisione del piano in due semipiani. ovvero si iterano i passi dal 3 al 5 per tutte le coppie del training set.correggere i pesi.  Una volta effettuata la correzione sui pesi si procede nello stesso modo per tutti i valori del training set. Questo ci fornisce un’informazione su quale è il grado di complessità di un classificatore finalizzato a classificare un certo obiettivo in funzione di come la classe che si vuole classificare può essere mappata nello spazio dei parametri che descrivono la classificazione. ognuna che porta a certe correzioni sui pesi  M n m no he si pro ede on le epo he si h un progressiv riduzione dell’error r te dell rete (in realtà potrebbe anche oscillare. In sostanza il valore di y sarà 0 o 1 quando w x   0 i i i ovvero w1 x1  w2 x2    0  x2   w1 1 x1   . Ci fermeremo nell’iter re le epoche quando avremo raggiunto un error rate desiderato (in questo caso nel ciclo for di ogni epoca va inserito un contatore che si incrementa in caso di errore di classificazione che onsente ll fine di ogni epo di vere un v lut zione dell’error r te ottenuto ll’epo pre edente. In uno spazio a due parametri posso pensare di avere due classi di tipo binario. he ndr{ d ssest rsi su un p it{ fisiologi dell rete stess . Questo non significa che la rete abbia imparato a classificare. il ont tore si dovr{ poi zzer re ll’inizio di ogni nuov epo ) o qu ndo avremo nnull to l’errore. per cui l’oggetto viene descritto da due valori (un punto nel piano). questo equivale alla implementazione di una porta AND con la suddivisione del piano in due semipiani suddivisi da una retta che delimita le due 7 .  A questo punto si ripete la classificazione sul training set procedendo nello stesso modo con la realizzazione di epoche successive. abbiamo quindi descritto w2 w2 la disequazione associata ad una retta nel piano. vediamo un esempio in cui al neurone sono associati solo due ingressi.

(Pesi finali). decideremo quanti sono i parametri significativi in ingresso (numero di ingressi al neurone).aree.5x1  1. una prima in cui entrambe le condizioni verificate ed una seconda dove ciò non accade. 8 . Con i pesi in figura ho x2  0. Questo vincolo dovrà essere rispettato nella scelta della funzione di uscita che ci porterà a selezionare una sigmoide a questo scopo. Vediamo allora il modo di connettere i neuroni. altre quella di HeavySide vista prima. Nel caso in cui ho ingressi n_dimensionali. ovvero se i pattern che identificano l’appartenenza ad una classe sono contenuti in un semipiano dello spazio di ingresso. Ribadiamo che lo schema funziona con un singolo neurone solo fino a quando le classi sono separabili linearmente cioè da un piano o un iperpiano. nell’immagine seguente vediamo alcune possibili funzioni di uscita. Dovrò usare più neuroni in qualche modo strutturati per ottenere quelle che sono le topologie multistrato. lo possiamo osservare graficamente notando che la classe da individuare non è individuata da una singola retta. Si comprende il significato di questa affermazione se al posto di implementare una AND si vuole implementare una XOR. In questo caso sarà sufficiente pensare ad una organizzazione di tipo multistrato con opportune funzioni di uscita . noto invece come circoscrivere la classe (ad esempio con un poligono) definiremo il numero di neuroni necessari e la loro organizzazione topologica. In questo caso la rete neurale non sarà implementabile con un singolo neurone. Questo ci dice che un singolo neurone con due ingressi è in grado di effettuare la suddivisine di un piano delle features in due semipiani separati da una retta. Limiti del perceptron La schema appena visto funzione se il problema è linearmente separabile. Avendo una idea di quella che sarà la rappresentazione della classe nello spazio delle features. w2=2). Quando andremo a vedere come l’algoritmo di ricalcolo dei pesi opera. (Iniziali w1=0. Se ho un ingresso tridimensionale la separazione avviene attraverso un piano. i pattern devono essere separabili con un iperpiano. ci accorgeremo che un vincolo che necessariamente queste funzioni dovranno rispettare sarà la continuità della derivata e della funzione stessa. Vedremo degli esempi in cui non è sufficiente una sola retta ed il classificatore dovrà essere necessariamente più complicato.

è possibile visualizzare un esempio nella figura seguente. poiché ove si avesse la necessità di realizzare un trasferimento del genere sarebbe sufficiente inserire un neurone addizionale nello strato intermedio(in rosso in figura) con peso unitario sull’uscita (in ingresso al neurone intermedio) da trasferire allo stato successivo. in cui viene delimitata da tre segmenti una regione convessa con uno strato intermedio composto da tre neuroni. Le reti a tre strati sono in grado di separare regioni convesse con numero di lati minore o uguale al numero di neuroni nello strato nascosto. aumentare il numero di rette o semirette o segmenti che delimitano una classe nello spazio delle features. che introduce delle semplificazioni nell’algoritmo di aggiornamento dei pesi e che non toglie genericità alla capacità della rete di descrivere un evento. aumentando il numero di neuroni nello strato intermedio. Questa struttura consente di isolare zone individuate da due rette. Nel nostro esempio vogliamo implementare una classificazione di tipo XOR in cui come già detto il problema non è linearmente separabile.Reti multistrato E’ possibile connettere i neuroni a nostro piacimento. effettuando una separazione del piano in due semipiani. e di fornire le loro uscite solo in ingresso allo strato successivo. se ora invio le uscite di queste due reti a singolo neurone in ingresso ad un altro neurone strutturato come la AND dell’esempio precedente otterrò come risultato l’implementazione della XOR visualizzabile in figura(c). con un’altra rete analoga posso fare una classificazione del tipo in figura(b). è quella che prende il nome di schema multistrato. Vediamo un esempio di rete a tre strati (in realtà qui lo strato di input non è rappresentato da neuroni. ma dai semplici oggetti in ingresso. E’ possibile. Se la rete è realizzata con un solo neurone posso fare una separazione del tipo nella figura(a) seguente. ma si osserva che una topologia di connessione. questa però non è una limitazione topologica. Non è quindi possibile un collegamento diretto tra due neuroni che siano in due strati non adiacenti. In uno schema multilayer i neuroni sono raggruppati in più strati e i neuroni di ogni strato hanno la caratteristica di ricevere gli ingressi provenienti solo dai neuroni dello strato precedente. uno corrispondente alla classe A ed uno alla classe non A. 9 .

L’aggiunta di altri strati non migliora la capacità di classificazione. In questo modo siamo passati ad una architettura a 4 strati che sono in grado di separare regioni qualsiasi. non è quindi possibile racchiudere la classe in un unico poligono convesso. e la non convessità ci porterebbe con una rete a tre layer o ad includere oggetti estranei alla classe o ad escludere oggetti appartenenti alla classe. Per effettuare una classificazione corretta devo descrivere il poligono che circoscrive la classe con i tratti in azzurro. Questo tipo di classificazione conterrebbe all’interno anche gli oggetti rossi che invece non appartengono alla classe dei rettangoli neri.1) e (1. Supponiamo per comodità di trovarci ancora in uno spazio a due parametri. 10 .x)). ed una seconda parte (ancora di 4 neuroni nello strato nascosto convergenti in uno che implementa l’AND) per delimitare la seconda sottoregione convessa. Per individuare la topologia di una rete neurale di questo tipo posso circoscrivere nel piano delle features una regione convessa delimitata da un poligono convesso ed associare alla retta passante per ognuno dei lati un neurone che separerà il piano in due. Per procedere dovremo considerare la classe come racchiusa nello spazio delle features da più sottoregioni convesse. Se ho la situazione nella figura affianco. L’area da delimitare è in realtà un poligono concavo e non è possibile quindi effettuare la classificazione con una topologia a tre strati. Sarà poi necessario considerare l’insieme delle due sottoregioni che sarà ottenuto facendo convergere le due uscite dell’ultimo strato in un neurone aggiuntivo presente in un quarto strato che fornirà in uscita l’OR delle due aree (l’Or sarà implementato in modo simile all’AND solo che ora dobbiamo considerare il semipiano che delimita tutte le coppie (x. se non avessi gli elementi in rosso potrei supporre di delimitare l’area con 4 segmenti (poligono verde) ad ognuno dei quali è associato un neurone nello strato intermedio da mettere poi in AND nello strato finale. I problemi sorgono se le regioni da delimitare non sono convesse. Quindi al terzo strato avrò tanti neuroni quanti sono i sottopoligoni convessi da considerare.In generale con una architettura a 3 strati con M neuroni nello strato hidden possiamo individuare le classi in uno spazio delle features n_dimensionale delimitando una regione convessa racchiusa al più da M segmenti. implementeremo quindi una parte della rete neurale per delimitare la classe della sottoregione a destra ( e quindi 4 neuroni nello strato intermedio che convergono in un neurone in uno strato successivo per delimitare la prima sottoregione convessa).

Addestramento della rete neurale L’addestramento può essere eseguito con diverse metodiche. con tante componenti quanti sono gli elementi in ingresso alla rete (negli esempi che abbiamo fatto abbiamo visto essere 2. E’ dunque l’introduzione di una non linearità che da valenza all’organizzazione multistrato e che consente di descrivere regioni non convesse. e l’uscita ottenuta dalla rete Yk. ad esso è associata l’uscita desiderata YdK. Quando operiamo sul singolo oggetto del training Xk. L’algoritmo è applicabile su reti multistrato. Nella moltiplicazione matrice per vettore (ottengo un vettore 1xM) con tante componenti quanti sono gli ingressi ai neuroni dello strato successivo che sarà caratterizzato da una matrice W32 di dimensione MxL dove l è il numero di neuroni dello strato. tutto quello fin qui visto sull’utilità di aggiungere uno strato alla rete risulterebbe inutile. Quando la rete ha più di due strati noi siamo a conoscenza del valore corretto YdK in uscita finale. Nella figura ho q neuroni nello strato di ingresso. Queste funzioni introducono una non linearità. altrimenti la rete non apprenderebbe nulla.Importanza della non linearità Le funzioni di uscita sono quelle funzioni che in pratica vanno a modulare la sommatoria degli ingressi pesati prima che questa vada in uscita dal neurone. l’algoritmo che ha preso più piede per l’addestramento di reti multistrato è quello di back propagation. se andiamo a confrontarlo con il valore in uscita Yk 11 . p neuroni nello strato intermedio e n neuroni nello strato finale. Se la funzione fosse lineare e quindi introducesse una semplice rimodulazione lineare della sommatoria. Se la funzione di uscita non introduce discontinuità la trasformazione subita dai vettori in ingresso alla rete può essere espressa con una unica trasformazione lineare data da un’unica matrice Weq=W21W32 (a meno di un eventuale coefficiente di proporzionalità introdotto dalle funzioni di uscita) di dimensioni NxL corrispondente ad un unico livello composto da L neuroni secondo la trasformazione Z=W eqX e la rete sarebbe sempre riconducibile ad una rete a due strati. il vettore X (1xN) nel primo strato viene moltiplicato per una matrice W21 (NxM) dove M è il numero di neuroni nello strato. Si prende la sigmoide poiché servirà avere la continuità nella derivata prima. L’ingresso a questi neuroni deve avere un valore reale compreso tra 0 e 1 e la funzione di uscita deve essere non lineare e nella fattispecie ha un andamento a sigmoide. Se ci fosse una linearità si potrebbe pensare che lo strato di ingresso inserisce un certo numero di campioni descrivibile come un vettore X. il fatto che la funzione sia non lineare ha una utilità fondamentale. il training set deve essere composto da oggetti con associata una YdK di entrambe le classi. ovvero x1 e x2).

in fase di successiva classificazione di fronte ad un carattere “a” differente dalle evenienze presenti nel training set è probabile che la rete fornisca una classificazione errata non riconoscendo in modo corretto il carattere. analogo discorso si può fare su immagini riprese durante le 24 ore della giornata. l’algoritmo convergerà nel momento in cui l’errore globale sarà minore di un certo ε fissato. Su questi valori imposteremo la correzione dei pesi cercando di azzerare quanti più errori possibili. se inseriamo nel training set solo immagini relative alle ore più luminose è probabile che di fronte ad immagini per le ore meno illuminate (ad esempio il crepuscolo) avrò una classificazione inconsistente. se in fase di addestramento inserisco come oggetti labelled solo alcune evenienze della “a”. andando a valutare l’errore globale sul set di validazione e verificando se anche esso è inferiore alla soglia ε che abbiamo individuato come valore per arrestare la fase di addestramento. Se ad esempio siamo di fronte ad una rete finalizzata ad una classificazione di caratteri di scrittura (OCR). al livello intermedio). Tale validation set sarà anch’esso etichettato in base alla classe di appartenenza degli oggetti. Il primo obiettivo per la rete è dunque l’apprendimento. Sul generico oggetto Xk da classificare l’errore nell’ultimo strato sarà calcolato come l’errore quadratico e sarà calcolato come la somma degli errori commessi da tutti gli n neuroni di quello strato Ek   (t j 1 n kj  ykj )2 . al termine di questa fase di validazione. Se allora vado a correggere i pesi tra i primi due livelli e l’errore viene generato al livello successivo non riesco ad addestrare la rete (inoltre non sono in grado di valutare l’errore. E’ anche possibile. L’idea alla base della back propagation è quella di andare a fare il tuning dei pesi procedendo dagli ultimi strati della rete verso quelli superiori. su cui è stato 12 . L’errore globale (valutabile alla fine di un epoca) sarà invece la somma degli errori commessi su tutti gli oggetti del training_set sempre valutati sull’ultimo stadio E  E i 1 M k . ovvero come obiettivo di convergenza. Per verificare se una rete addestrata raggiunge un livello di classificazione adeguato su esempi mai analizzati. Non abbiamo infatti possibilità di verificare la correttezza delle uscite ai livelli intermedi. non siamo però in grado di comprendere se l’errore di classificazione è legato ad una scorrettezza nei pesi in ingresso al livello intermedio o all’ultimo livello. di norma viene creato oltre il training set un insieme di oggetti detto validation set contenente dei campioni che non sono inclusi nel training set.possiamo capire se la classificazione è corretta o se si deve applicare una correzione ai pesi. Vediamo come si procede. prendere gli oggetti del set di validazione. e quindi la correzione da apportare ai pesi. Questo ci consentirà di verificare se la rete è in grado di effettuare una classificazione consistente. ma raggiungere per la rete la capacità di classificare correttamente oggetti di cui non conosce la classe di appartenenza e che non ha già avuto la possibilità di avere in ingresso nella fase di training. e sarà mandato in ingresso alla rete neurale in una fase successiva a quella di addestramento. Per questo motivo è importante inserire nel training set degli oggetti che siano efficaci nell’esemplificare tutti le possibili tipologie degli oggetti da classificare. Obiettivi della Back Propagation L’obiettivo che si prefigge una rete neurale non è evidentemente la mera corretta classificazione del training set (negli effetti il training set è già classificato).

In questo caso una possibile soluzione consiste nel variare η in funzione 13 .commesso un errore di classificazione nella fase di validazione. Il coefficiente di apprendimento esprimerà in qualche modo la velocità con cui ci si approssima al minimo dell’errore. allora analizzando il grafico osserviamo che vi sono due possibili andamenti: o la variazione dell’errore è positiva al crescere del peso. w ji dove η è il coefficiente di apprendimento (learning rate). si deve ottenere la minimizzazione dell’errore globali. Questa osservazione ci consente di ricavare una regola per l’aggiornamento dei pesi:  nel primo caso se E  0 per ottenere una w ji riduzione dell’errore nella fase di training dovremo impostare un ∆w<0. L’utilizzo di un η elevato non è però sinonimo di un avvicinamento ottimale al minimo come non lo è un valore basso. In generale sarà w ji   E (regola del gradiente). Per quello che concerne l’obiettivo di convergenza. passando al passo successivo in una condizione in cui la correzione sui pesi è di segno opposto entrando in una condizione di oscillazione intorno al minimo. con valori elevati di η si ha uno spostamento maggiore verso il minimo rispetto ad un η piccolo. Se supponiamo che l’errore globale sia esprimibile in funzione della matrice dei pesi del livello in esame. o la variazione dell’errore è negativa al crescere del peso. e che sia possibile avere un grafico che descriva la variazione dell’errore al variare dei pesi come nella figura affianco (evidentemente non è possibile una rappresentazione come quella della figura poiché lo spazio dei pesi è multidimensionale).  nel secondo caso se E  0 per ottenere una w ji riduzione dell’errore nella fase di training dovremo impostare un ∆w>0. ed inglobarli in un set di training allargato che viene utilizzato per una nuova fase di addestramento che dovrebbe condurre ad una rete più efficiente. Nel primo caso è infatti possibile che si vada oltre il minimo.

si effettua l’addestramento della rete e si valuta l’error rate raggiunto. otteniamo w ji   j xi . dato che la forma quadratica che esprime l’errore risulta distorta dalla funzione di uscita. la seconda è che. in modo da accelerare la convergenza all’inizio e ridurre le oscillazioni alla fine.dell’errore. Non esiste una metodica predeterminata per una scelta ottimale a priori del fattore di apprendimento. dove α è detto momentum. net j w i 1 p ji i x . la prima è che la velocità di apprendimento è minore. essa può non presentare un profilo monotono e si corre il rischio di fermarsi in un minimo locale prima di incontrare il minimo globale. Ci accorgiamo invece che il valore di tale coefficiente è troppo alto se osserviamo una oscillazione nell’error rate in iterazioni successive del training. Nel secondo caso si hanno due controindicazioni. Vediamo allora come si procede nella correzione dei pesi dal punto di vista analitico. ma Ek   (tkj  ykj )2 net j y j net j j 1 quindi Ek  y j   (tkj  ykj )2 j 1 n y j  2(tkj  ykj ). in questo caso occorre ricominciare da capo con nuovi pesi. oppure se l’error rate sul training set non è accettabile vuol dire che si è rimasti intrappolati in un minimo locale e quindi il valore del fattore di apprendimento va accresciuto. e in base ai risultati ottenuti si decide se rieffettuare l’addestramento su un training set allargato. Osservando l’espressione di j si vede che j   n Ek E y j  k . Se questo valore è accettabile si effettua la validazione valutando l’error rate sul validation set. si ha Resta a questo punto da calcolare il valore dei  j . Abbiamo detto che la variazione da dare al singolo peso è data dalla variazione dell’errore rispetto al singolo peso moltiplicata per il fattore di apprendimento η cambiata di segno w ji   Ek . w ji sviluppando la derivata di funzioni composte abbiamo w ji   essendo net j  Ek net j . si compie una scelta. 14 . net j w ji net j w ji  xi e quindi posto  j   Ek . oppure si può pensare di smorzare le oscillazioni con un filtro passa basso sui pesi con una correzione nella forma: w ji (t )   j xi  w ji (t  1).

Possiamo ricapitolare l’algoritmo per l’addestramento della rete: Per quello che riguarda il processo di apprendimento possiamo fare alcune osservazioni sui valori di inizializzazione dei pesi. Per procedere al calcolo dei  j nei neuroni intermedi propaghiamo l’errore all’indietro. ed è per questo che in genere si sceglie la sigmoide come funzione di attivazione. Da quest’ultima espressione si evidenzia la necessità che la funzione di attivazione sia derivabile. Possiamo in questo modo effettuare gli aggiornamenti dei pesi all’ultimo strato. Se utilizzassimo il calcolo fin qui visto avremmo  i  ( xdi  xi ) f '(neti ) dove nel calcolo della quantità (tkj  y j ) abbiamo sostituito all’uscita desiderata tkj il valore di uscita intermedia desiderata xdi e all’uscita ottenuta il valore di quello che sarà l’ingresso allo strato successivo xi . poiché essa ha la caratteristica di essere non lineare (ricordiamo la necessità che la funzione introduca una discontinuità al fine di implementare una rete multilayer) e di avere andamento continuo con la derivata prima. Possiamo osservare che.  j  (tkj  y j ) f '(net j ). il coefficiente  j calcolato è nullo. Qui però non abbiamo a disposizione i valori desiderati intermedi e quindi procediamo andando ad approssimare l’errore compiuto a questo livello con la sommatoria delle correzioni  j w ji del livello successivo.inseriremo il fattore -2 in η. 15 . e questo fa si che siano nulle sia le correzioni dei pesi sull’ultimo livello. quando si ha una classificazione corretta in uscita all’ultimo strato. e poiché otteniamo y j net j  f '(net j )  f (net j ) net j  f (1  e ^ net j ) net j . sia quelle sui livelli precedenti dove il  i è sempre combinazione lineare dei  j .

Partendo con dei valori iniziali piccoli dei pesi. se abbiamo pochi neuroni nascosti. si osserva come a dei piccoli valori dei pesi corrisponda un valore dell’argomento della funzione di attivazione prossimo allo zero. si definisce un altro insieme di esempi. Generalizzazione E’ la capacità della rete di riconoscere stimoli leggermente diversi da quelli con cui è stata addestrata. Per questi valori dell’argomento la funzione di attivazione presenta i valori più elevati della derivata prima e dunque questo porta ad una correzione maggiore sui pesi essendo ∆w ∝ f’(net). Consideriamo la figura a destra e supponiamo di fare un addestramento con un certo numero di iterazioni. Per valutare la capacità della rete di generalizzare gli esempi del TS. Supponiamo anche che con il nostro training set al crescere del numero di iterazioni si arrivi ad un comportamento con errore sul training set ETS<εTS al secondo punto di arresto in figura. essendo la funzione di attivazione a sigmoide. Supponiamo di avere gli oggetti in figura e che essi debbano essere classificati rispetto ad una certa retta. Terminato l’apprendimento sul TS (ETS < ε ). però se gli elementi del training set sono quelli rossi in figura. Aumentando il numero dei neuroni nascosti posso descrivere la classe in modo più dettagliato. detto Validation Set (VS). e la descrizione è troppo dettagliata. si valuta l’errore sul VS (EVS). nel descrivere la poligonale che traccia il confine tra le due classi ho un numero ridotto di possibili spezzature della curva. si corre il rischio di fare con troppi neuroni nascosti un fitting degli oggetti che li comprenda con precisione. e che non lasci quindi spazio alle sottoclassi individuate per contenere elementi differenti da quelli del training set (avremmo cioè un errore elevato sugli oggetti al di fuori del training set a seguito di un processo di overtraining) . Quando andiamo a 16 .

17 .fare la verifica con il nostro set di validazione troviamo un errore di sul set di validazione che dopo aver raggiunto un minimo (pari ad εVS)nel caso di rete addestrata con un numero minore di iterazioni. monitorare l’errore sul VS (EVS) e fermare l’apprendimento quando EVS < εVS . Questo accade perché anche in questo caso abbiamo effettuato un overtraining della rete. ritorna a crescere. Per migliorare la capacità di generalizzazione si può addestrare la rete sul TS.