6.2.1 Struttura e funzionamento

Attraverso il run-forward della rete SI, come si è visto, si compie un grosso errore, poichè l'errore del riconoscimento, rispetto al target, non è dipendente dalle LIN relative ai parlatori.
Figure 6.9: Schema dell'utilizzo della struttura K-LIN per fare il riconoscimento del parlatore: 1) Run-forward della rete ottenuto dalla media pesata dei vari $\lambda $, 2) Calcolo dell'errore, 3) Back-propagation e modifica dei valori dei $\lambda $, 4) Alla fine dell'addestramento di tutti i patterns, scelta di $argmax_i \lambda _i$
Image FIGk-lin_riconoscimento-OTTIMIZZATO

Una soluzione ottima esiste e consiste nel effettuare il run-forward separatamente per ogni LIN. Quindi utilizzare una struttura K-LIN, si può ricavare quale sia la LIN che fornisce l'errore minimo rispetto al target ed utilizzare questa LIN per riconoscere le successive frasi del parlatore. Sicuramente questa è la soluzione ottima, ma risente di una elevata pesantezza computazionale: bisogna fare il run-forward per ogni LIN,.

Andando ad analizzare una possibile tecnica approssimata per la soluzione del problema, si è deciso di eliminare la matrice identità e di effettuare il run-forward combinato delle LIN dei vari parlatori. Il collegamento delle LIN alla rete SI rimane invariato ed è schematizzato in figura (6.2). La vera modifica, oltre all'assenza della LIN identità, consiste in una diversa inizializzazione del valore dei parametri $\lambda $ che collegano le LIN con la rete SI. Si inizializzano tutto i valori di $\lambda = \frac{1}{K}$ in modo da propagare il valor medio tra ognuna delle 273 uscite delle $K$ LIN. A tal fine sono stati inizializzati a $\frac{1}{K}$ i valori di tutti i $\lambda $. Siano $i_i = \left( i_1, i_2,...,i_{273} \right) $ gli input della rete SI e $o_{i,n} = \left( o_{1,n},o_{2,n},...,o_{273,n} \right) $ gli output della LIN $n$-esima, il valore propagato all'ingresso della rete SI è dato da:

\begin{displaymath}
i_{i}= \sum_{n=1}^{K} o_{i,n} \cdot \lambda_n
\end{displaymath} (6.1)

Dal momento che, all'inizializzazione, $\lambda_n = \frac{1}{K}$, $\forall n$, l'equazione (6.1) corrisponde alla media delle 273 uscite delle $K$ LIN.

Le LIN sono state addestrate esattamente con i parametri utilizzati in sezione 6.1.2. La modifica più significativa è stata effettuata nei parametri utilizzati per il riconoscimento, in particolare il parametro batchsize, anzichè essere impostato ad epoche, è stato posto a 1. L'aggiornamento del valore dei $\lambda $, in questo caso, avviene ad ogni pattern. Questo è un punto fondamentale che permette, unitamente al fatto che l'algoritmo di back propagation viene utilizzato sull'errore generato dalle LIN stesse, di ottenere ottimi miglioramenti. A seguito del primo pattern, se il riconoscimento è effettuato in modo corretto, il valore del $\lambda $ riferito alla LIN corretta viene alzato, tutti gli altri abbassati. Questo procedimento viene iterato ad ogni pattern dato in ingresso alla rete. Dopo un numero sufficiente di patterns, il $\lambda $ della LIN riferita al parlatore, avrà un valore più elevato rispetto alle altre LIN. In questa situazione, il valore propagato durante il run-forward, non è più il valor medio delle varie LIN, ma sarà composto per la maggior parte dalla LIN riferita al parlatore. Se si riesce a raggiungere questa condizione, la percentuale di riconoscimento sarà di gran lunga migliore rispetto a una situazione in cui tutti i $\lambda $ hanno lo stesso valore.

Stefano Scanzio 2007-10-16