Come l’AI corregge i propri errori: Gradient descent e backpropagation

Come l’AI corregge i propri errori: Gradient descent e backpropagation

Condividi con i tuoi amici...

Le reti neurali imparano dai “dati” e cercano di fare previsioni basate su questi dati. Ma per fare previsioni accurate, devono regolare i loro “pesi”, che sono come le impostazioni che determinano quanto sono importanti le diverse parti dei dati ai fini della previsione.

Nell’addestramento si fa fare alla rete una previsione e si vede quanto si è lontani dal risultato corretto.

Ora, sorge il problema di come variare i pesi della rete in modo da minimizzare la distanza tra la previsione e il risultato corretto. Variare i pesi casualmente è sicuramente dispersivo e poco efficiente.

La distanza tra il risultato reale e quello previsto può essere vista come un campo pieno di dolci colline e valli dove l’altezza delle colline indica una grande distanza tra i due risultati (quello vero e quello previsto), mentre la valle indica una distanza minima.

Modificare i pesi di una rete neurale mediante l’addestramento è come spostarci in questo campo tra valli e colline. La direzione che prendiamo dipende da come variamo i pesi della rete. Certe variazioni ci fanno andare in una direzione, mentre altre variazioni ci fanno andare in un’altra. Chiaramente avrebbe poco senso variare i pesi in modo da girare intorno ad una collina restando sempre allo stesso livello senza mai scendere, in quanto lo scopo dell’addestramento è proprio quello di scendere e trovarci a valle dove la differenza tra il risultato previsto e quello corretto è minima. Meglio sarebbe trovare la direzione con la pendenza maggiore, così con pochi passi arriveremo a valle.

La tecnica che si usa per trovare la direzione giusta lungo la quale muoverci si chiama retropropagazione dell’errore o discesa del gradiente. Funziona come una bussola che ci aiuta a capire in quale direzione dovremmo muoverci per scendere verso il punto più basso. Questo indica come aggiustare i pesi.

Approfondimento

Quello di “retropropagazione”, è un algoritmo fondamentale per l’apprendimento nelle reti neurali profonde. Si basa sul calcolo del gradiente della funzione di perdita rispetto ai pesi della rete, permettendo così di aggiustare i pesi in modo da minimizzare la perdita.

Ricordiamo in breve come funziona una rete neurale.

L’input passa attraverso la rete, essendo trasformato a ogni livello dai pesi (parametri) della rete.
Le funzioni di attivazione ai livelli nascosti aggiungono non-linearità al processo, permettendo alla rete di apprendere relazioni complesse.
L‘output finale è calcolato dopo l’elaborazione attraverso tutti i livelli della rete.

Leggi l’articolo Chiarezza sulle reti neurali

La funzione di perdita

L’algoritmo calcola una funzione di perdita (es. cross-entropy per la classificazione) che misura quanto l’output della rete differisce dal valore atteso.

Approfondisci il significato della cross-entropy leggendo l’articolo
Cross-entropy: la funzione che permette ai modelli di AI di migliorarsi.

Backpropagation

Il cuore dell’algoritmo di retropropagazione è il calcolo del gradiente della funzione di perdita rispetto a ogni peso nella rete, utilizzando la regola della catena dal calcolo differenziale. Questo processo si svolge in tre passaggi principali:

Utilizzando la regola della catena, si calcolano i gradienti della funzione di perdita rispetto ai pesi di ogni livello, partendo dall’ultimo fino al primo. Questo implica calcolare il gradiente di ogni funzione di attivazione e poi quello dei pesi.

La regola della catena dice che per funzioni composte f(g(x)), il gradiente di f rispetto a x è il prodotto del gradiente di f rispetto a g e del gradiente di g rispetto a x (lavorando sulle componenti vettoriali si può parlare semplicemente di derivate) :


I pesi sono aggiornati in direzione opposta al gradiente per minimizzare la perdita. L’entità dell’aggiornamento è determinata dal tasso di apprendimento.

Grazie all’utilizzo di tecniche di ottimizzazione come il Gradient Descent e sue varianti (es., Adam, RMSprop), la retropropagazione può essere effettuata efficientemente anche per reti molto profonde.

Nonostante la sua efficacia, la retropropagazione può soffrire di problemi come il vanishing gradient o l’exploding gradient, specialmente in reti molto profonde.

La retropropagazione è fondamentale per il training delle reti neurali, permettendo loro di apprendere da enormi quantità di dati e di eseguire compiti come il riconoscimento delle immagini, la comprensione del linguaggio naturale, e molti altri

​Caso di un classificatore binario ad un livello

Leggi l’articolo sulla regressione logistica
La regressione logistica

La funzione di cross-entropy è comunemente usata come funzione di perdita nelle reti neurali per problemi di classificazione. La formula generale della cross-entropy per due distribuzioni discrete p e q su un insieme di classi C è:

Questi gradienti sono utilizzati poi per aggiornare i pesi e i bias nella direzione opposta rispetto al gradiente per minimizzare la perdita, tipicamente con un metodo di discesa gradiente o sue varianti:

Questi passaggi vengono ripetuti per ogni esempio nel set di dati durante l’addestramento, spesso in mini-lotti (un approccio noto come SGD, Stochastic Gradient Descent), permettendo alla rete di aggiornare iterativamente i pesi e i bias per ridurre la perdita complessiva.

Riassumendo il processo di retropropagazione con la cross-entropy:

Esempi

Questo processo illustra come la retropropagazione e l’aggiornamento dei pesi permettano alla rete di “imparare” dalla differenza tra le previsioni e i veri valori, ottimizzando gradualmente la performance della rete sulla task specifica.

Esempio di rete a due livelli

Clicca sulla seguente immagine per ingrandirla

Come esempio proviamo a calcolare la derivata della funzione di perdita L rispetto al peso W11