8.1 Addestramento con learning rate variabile

Questa tecnica, come accennato nell'introduzione, non è prettamente specifica all'adattamento delle reti neurale al parlatore. Si è deciso di collocarla in questa tesi, per i risultati decisamente positivi che è riuscita a produrre. Gli aspetti più interessanti di questo metodo sono la sua generalità, che lo vedono applicabile nell'addestramento di reti neurali di tipo multi-layer perceptron, anche non specifiche per il riconoscimento vocale.

Durante l'addestramento una rete neurale tende a polarizzarsi, cioè ad avere una buona percentuale di riconscimento, sui pattern che sono stati visti per ultimi e che sono stati addestrati più volte. Questo processo, che prende il nome di catastrofic forgetting, tende a far perdere la capacità della rete di riconoscere bene i pattern poco addestrati.

A seguito di tale problema si è deciso di compiere un'analisi del movimento dei pesi durante l'addestramento. Analizzando le variazioni dei pesi dell'ultimo strato, si è visto che l'algoritmo di back propagation tende ad alzare i pesi che contribuiscono ad ottenere il valore del nodo riferito al target, e ad abbassare tutti gli altri. Del resto l'algoritmo di back propagation tende a minimizzare il gradiente dell'errore ottenuto rispetto al target, indipendentemente da quanto questa variazione di pesi possa penalizzare il riconoscimento dei pattern associati ad altri target.

Questo scenario mette in evidenza che, per ottenere buoni risultati nell'addestramento di una rete neurale, bisogna utilizzare pattern che coprano, in numero uguale, tutti i possibili target. I pattern dovranno essere addestrati in sequenze casuali: infatti se si utilizzano lunghe sequenze di pattern riferiti allo stesso target, la rete si sposterà troppo verso quel target. Al pattern successivo si sposterà completamente verso un altro target, facendo oscillare i pesi da un target ad un altro e perdendo in capacità discriminativa.

Sfortunatamente, nella realtà, non è sempre possibile avere un numero sufficiente di pattern per addestrare tutta la rete e per coprire con lo stesso numero di pattern tutti i target.

Ad esempio, analizzando il caso di una rete neurale per il riconoscimento vocale ed in specifico la rete inglese, ci sono 949 unità di output. Per riuscire ad evitare il più possibile il sovra-addestramento di un target, si utilizzano delle frasi foneticamente bilanciate. Esse hanno lo scopo di riuscire a coprire, nel modo più uniforme possibile, tutti i fonemi utilizzati per il riconoscimento. Un compito arduo per due motivi:

Analizzando l'insieme di frasi di training del database inglese, ad eccezione delle frasi di tipo SA che sono state eliminate perchè di origine dialettale, è apparsa evidente la diversa distribuzione tra il numero di pattern associati ai vari target. Si è visto che la classe in assoluto più addestrata è quella riferita al silenzio, semplicemente perchè tutte le frasi iniziano e finiscono con un silenzio. Ad essa sono associati 159601 patterns. Tra le restanti classi si ha un associazione minima di 424 patterns e una massima di 25556. Mentre per le unità transizionale si passa da un minimo di 4 a un massimo di 7267 patterns. Come si nota c'è una ampia varietà nel numero di patterns di addestramento per i vari target. I fonemi saranno addestrati in modo più consistente rispetto alle unità transizionali, e anche tra i fonemi e le unità transizionali ve ne saranno alcuni che saranno riconosciuti con maggior facilità rispetto ad altri.

Questa tecnica ha perciò applicabilità tutte le volte in cui i patterns riferiti ai vari target della rete non sono in numero uguale.

Riprendendo il meccanismo di addestramento di una rete neurale tramite l'algoritmo di back propagation, la formula che regola la variazione dei pesi è:

$\displaystyle \Delta w_{ij} = \eta \cdot \delta_i \cdot o_j$     (8.1)

Delle tre variabili di (8.1), l'unica che è libera, cioè può essere scelta come parametro durante l'addestramento, è il learning rate $\eta$. La variabile $o_j$ è infatti calcolata direttamente dal pattern dato in ingresso alla rete attraverso il run-forward, mentre la variabile $\delta_i$ è calcolata retropropagando l'errore compiuto dalla rete rispetto al target.

Il learning rate può influenzare in modo drastico la capacità di apprendimento di una rete neurale. Nel caso sia troppo elevato viene amplificato il catastrofic forgetting e si ottiene una rete con pesi oscillanti che tendono ad imparare solamente le ultime cose dette. Nel caso di un learning rate troppo basso, invece, la rete apprende molto lentamente e in alcuni casi i pesi possono rimanere bloccati in un minimo locale della funzione di errore, impedendone un ulteriore movimento. L'algoritmo di back propagation suggerisce uno spostamento al fine di minimizzare l'errore quadratico medio tra ciò che è riconosciuto e il target. L'entità di questo spostamento viene regolata dal learning rate $\eta$.

Non è detto che il learning rate debba essere un parametro fisso durante tutto l'addestramento. È infatti una pratica comune quella di far diminure $\eta$ durante il training, per affinare sempre più le capacità di riconoscimento della rete. Per affrontare il problema del differente numero di patterns associati ai target della rete, si è agito variando il valore del learning rate durante il training.

L'idea è quella di riuscire a legare il valore del learning rate al target. In pratica, quando si addestrano i nodi di uscita con molti patterns a loro riferiti, si può utilizzare un learning rate minore. In questo caso, gli spostamenti è meglio che siano piccoli, infatti ci sono molti esempi riferiti a quel target che possono lentamente far convergere la rete al valore ottimale. Quando ci sono pochi patterns riferiti ad un target conviene avere spostamenti più ampi, al fine di riuscire a dare la stessa importanza a questo target rispetto a quelli per i quali ci sono più patterns di addestramento.

Una volta ottenuti i dati sul numero di patterns riferiti ad ogni target, si è studiato come legare questo valore al learning rate. Una prima ipotesi è stata di ottenere $\eta$ in modo lineare attraverso la seguente formula:

\begin{displaymath}
\eta_{i} = \frac{1}{patterns_{i} \cdot c}
\end{displaymath} (8.2)

dove $patterns_{i}$ rappresenta il numero di patterns associati al target $i$ e $c$ è una costante che serve per calibrare la formula al fine di ottenere, per i vari target, valori di learnig rate non troppo elevati. Questo metodo di scelta di $\eta$ ha il rischio di penalizzare però i target addestrati con molti patterns. I piccoli spostamenti dovuti a questi target, sono ininfluenti rispetto agli spostamenti molto grossi dei target con pochi patterns di addestramento.

Si è deciso perciò di utilizzare una legge logaritmica, in cui i target con meno esempi sono anche in questo caso addestrati con un learning rate minore, ma non esattamente proporzionale al numero di patterns:

\begin{displaymath}
\eta_{i} = \frac{1}{\frac{log \left( patterns_{i} \right) }{log \left( base \right)} \cdot c}
\end{displaymath} (8.3)

con il parametro $base$ si può regolare la base del logaritmo e decidere quanto deve essere consistente il decremento del learning rate all'aumentare del numero di patterns associati al target $i$. La costante $c$ ha lo stesso significato di formula (8.2).

Figure 8.1: Valore del learning rate al variare del numero di patterns per target con $c = 250 $ e $base = 1.2$
Image GRAnumeroPatterns_LRate
Al fine di ottenere, con il numero minimo di patterns per target, il valore di learning rate di circa 0.0002 utilizzato nei normali addestramenti, si è posto $c = 250 $. Con $base = 1.2$ si è ottenuta una riduzione del learning rate, per i pattern appartenenti alle classi più numerose, pari a 10 volte (grafico 8.1). I parametri usati per l'addestramento sono: Si è deciso addestrare la rete con 10 epoche per fare in modo che, alla fine delle 10 epoche di addestramento, la rete convergesse. NNA, il programma di addestramento della rete, con $batchsize = c$, compie l'aggiornamento dei pesi in memoria ogni $c$ patterns. Ad ogni patterns, nel nostro esperimento, bisogna far variare il learning rate. Il programma, al fine di ottimizzare la velocità di esecuzione, esegue la procedura di calcolo della variazione dei pesi solo al momento dell'aggiornamento, quindi ogni $c$ patterns. Si è dovuto, perciò, settare un batchsize pari a 1, per fare in modo che la variazione venisse calcolata ad ogni pattern, rallentando notevolmente l'esecuzione del programma di addestramento. Con qualche modifica al programma, non sarebbe però un problema farlo funzionare con valori di batchsize maggiori di 1. Fabp e ufabp, i parametri che servono a ignorare i pattern ben addestrati, sono stati disattivati: un'attivazione di quest'ultimi avrebbe portato un'imprecisione nel valore del learning rate, perchè il numero di patterns per target non sarebbe più stato quello calcolato a priori.


Table 8.1: Percentuale di riconoscimento utilizzando le strategie di addestramento normale e quella con learning rate variabile
Tipo addestramento Correct Substitutions Deletions Insertions Word Accuracy
Normale (batchsize = 10) 63.70% 23.65% 12.65% 4.29% 59.42%
Normale (batchsize = 1) 65.07% 22.56% 12.37% 3.90% 61.16%
Learning Rate Variabile 69.91% 19.63% 10.46% 3.55% 66.36%


Per il riconoscimento sono state utilizzate tutte le 1344 frasi di test del database inglese. I risultati di tabella (8.1) vedono un netto miglioramento della strategia con learning rate variabile. Ci sono miglioramenti su tutti i parametri, ed anche il dato più significativo, cioè la word accuracy, ne risente positivamente ottenendo il 66.36%.

Il miglioramento rispetto alla tecnica standard di addestramento, quella con batchsize pari a 10, è del 6.94%. Nell'esperimento, come spiegato, è stato utilizzato un batchsize pari a 1. Anche con le tecniche di addestramento standard, si riesce ad ottenere un miglioramento in termini di word accuracy pari al 1.74%. Per un raffronto più equo bisogna quindi confrontare la tecnica con learnig rate variabile rispetto alla tecnica standard con batchsize pari a 1. Il risultato è un miglioramento del 5.20%, un incremento molto significativo nel campo del riconoscimento vocale, che conferma la validità di questa tecnica.

Sebbene questa tecnica non sia prettamente studiata per l'adattamento al parlatore, essa può essere utilizzata tutte le volte in cui ci sia l'esigenza di addestrare una rete e perciò anche quando si hanno a disposizione frasi provvenienti da uno stesso parlatore. In tal caso, si avrà un aumento delle prestazioni di tutte le tecniche di adattamento trattate nei capitoli precedenti, dovuto semplicemente al miglioramento del meccanismo con cui viene addestrata la rete.

Stefano Scanzio 2007-10-16