Cosa è la Back Propagation dell’errore

AI, ALTRO, INTELLIGENZA ARTIFICIALE

La back Propagation dell’errore è una tecnica che consente la riduzione dell’errore che compie la rete neurale nel processo di apprendimento.

Se si considera che la fase di apprendimento di una rete neurale si traduce in sostanza  nel ritrovare in  una funzione complessa il valore minino o quanto meno uno dei minimi migliori, e se per per farlo non si utilizza un’approccio analitico, bensì iterativo, allora si comprenderà che un metodo semplice per risolvere il problema è quello di muoversi a piccoli passi sulla superficie della funzione  (Discesa del gradiente)   e via via ricalcolare i pesi della rete neurale partendo da quelli già noti e dall’ultimo errore calcolato per ridurre lo stesso. ( Back Propagation). E’ un pò come andare alla ricerca in un’area montuosa, dell’area di territorio con altitudine più bassa, senza sapere dove sia di fatti il posto, pertanto un metodo è quello di muoversi a piccoli passi in tutte le direzioni e verificare il livello di altitudine, ovviamente evitando di andare in salita 🙂

Il meccanismo  di addestramento, inizia con  un’operazione di inizializzazione casuale dei pesi, ed itera passando  le coppie di input-output appartenenti ad un prefissato insieme di dati al modello neurale,  fin quando, grazie ad operazioni di aggiornamento dei pesi, non si raggiunge il minimo (assoluto) della  funzione costo, che esprime la misura della distanza che intercorre tra gli output desiderati e i corrispondenti output che il modello neurale calcola, ovvero l’errore.

Per comprendere meglio cosa succede vi consiglio di dare un occhio a questo video su youtube che io considero veramente esaustivo, perché è possibile farsi anche un modello mentale di quello che succede; al  minuto 10.13, potrete anche veder come funzione la discesa del gradiente relativamente al calcolo del minimo in modo interattivo.

Per avere invece una idea un pò più analitica di quello che succede durante la fase di addestramento e cosa sia la back propagation, faremo appello ancora una volta al nostro modello semplificato di neurone ad un solo ingresso ed una sola uscita:

la cui funzione di attivazione è una sigmoide.  (per chi è a digiuno su questi temi può dare un occhio a dei miei vecchi articoli)

 

 

In tal caso, la funzione di attivazione interna (A) è:

  A = x*w  + b 

mentre la Y o h(x)

In tal caso, l’algoritmo di back propagation dell’errore lavorerà secondo il seguente approccio:

In pratica, partendo da valori casuali di w e b si fa un test utilizzando i dati di ingresso il cui valore di uscita è noto; si calcola il valore dell’errore come differenza tra il valore di uscita noto e quello ottenuto, ed il delta y come moltiplicazione tra il valore dell’errore e la derivata di Y, che, nel nostro caso, essendo una sigmoide, è proprio Y*(1-Y)  (come ricorderete, avevo anticipato che sarebbe ritornata utile la sigmoide per semplificare). A questo punto, si calcolano, semplicemente, w e b applicando la formula di cui sopra.

Il valore di epsilon, chiamato fattore di apprendimento, è a nostra scelta, ma sarà opportuno non assegnare ad esso valori troppo piccoli perché, altrimenti, si rischierebbe di non raggiungere la convergenza ottimale della rete; assegnando, altrimenti, valori troppo grandi aumenterebbe la velocità della fase di addestramento, come anche la possibilità di errori e di forti oscillazioni. I valori di epsilon dovranno essere, comunque, sempre compresi tra 0 e 1.

Per concludere, su reti neurali complesse a più livelli,  non può essere fatto lo stesso ragionamento del caso del singolo neurone, perché sui livelli  intermedi della rete (i livelli nascosti)  non è noto a priori un valore di riferimento atteso noto, in tal caso per calcolare i vari pesi sui neuroni interni, si procede propagando indietro l’errore dell’uscita (back propagation) come se fosse il valore noto atteso su cui sarà possibile calcolare il nuovo errore.

Tutto ciò si ridurrà alle seguenti semplici formule:

La differenza sta di fatto che mentre in uscita l’errore viene calcolato come distanza tra il valore atteso e quello calcolato, per i neuroni interni viene definito come :

Err_{h} = Delta_{y} * w

per il resto la procedura è identica al caso del singolo neurone.

Comments