Comprensione dell’algoritmo di backpropagation
Scopri la spina dorsale dell’intelligenza artificiale
L’algoritmo di backpropagation è uno strumento per migliorare la rete neurale durante il processo di addestramento. Con l’aiuto di questo algoritmo, i parametri dei singoli neuroni vengono modificati in modo tale che la previsione del modello e il valore effettivo corrispondano il più rapidamente possibile. Ciò consente a una rete neurale di fornire buoni risultati anche dopo un periodo di addestramento relativamente breve.
Questo articolo si unisce agli altri post sulle nozioni di base sull’apprendimento automatico. Se non hai alcun background sull’argomento delle reti neurali e della discesa del gradiente , dovresti dare un’occhiata ai post collegati prima di continuare a leggere. Potremo solo accennare brevemente a questi concetti. L’apprendimento automatico in generale è un argomento molto matematico. Per questa spiegazione della retropropagazione, cercheremo di evitare il più possibile le derivazioni matematiche e forniremo solo una comprensione di base dell’approccio.
Reti neurali
Le reti neurali sono costituite da molti neuroni organizzati in diversi strati che comunicano e sono collegati tra loro. Nello strato di input, i neuroni ricevono vari input per il calcolo. La rete dovrebbe essere addestrata in modo che il livello di output, l’ultimo livello, faccia una previsione basata sull’input che sia il più vicino possibile al risultato effettivo.
A tale scopo vengono utilizzati i cosiddetti livelli nascosti. Questi strati contengono anche molti neuroni che comunicano con gli strati precedenti e successivi. Durante l’allenamento, i parametri di ponderazione di ciascun neurone vengono modificati in modo che la previsione si avvicini il più possibile alla realtà. L’algoritmo di backpropagation ci aiuta a decidere quale parametro modificare in modo da minimizzare la funzione di perdita.
Metodo di discesa del gradiente
Il metodo del gradiente è un algoritmo basato su problemi di ottimizzazione matematica, che aiuta ad avvicinarsi al minimo di una funzione il più velocemente possibile. Si calcola la derivata di una funzione, il cosiddetto gradiente, e si va nella direzione opposta a questo vettore perché c’è la discesa più ripida della funzione.
Se questo è troppo matematico, potresti avere familiarità con questo approccio dalle escursioni in montagna. Hai finalmente scalato la cima della montagna, scattato le foto obbligatorie e goduto a sufficienza del panorama, e ora vuoi tornare a valle e tornare a casa il più in fretta possibile. Quindi cerchi la via più veloce dalla montagna fino a valle, cioè il minimo della funzione. Intuitivamente, si prenderà semplicemente il sentiero che ha la discesa più ripida per l’occhio, perché si presume che questa sia la via più veloce per tornare in discesa. Naturalmente, questo è solo in senso figurato, poiché nessuno oserà scendere dalla scogliera più ripida della montagna.
Il metodo del gradiente fa lo stesso con una funzione. Siamo da qualche parte nel grafico della funzione e stiamo cercando di trovare il minimo della funzione. Contrariamente all’esempio della montagna, abbiamo solo due possibilità per muoverci in questa situazione. O nella direzione x positiva o negativa (con più di una variabile, cioè uno spazio multidimensionale, ci sono ovviamente più direzioni corrispondenti). Il gradiente ci aiuta sapendo che la sua direzione negativa è la discesa più ripida della funzione.
Gradiente discendente nell’apprendimento automatico
La funzione che ci interessa nell’apprendimento automatico è la funzione di perdita. Misura la differenza tra la previsione della rete neurale e il risultato effettivo del punto dati di addestramento. Vogliamo anche minimizzare questa funzione, poiché avremo quindi una differenza pari a 0. Ciò significa che il nostro modello può prevedere con precisione i risultati del set di dati. Le viti di regolazione per arrivarci sono i pesi dei neuroni, che possiamo modificare per avvicinarci all’obiettivo.
In breve: durante l’addestramento otteniamo la funzione di perdita di cui cerchiamo il minimo. A tale scopo, calcoliamo il gradiente della funzione dopo ogni ripetizione e andiamo nella direzione della discesa più ripida della funzione. Sfortunatamente, non sappiamo ancora quale parametro dobbiamo modificare e di quanto minimizzare la funzione di perdita. Il problema qui è che la procedura del gradiente può essere eseguita solo per il livello precedente e i suoi parametri. Tuttavia, una rete neurale profonda è costituita da molti livelli nascosti diversi i cui parametri possono teoricamente essere tutti responsabili dell’errore complessivo.
Quindi, nelle reti di grandi dimensioni, dobbiamo anche determinare quanta influenza ha avuto ciascun parametro sull’eventuale errore e quanto dobbiamo modificarli. Questo è il secondo pilastro della backpropagation, da cui deriva il nome.
Algoritmo di retropropagazione
Cercheremo di mantenere questo post il più non matematico possibile, ma sfortunatamente non possiamo farne completamente a meno. Ogni livello nella nostra rete è definito da un input, dal livello precedente o dal set di dati di addestramento, e da un output, che viene passato al livello successivo. La differenza tra input e output deriva dai pesi e dalle funzioni di attivazione dei neuroni.
Il problema è che l’influenza che un livello ha sull’errore finale dipende anche da come il livello successivo trasmette questo errore. Anche se un neurone “calcola male”, questo non è così importante se il neurone nello strato successivo ignora semplicemente questo input, cioè imposta la sua ponderazione su 0. Ciò è dimostrato matematicamente dal fatto che il gradiente di uno strato contiene anche i parametri di lo strato successivo. Pertanto, dobbiamo iniziare la backpropagation nell’ultimo livello, il livello di output, e quindi ottimizzare i parametri livello per livello in avanti utilizzando il metodo del gradiente.
Da qui deriva il nome backpropagation, o backpropagation dell’errore, poiché propaghiamo l’errore attraverso la rete da dietro e ottimizziamo i parametri.
Questo è ciò che dovresti portare con te
La backpropagation è un algoritmo per l’addestramento delle reti neurali.
Tra l’altro, è l’applicazione del metodo del gradiente alla funzione di perdita della rete.
Il nome deriva dal fatto che l’errore viene propagato all’indietro dalla fine del modello strato per strato.