
La retropropagazione dell'errore (in lingua inglese "backward propagation of errors", solitamente abbreviato in backpropagation), è un algoritmo per l'allenamento delle reti neurali artificiali, usato in combinazione con un metodo di ottimizzazione come per esempio la discesa stocastica del gradiente.
La retropropagazione richiede un'uscita desiderata per ogni valore in ingresso per poter calcolare il gradiente della funzione di perdita (funzione di costo). Viene considerato quindi un metodo di apprendimento supervisionato, sebbene venga usato anche in reti non supervisionate come gli autocodificatori o Reti Diabolo.
È una generalizzazione della regola delta di reti feed-forward multistrato, resa possibile usando la regola di catena che iterativamente calcola i gradienti per ogni strato.
La retropropagazione richiede che la funzione d'attivazione usata dai neuroni artificiali (o "nodi") sia differenziabile.
Una delle principali difficoltà nell'uso della retropropagazione dell'errore è il problema noto come scomparsa del gradiente, dovuto all'uso di funzioni di attivazione non lineari che causano una diminuzione esponenziale del valore del gradiente all'aumentare della profondità della rete neurale.


In ottimizzazione e analisi numerica il metodo di discesa del gradiente (detto anche "metodo del gradiente", "metodo steepest descent" o "metodo di discesa più ripida") è una tecnica che consente di determinare i punti di massimo e minimo di una funzione di più variabili.
Il metodo è stato sviluppato - e pubblicato nel 1847 - dal matematico francese Augustin-Louis Cauchy nel tentativo di risolvere il problema di determinare l'orbita di un corpo celeste a partire dalle sue equazioni del moto.
Si supponga di voler minimizzare la funzioneformula_1 e si scelga come soluzione iniziale il vettore formula_2. Allora
e, muovendosi in un intorno di formula_4:
Questi calcoli mostrano che, per individuare dei punti - "vicini" a formula_4 - in corrispondenza dei quali la funzione assuma un valore minore di formula_7, conviene spostarsi lungo direzioni che abbiano la prima e la terza componente formula_8 più piccole o seconda componente formula_9 più grande. Inoltre esistono delle direzioni "preferenziali" lungo le quali la funzione formula_10 decresce più velocemente (ad esempio scegliere una coordinata formula_11 più piccola è preferibile, ad esempio, rispetto a far diminuire formula_12).
La procedura può essere iterata partendo da un nuovo punto, ad esempio formula_13, fino ad individuare un minimo per formula_10. L'esempio mostra che una procedura che aggiorni la soluzione in modo iterativo sulla base delle informazioni disponibili "localmente" può portare ad individuare un punto di minimo per la funzione assegnata.
Si voglia risolvere il seguente problema di ottimizzazione non vincolata nello spazio formula_15-dimensionale formula_16
La tecnica di discesa secondo gradiente si basa sul fatto che, per una data funzione formula_18, la direzione di massima discesa in un assegnato punto formula_19 corrisponde a quella determinata dall'opposto del suo gradiente in quel punto formula_20. Questa scelta per la direzione di discesa garantisce che la soluzione tenda a un punto di minimo di formula_10. Il metodo del gradiente prevede dunque di partire da una soluzione iniziale formula_4 scelta arbitrariamente e di procedere iterativamente aggiornandola come
dove formula_24 corrisponde alla lunghezza del passo di discesa, la cui scelta diventa cruciale nel determinare la velocità con cui l'algoritmo convergerà alla soluzione richiesta.
Si parla di metodo "stazionario" nel caso in cui si scelga un passo formula_25 costante per ogni formula_26, viceversa il metodo si definisce "dinamico". In quest'ultimo caso una scelta conveniente, ma computazionalmente più onerosa rispetto a un metodo stazionario, consiste nell'ottimizzare, una volta determinata la direzione di discesa formula_27, la funzione di una variabile formula_28 in maniera analitica o in maniera approssimata. Si noti che, a seconda della scelta del passo di discesa, l'algoritmo potrà convergere a uno qualsiasi dei minimi della funzione formula_10, sia esso locale o globale.
Lo schema generale per l'ottimizzazione di una funzione formula_18 mediante metodo del gradiente è il seguente:
Un caso particolare di applicazione del metodo del gradiente consiste nella risoluzione di sistemi lineari della forma
dove formula_33 è una matrice simmetrica e definita positiva.
Per le proprietà di formula_33 la soluzione di tale problema è equivalente alla procedura di minimizzazione della forma quadratica associata:
Infatti:
da cui
Per la funzione formula_38 si ha che la direzione di massima discesa nel punto formula_39 è:
coincidente con il residuo formula_41 del sistema lineare. Dunque la direzione di discesa scelta a ogni iterazione è formula_42.
Inoltre vale la seguente relazione:
che permette di calcolare analiticamente il passo formula_44 ottimale. Infatti, imponendo la condizione di stazionarietà
si ricava
L'algoritmo del metodo del gradiente per la risoluzione di sistemi lineari è dunque
In aritmetica floating point la condizione del ciclo while può essere valutata verificando che la norma del residuo formula_48 non sia più piccola di una tolleranza impostata dall'utente.
In molti casi è possibile accelerare la velocità di convergenza dell'algoritmo migliorando le proprietà di condizionamento della matrice formula_33. Si introduca a tal fine una matrice di precondizionamento formula_50 simmetrica e definita positiva.
Lo schema risolutivo in questo caso diventa:
Il metodo del gradiente coniugato costituisce una variante del metodo del gradiente in cui viene effettuata una scelta diversa, ma particolarmente conveniente nel caso di sistemi lineari simmetrici e definiti positivi, per le direzioni di discesa formula_27. Tale scelta garantisce la convergenza del metodo (in aritmetica esatta) in un numero di iterazioni pari al più alla dimensione del sistema da risolvere.
È possibile dimostrare che l'errore commesso alla formula_26-esima iterazione del metodo del gradiente soddisfa la seguente stima:
dove
formula_56 indica il numero di condizionamento in norma formula_57 di formula_33 e formula_59 è la norma indotta da formula_33.
Nel caso precondizionato vale la stessa stima con
Si riporta un esempio di possibile implementazione del metodo del gradiente nella versione precondizionata compatibile con i linguaggi di programmazione Octave e MATLAB.
Quando la funzione obiettivo è troppo costosa da calcolare ad ogni iterazione, ma può essere scomposta in una somma di molti addendi (ad esempio, la somma del costo calcolato su ogni singolo record in un dataset), il gradiente può essere approssimato stocasticamente restringendo la somma su un sottinsieme di addendi ad ogni iterazione, metodo noto come discesa stocastica del gradiente.
La discesa del gradiente è ampiamente utilizzata in statistica e apprendimento automatico per l'addestramento tramite apprendimento supervisionato di modelli come reti neurali artificiali e modelli grafici. Il principio è noto come regola delta, e consiste nel valutare il modello su un input il cui corrispondente output esatto sia noto, e correggere ciascun parametro del modello in una quantità proporzionale (ma di segno opposto) rispetto al suo contributo all'errore sul risultato. L'algoritmo usato nelle reti neurali per implementare questo principio è noto come retropropagazione dell'errore, che consiste in un'applicazione della discesa del gradiente, essendo il contributo di ciascun parametro all'errore del modello dato dalla derivata parziale della funzione di perdita rispetto al parametro stesso.
La regola, classificabile fra i metodi per l'apprendimento supervisionato, può essere applicata a reti neurali di tipo "in avanti" (cioè con propagazione unidirezionale dei segnali, in inglese: "feedforward") e permette di calcolare la differenza tra i valori di output che la rete ottiene e quelli che invece dovrebbe apprendere. La regola deve essere applicata a reti che usano unità di output ad attivazione continua e differenziabile ed è l'elemento fondamentale dell'algoritmo di retropropagazione dell'errore ("backpropagation"), alla base dell'approccio connessionista.
Data una rete "in avanti" con le proprietà sopra descritte, l'obiettivo che ci si prefigge è minimizzare la diversità tra i valori di attivazione delle unità di output formula_62 della rete (ottenuti sommando i segnali provenienti dalle diverse unità di input formula_63 moltiplicati per l'efficacia, o "pesi sinaptici" formula_64 delle connessioni in ingresso), e i valori formula_65 della risposta desiderata. Tale diversità viene quantificata attraverso una funzione di perdita. La funzione obiettivo che si vuole minimizzare è il valore atteso della perdita (in pratica la perdita media sui dati).
Per applicare il metodo del gradiente, la funzione di perdita deve essere derivabile rispetto ai valori di output formula_62. Una scelta adatta a problemi di regressione è lo scarto quadratico medio tra formula_62 e formula_65 (valutato per tutte le unità di output e per tutti i pattern d'apprendimento); per problemi di classificazione si può utilizzare la divergenza di Kullback-Leibler o equivalentemente l'entropia incrociata.
Nella fase di addestramento, variando i pesi sinaptici formula_64 (parametri del modello) si può aumentare o diminuire la funzione obiettivo; la "prestazione" della rete sarà funzione delle variabili formula_64, e sarà massima quando si raggiunge il minimo della funzione obiettivo, il che si ottiene applicando il metodo del gradiente e aggiornando iterativamente i valori dei pesi sinaptici.
Poiché nelle applicazioni pratiche le dimensioni dei modelli e dei relativi dataset usati nell'addestramento sono molto grandi, in pratica si fa generalmente uso della discesa stocastica del gradiente per l'addestramento delle reti neurali e di altri modelli statistici e di apprendimento automatico.
