Propagazione All'Indietro
La propagazione all'indietro (backprop) è il processo di calcolo di come la funzione di perdita varia rispetto a ciascun parametro della rete. L'obiettivo è aggiornare i parametri nella direzione che riduce la perdita.
Per ottenere questo risultato, si utilizza l'algoritmo di discesa del gradiente e si calcolano le derivate della perdita rispetto ai valori di pre-attivazione di ciascun livello (valori grezzi prima dell'applicazione della funzione di attivazione), propagandoli all'indietro.
Ogni livello contribuisce alla previsione finale, quindi i gradienti devono essere calcolati in modo strutturato:
- Eseguire la propagazione in avanti;
- Calcolare la derivata della perdita rispetto alla pre-attivazione di uscita;
- Propagare questa derivata all'indietro attraverso i livelli utilizzando la regola della catena;
- Calcolare i gradienti per pesi e bias per aggiornarli.
I gradienti rappresentano il tasso di variazione di una funzione rispetto ai suoi input, ovvero sono le sue derivate. Indicano quanto una piccola variazione di pesi, bias o attivazioni influisce sulla funzione di perdita, guidando il processo di apprendimento del modello tramite la discesa del gradiente.
Notazione
Per rendere la spiegazione più chiara, utilizziamo la seguente notazione:
- Wl è la matrice dei pesi del livello l;
- bl è il vettore dei bias del livello l;
- zl è il vettore delle pre-attivazioni del livello l;
- al è il vettore delle attivazioni del livello l;
Pertanto, ponendo a0 uguale a x (gli input), la propagazione in avanti in un percettrone con n livelli può essere descritta dalla seguente sequenza di operazioni:
a0z1a1=x,=W1a0+b1,=f1(z1),...zlal...=Wlal−1+bl,=fl(zl),...znany^...=Wnan−1+bn,=fn(zn),=an.Per descrivere matematicamente la retropropagazione, introduciamo le seguenti notazioni:
- dal: derivata della funzione di perdita rispetto alle attivazioni allo strato l;
- dzl: derivata della funzione di perdita rispetto alle pre-attivazioni allo strato l (prima di applicare la funzione di attivazione);
- dWl: derivata della funzione di perdita rispetto ai pesi allo strato l;
- dbl: derivata della funzione di perdita rispetto ai bias allo strato l.
Calcolo dei gradienti per lo strato di output
All'ultimo strato n, si calcola innanzitutto il gradiente della funzione di perdita rispetto alle attivazioni dello strato di output, dan. Successivamente, utilizzando la regola della catena, si calcola il gradiente della funzione di perdita rispetto alle pre-attivazioni dello strato di output:
dzn=dan⊙f′n(zn)Il simbolo ⊙ rappresenta la moltiplicazione elemento per elemento. Poiché si lavora con vettori e matrici, il simbolo di moltiplicazione usuale ⋅ rappresenta invece il prodotto scalare. f′n è la derivata della funzione di attivazione dello strato di output.
Questa quantità rappresenta la sensibilità della funzione di perdita rispetto alle variazioni nella pre-attivazione dello strato di output.
Una volta ottenuto dzn, si calcolano i gradienti per i pesi e i bias:
dWndbn=dzn⋅(an−1)T=dzndove (an−1)T è il vettore trasposto delle attivazioni provenienti dallo strato precedente. Dato che il vettore originale è un vettore nneurons×1, il vettore trasposto è 1×nneurons.
Per propagare questa quantità all'indietro, si calcola la derivata della perdita rispetto alle attivazioni dello strato precedente:
dan−1=(Wn)T⋅dznPropagazione dei Gradienti agli Strati Nascosti
Per ogni strato nascosto l la procedura è la stessa. Dato dal:
- Calcolare la derivata della perdita rispetto alle pre-attivazioni;
- Calcolare i gradienti per i pesi e i bias;
- Calcolare dal−1 per propagare la derivata all'indietro.
Questo passaggio si ripete fino a raggiungere lo strato di input.
Aggiornamento di pesi e bias
Una volta calcolati i gradienti per tutti gli strati, si aggiornano i pesi e i bias utilizzando la discesa del gradiente:
Wlbl=Wl−α⋅dWl=bl−α⋅dbldove α è il tasso di apprendimento, che controlla quanto vengono modificati i parametri.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 4
Propagazione All'Indietro
Scorri per mostrare il menu
La propagazione all'indietro (backprop) è il processo di calcolo di come la funzione di perdita varia rispetto a ciascun parametro della rete. L'obiettivo è aggiornare i parametri nella direzione che riduce la perdita.
Per ottenere questo risultato, si utilizza l'algoritmo di discesa del gradiente e si calcolano le derivate della perdita rispetto ai valori di pre-attivazione di ciascun livello (valori grezzi prima dell'applicazione della funzione di attivazione), propagandoli all'indietro.
Ogni livello contribuisce alla previsione finale, quindi i gradienti devono essere calcolati in modo strutturato:
- Eseguire la propagazione in avanti;
- Calcolare la derivata della perdita rispetto alla pre-attivazione di uscita;
- Propagare questa derivata all'indietro attraverso i livelli utilizzando la regola della catena;
- Calcolare i gradienti per pesi e bias per aggiornarli.
I gradienti rappresentano il tasso di variazione di una funzione rispetto ai suoi input, ovvero sono le sue derivate. Indicano quanto una piccola variazione di pesi, bias o attivazioni influisce sulla funzione di perdita, guidando il processo di apprendimento del modello tramite la discesa del gradiente.
Notazione
Per rendere la spiegazione più chiara, utilizziamo la seguente notazione:
- Wl è la matrice dei pesi del livello l;
- bl è il vettore dei bias del livello l;
- zl è il vettore delle pre-attivazioni del livello l;
- al è il vettore delle attivazioni del livello l;
Pertanto, ponendo a0 uguale a x (gli input), la propagazione in avanti in un percettrone con n livelli può essere descritta dalla seguente sequenza di operazioni:
a0z1a1=x,=W1a0+b1,=f1(z1),...zlal...=Wlal−1+bl,=fl(zl),...znany^...=Wnan−1+bn,=fn(zn),=an.Per descrivere matematicamente la retropropagazione, introduciamo le seguenti notazioni:
- dal: derivata della funzione di perdita rispetto alle attivazioni allo strato l;
- dzl: derivata della funzione di perdita rispetto alle pre-attivazioni allo strato l (prima di applicare la funzione di attivazione);
- dWl: derivata della funzione di perdita rispetto ai pesi allo strato l;
- dbl: derivata della funzione di perdita rispetto ai bias allo strato l.
Calcolo dei gradienti per lo strato di output
All'ultimo strato n, si calcola innanzitutto il gradiente della funzione di perdita rispetto alle attivazioni dello strato di output, dan. Successivamente, utilizzando la regola della catena, si calcola il gradiente della funzione di perdita rispetto alle pre-attivazioni dello strato di output:
dzn=dan⊙f′n(zn)Il simbolo ⊙ rappresenta la moltiplicazione elemento per elemento. Poiché si lavora con vettori e matrici, il simbolo di moltiplicazione usuale ⋅ rappresenta invece il prodotto scalare. f′n è la derivata della funzione di attivazione dello strato di output.
Questa quantità rappresenta la sensibilità della funzione di perdita rispetto alle variazioni nella pre-attivazione dello strato di output.
Una volta ottenuto dzn, si calcolano i gradienti per i pesi e i bias:
dWndbn=dzn⋅(an−1)T=dzndove (an−1)T è il vettore trasposto delle attivazioni provenienti dallo strato precedente. Dato che il vettore originale è un vettore nneurons×1, il vettore trasposto è 1×nneurons.
Per propagare questa quantità all'indietro, si calcola la derivata della perdita rispetto alle attivazioni dello strato precedente:
dan−1=(Wn)T⋅dznPropagazione dei Gradienti agli Strati Nascosti
Per ogni strato nascosto l la procedura è la stessa. Dato dal:
- Calcolare la derivata della perdita rispetto alle pre-attivazioni;
- Calcolare i gradienti per i pesi e i bias;
- Calcolare dal−1 per propagare la derivata all'indietro.
Questo passaggio si ripete fino a raggiungere lo strato di input.
Aggiornamento di pesi e bias
Una volta calcolati i gradienti per tutti gli strati, si aggiornano i pesi e i bias utilizzando la discesa del gradiente:
Wlbl=Wl−α⋅dWl=bl−α⋅dbldove α è il tasso di apprendimento, che controlla quanto vengono modificati i parametri.
Grazie per i tuoi commenti!