Nel capitolo precedente abbiamo visto come l’addestramento di una rete approssimante preveda
l’ottimizzazione del vettore dei pesi, finalizzata a determinare quella configurazione ottima
che, minimizzando una certa funzione di costo, porta la rete ad esibire un ben determinato
“comportamento”.
Dal momento che questo processo può essere espresso anche in termini di un problema di
programmazione non lineare, compito dei prossimi paragrafi sarà dunque inizialmente quello di
fornire una panoramica sulle più diffuse tecniche di programmazione non lineare, classificate
a seconda del tipo di informazioni a disposizione sulla funzione da minimizzare, per poi
dedurne i motivi che hanno portato il metodo del gradiente, da cui deriva direttamente la
back-propagation, ad essere il più usato algoritmo per l’addestramento delle reti neurali,
che sono il tipo di rete approssimante che esamineremo più in dettaglio.
Con metodi diretti intendiamo quelle tecniche capaci di risolvere un problema di
programmazione non lineare attraverso una “esplorazione” nello spazio degli stati, non avendo
a disposizione alcun tipo di informazione sulla funzione da minimizzare, quale ad esempio il
gradiente o l’hessiana.
Sia dato, ad esempio, il generico problema di programmazione non lineare così formulato:
con n dimensione del vettore di stato, dove si vuole determinare la soluzione ottima
capace di minimizzare la funzione data.
Il più semplice approccio al problema è valutare la funzione in punti diversi e scegliere, di
volta in volta, il miglior candidato al punto di minimo.
Se è il punto di minimo al k-esimo
tentativo e
lo spostamento estratto
casualmente che porta in
, l’algoritmo può
essere così schematizzato:
(a)
(b)
(c) , altrimenti (b) con una nuova
estrazione dello spostamento
.
Un metodo leggermente più evoluto e meglio formalizzato è l’algoritmo di Hooke e Jeeves
che necessita però delle seguenti variabili:
· passo dell’esplorazione locale
· passo dell’accelearazione
· intervallo di confidenza .
Riferendoci per comodità al caso di figura 2-1 con n = 2, l’algoritimo esegue una
“fase di esplorazione” fra gli 8 punti limitrofi a
che formano un quadrato di lato
intorno ad esso, fino a quando non trova
il punto
in cui
: termina così la prima fase.
A questo punto inizia la “fase di accelerazione” in cui si verifica uno spostamento proporzionale
a da
verso
sino a raggiungere il punto
, che sarà così espresso:
Se ora gli 8 nuovi punti nell’intorno di
danno “insuccesso”, l’algoritmo ritorna in
e da avvio ad una nuova “fase di esplorazione”, con un reticolo questa volta di lato
. Il processo di riduzione dei reticoli di
esplorazione continua fino a quando:
dove i è il numero di iterazioni continue senza “successo”. Quando tale limite viene
superato, si devono cercare altre strade di esplorazione.
Un’altra possibile alternativa, sempre restando fra i metodi diretti dove non si possiedono
informazioni sul gradiente, è tentarne un’approssimazione delle componenti attraverso rapporti
incrementali, ovvero esprimendo:
dove
con che rappresenta il versore della
componente j. A questo punto, pur di scegliere
sufficientemente piccolo, ma a scapito
di una complessità computazionale non indifferente, si possono ottenere risultati paragonabili
con quelli dell’algoritmo del gradiente (presentato nel paragrafo 2.3).
Con metodi basati sulla derivata prima intendiamo quelle tecniche risolutive che,
conoscendo la forma analitica della funzione da minimizzare
, utilizzano il gradiente (cioè le
derivate prime parziali) per giungere alla soluzione di un problema di programmazione non
lineare.
Quando è nota e differenziabile,
utilizzare la condizione necessaria
per l’esistenza del minimo equivale a costruire un sistema algebrico non lineare di n
equazioni e n incognite,
di solito estremamente arduo da risolvere. In questi casi, si preferisce ricorrere alle
tecniche di discesa (o di hill climbing), nelle quali si vuole determinare
una sequenza di punti tali che
esprimibili inoltre nella forma:
dove rappresentano rispettivamente la
lunghezza (positiva) e la direzione del passo di discesa. Considerando quindi la condizione
necessaria e sufficiente per avere la discesa:
e sviluppando la serie di Taylor di
fino al 1° ordine, si ottiene:
diseguaglianza che conduce a scegliere l’antigradiente come possibile direzione lungo la quale
effettuare il passo di discesa, ovvero a considerare
Da tutte queste considerazioni, possiamo ricavare l’algoritmo del gradiente nella nota
forma:
Nel caso (2.12) l’algoritmo è detto a passo ottimizzato, in quanto la lunghezza del
passo di discesa varia con k e può essere così scelta opportunamente ad ogni passo
attraverso una ricerca monodimensionale, minimizzando la seguente funzione rispetto
a :
Un’alternativa al gradiente a passo ottimizzato, volendo evitare la ricerca ad ogni passo della
migliore lunghezza che assicura la discesa,
consiste nell’assegnare alla variabile una funzione decrescente con k, solitamente
espressa nella forma:
con costanti da determinare. In questo
modo si arriva al gradiente a passo variabile non ottimizzato, buon compromesso fra
quello a passo ottimizzato e quello a passo fisso (che vedremo fra breve), soprattutto in
termini di convergenza e di complessità computazionale.
Quando invece la lunghezza del passo di discesa non varia con k, essendo una costante
nota a priori, siamo nel caso del gradiente a passo fisso (o gradiente puro),
esprimibile nella forma:
Qui la scelta di è critica:
con
piccolo, la convergenza al punto
di minimo
rischia di diventare troppo
lenta, mentre con
grande si possono
verificare “rimbalzi” che la impediscono.
Si dimostra che, per funzioni unimodali
(con un solo minimo locale), valgono le seguenti affermazioni:
· l’algoritmo a passo fisso converge al punto di minimo pur di scegliere
sufficientemente piccolo
· l’algoritmo a passo ottimizzato converge sempre.
Per entrambi i casi possiamo utilizzare alcuni criteri di arresto che fermano
l’algoritmo non appena questo è vicino al minimo o il gradiente non subisce più significative
variazioni. Fra questi ricordiamo:
1)
2)
3)
Dal momento che, in generale, non si conosce la forma analitica di
, conviene utilizzare l’AND
dei tre criteri, anziché uno in particolare.
Con metodi basati sulla derivata seconda ci riferiamo a quelle tecniche capaci
di trovare la soluzione al problema di programmazione non lineare (2.1) utilizzando la
matrice Hessiana, avendo perciò a disposizione informazioni sulle derivate parziali seconde.
Uno dei più noti fra questi è l’algoritmo di Newton – Raphison nel quale, analogamente
al metodo del gradiente, si vuole determinare una sequenza di punti
tale che:
Supponendo ora e
abbastanza vicini, possiamo
definire
la distanza “infinitesima”
fra questi due punti, ottenendo cosi:
Sviluppando poi la serie di Taylor per ,
attorno a
, fino al secondo ordine,
si ricava la forma quadratica
dove è la matrice Hessiana così
strutturata:
Essendo però l’approssimazione di
nell’intorno di
una forma quadratica,
risulta immediato determinare quel valore
che la rende minima. Infatti si ha:
L’algoritmo di Newton - Raphison è così esprimibile nella forma:
Questa tecnica consente convergenze al minimo molto veloci, fermo restando una notevole
complessità nel calcolo dell’hessiana e della sua inversa, che può rendere l’algoritmo
poco vantaggioso.
Ritorniamo ora al problema iniziale, quello cioè di valutare quale sia fra i metodi di
programmazione non lineare esaminati quello più adatto a ottimizzare i pesi di una rete
approssimante, scegliendo di concentrare l’attenzione sul tipo “rete neurale feedforward”.
Come abbiamo visto nel primo capitolo, il processo di addestramento è riconducibile ad un
problema di programmazione non lineare nello spazio dei pesi, esprimibile quindi nella forma:
dove:
è il vettore colonna di tutti i pesi della rete, con
peso del neurone q del livello
s sull’uscita p del livello s-1, e J funzione di costo da
minimizzare.
Si può subito notare come, data la dimensione solitamente grande del vettore dei pesi, un metodo
diretto risulti di non facile applicazione, essendo l’esplorazione dello spazio dei pesi
estremamente ardua.
Anche le tecniche che fanno ricorso alla matrice hessiana, quale l’algoritmo di
Newton-Raphison, pur garantendo una buona convergenza, sono insostenibili dal punto
di vista della complessità computazionale, in quanto richiedono il calcolo non sempre banale
delle derivate parziali seconde, oltre a quello dell’inversa della matrice stessa.
A condizionare ulteriormente l’impiego di queste tecniche, si aggiunge il fatto che la funzione
di costo solitamente contiene medie. Ad esempio, nel nostro utilizzo delle reti neurali come
approssimatori, J considera l’errore quadratico medio fra l’uscita della rete e il
valore vero della funzione valutata nei punti di addestramento.
Con il metodo del gradiente, invece, si può già ottenere una prima semplificazione dalla
scomposizione del gradiente della funzione di costo nel vettore colonna delle derivate
parziali rispetto ai singoli pesi, ovvero:
In questo modo si realizza l’importante concetto del calcolo distribuito, alla base
dell’algoritmo della “back propagation” per l’addestramento delle reti neurali, che ora
deriveremo dalle precedenti considerazioni.
Per calcolare la variazione del costo rispetto al singolo peso, una volta definita la quantità
si può applicare più volte la seguente derivazione “a catena”:
Il calcolo a ritroso delle è cosi
inizializzato sullo strato di uscita:
Calcolato il gradiente, si scende nella direzione dell’antigradiente per un numero di passi
sufficiente a raggiungere “error goal” desiderato.
Una alternativa all’algoritmo del gradiente, che consente una convergenza più rapida, è
l’approssimazione di Levenberg-Marquardt, ottenuta da una semplificazione del
metodo di Gauss – Newton ora descritto.
Il metodo di Gauss – Newton nasce come modifica all’algoritmo di Newton descritto
precedentemente, poco utilizzabile nella pratica per il calcolo oneroso dell’inversa della
matrice hessiana.
Nel caso dell’addestramento di una rete approssimante, il costo da minimizzare rispetto al
ettore di parametri può essere
espresso nella forma
dove:
· è la generica funzione da approssimare
· è l’l-esimo punto del
“training set”
· è il valore della funzione
approssimante nell’l-esimo punto del “training set”
· è il vettore dei parametri sui
quali vogliamo effettuare la minimizzazione.
Se definiamo ora il vettore errore relativo rispetto al singolo punto l di
addestramento
e il vettore globale
allora il costo è così esprimibile:
Per funzioni quadratiche in il metodo
di Newton assicura la convergenza in un solo passo. Per rendere la funzione
quadratica in
, si può usare un approssimatore
lineare nei parametri:
dove è un’opportuna funzione,
in modo tale che gli errori di approssimazione
,
e conseguentemente
, siano anch’essi
lineari rispetto a
, e quindi il costo
risulti quadratico in
, come evidente
in (2.32).
L’uso, invece, di approssimatori non
lineari nei parametri comporta non linearità in
e quindi in
. Per poter impiegare
approssimatori di questo tipo, l’approccio di Gauss – Newton suggerisce di procedere,
ad ogni iterazione j dell’algoritmo, secondo i seguenti passi:
1) linearizzare l’errore intorno al
valore corrente di
2) risolvere un problema ai minimi quadrati per minimizzare l’errore e fissare di conseguenza
il successivo valore dei parametri .
Rispetto al classico metodo di Newton, qui si costruisce ad ogni iterazione un’approssimazione
quadratica della funzione da minimizzare, operando attraverso una linearizzazione, anziché
utilizzare informazioni relative alla derivata seconda.
Nella prima fase, la linearizzazione di
attorno a
è realizzata mediante
un’espansione in serie di Taylor troncata al termine lineare, che porta l’errore globale
ad assumere la forma:
dove è la matrice jacobiana.
Nella seconda fase invece, una volta minimizzata la norma quadra della funzione precedentemente
linearizzata e ottenuto
si arriva, analogamente al caso con funzione approssimante lineare nei parametri, al seguente
problema di minimizzazione ai minimi quadrati, che consente di determinare il successivo valore
dei parametri:
Ricordiamo che, nel caso di approssimatore lineare, si pone
mentre nel caso in esame si ottiene:
A questo punto, con le due assegnazioni:
possiamo determinare il per la (2.36),
anche nel caso di funzione approssimante non lineare nei parametri, con la nota formula
risolutiva per il problema della stima ai minimi quadrati.
La regola di aggiornamento dei pesi secondo Gauss – Newton diventa perciò la seguente:
con:
Con il metodo di Gauss – Newton si ottiene una convergenza tipicamente più veloce di quella
ottenuta con il metodo del gradiente, ma in generale non così veloce come con il metodo di
Newton puro, fermo restando un minore onere computazionale per l’assenza del calcolo
dell’hessiana.
Nonostante ciò, per ovviare anche al problema del calcolo dell’inversa nella (2.41), spesso
si ricorre alla seguente regola di aggiornamento:
dove è una matrice diagonale tale che
la quantità da invertire fra parentesi tonde sia definita positiva.
Nell’approssimazione di Levemberg–Marquardt si sceglie
, con
e I matrice identica di
dimensione p.
In questo modo il parametro consente
di selezionare il tipo di discesa che si vuole effettuare. In particolare, quando
l’equazione (2.43) riporta esattamente
la regola di cambiamento dei pesi del metodo di Gauss-Newton. Quanto più cresce
, tanto più la direzione di discesa
si avvicina a quella del metodo del gradiente. Quindi, in generale, per piccoli valori di
possiamo aspettarci una convergenza
veloce, mentre per alti valori di
otterremo una convergenza più lenta.
Riassumendo, dal momento che il metodo di Gauss-Newton risulta più veloce e accurato in
prossimità di un valore minimo del costo, si fa in modo che
diminuisca dopo ogni passo in cui
si consegua una discesa e aumenti quando un passo dell’algoritmo non abbia successo e si salga.
Si ottiene così un automatico passaggio al metodo più conveniente di caso in caso.
Ringraziamenti,
Introduzione,
Capitolo 1,
Capitolo 2,
Capitolo 3,
Capitolo 4,
Bibliografia