Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Propagazione All'Indietro | Rete Neurale da Zero
Introduzione alle Reti Neurali

bookPropagazione All'Indietro

La propagazione all'indietro, o backpropagation, è il processo di determinazione di come la funzione di perdita varia rispetto a ciascun parametro della rete neurale. L'obiettivo è regolare questi parametri in modo da ridurre la perdita complessiva.

Questo processo si basa sull'algoritmo di discesa del gradiente, che utilizza le derivate della perdita rispetto ai valori di pre-attivazione di ciascun livello (gli output grezzi prima dell'applicazione della funzione di attivazione) e li propaga all'indietro attraverso la rete.

Poiché ogni livello contribuisce alla previsione finale, i gradienti vengono calcolati passo dopo passo:

  1. Eseguire la propagazione in avanti per ottenere gli output;
  2. Calcolare la derivata della perdita rispetto alla pre-attivazione dell'output;
  3. Propagare questa derivata all'indietro attraverso i livelli utilizzando la regola della catena;
  4. Calcolare e utilizzare i gradienti per pesi e bias per aggiornarli durante l'addestramento.
Note
Nota

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:

  • WlW^l è la matrice dei pesi del livello ll;
  • blb^l è il vettore dei bias del livello ll;
  • zlz^l è il vettore delle pre-attivazioni del livello ll;
  • ala^l è il vettore delle attivazioni del livello ll;

Pertanto, ponendo a0a^0 uguale a xx (gli input), la propagazione in avanti in un percettrone con n livelli può essere descritta dalla seguente sequenza di operazioni:

a0=x,......z1=W1a0+b1,zl=Wlal1+bl,zn=Wnan1+bn,a1=f1(z1),al=fl(zl),an=fn(zn),......y^=an.\begin{aligned} a^0 &= x, & &... & &...\\ z^1 &= W^1 a^0 + b^1, & z^l &= W^l a^{l-1} + b^l, & z^n &= W^n a^{n-1} + b^n,\\ a^1 &= f^1(z^1), & a^l &= f^l(z^l), & a^n &= f^n(z^n),\\ &... & &... & \hat y &= a^n. \end{aligned}

Per descrivere matematicamente la retropropagazione, si introducono le seguenti notazioni:

  • dalda^l: derivata della funzione di perdita rispetto alle attivazioni al livello ll;
  • dzldz^l: derivata della funzione di perdita rispetto alle pre-attivazioni al livello ll (prima di applicare la funzione di attivazione);
  • dWldW^l: derivata della funzione di perdita rispetto ai pesi al livello ll;
  • dbldb^l: derivata della funzione di perdita rispetto ai bias al livello ll.

Calcolo dei Gradienti per il Livello di Output

All'ultimo livello nn, il primo passo consiste nel calcolare il gradiente della funzione di perdita rispetto alle attivazioni del livello di output, indicato come danda^n.

Successivamente, utilizzando la regola della catena, il gradiente della funzione di perdita rispetto alle pre-attivazioni del livello di output viene calcolato come:

dzn=danfn(zn)dz^n = da^n \odot f'^n(z^n)

Qui, fn(zn)f'^n(z^n) rappresenta la derivata della funzione di attivazione al livello nn, e il simbolo \odot indica la moltiplicazione elemento per elemento.

Note
Nota

Il simbolo \odot indica la moltiplicazione elemento per elemento, ovvero ogni elemento di un vettore viene moltiplicato per il corrispondente elemento di un altro vettore. Al contrario, il simbolo \cdot rappresenta il prodotto scalare, utilizzato per la moltiplicazione standard di matrici o vettori. Il termine fnf'^n si riferisce alla derivata della funzione di attivazione al livello di output.

Questo valore indica quanto la funzione di perdita sia sensibile alle variazioni dei valori di pre-attivazione dello strato di output.

Dopo aver calcolato dzndz^n, il passo successivo è determinare i gradienti per i pesi e i bias:

dWn=dzn(an1)T,dbn=dzn\begin{aligned} dW^n &= dz^n \cdot (a^{n-1})^T,\\ db^n &= dz^n \end{aligned}

Questi gradienti descrivono di quanto ciascun peso e bias nello strato di output debba essere modificato per ridurre la perdita.

Qui, (an1)T(a^{n-1})^T è il vettore di attivazione trasposto proveniente dallo strato precedente. Se il vettore originale ha dimensione nneurons×1n_{\text{neurons}} \times 1, la sua trasposizione avrà dimensione 1×nneurons1 \times n_{\text{neurons}}.

Per continuare la retropropagazione, si calcola la derivata della perdita rispetto alle attivazioni dello strato precedente come:

dan1=(Wn)Tdznda^{n-1} = (W^n)^T \cdot dz^n

Questa espressione consente al segnale di errore di essere trasmesso all'indietro attraverso la rete, permettendo la regolazione degli strati precedenti durante l'addestramento.

Propagazione dei gradienti agli strati nascosti

Per ogni strato nascosto ll la procedura è la stessa. Dato dalda^l:

  1. Calcolare la derivata della perdita rispetto alle pre-attivazioni;
  2. Calcolare i gradienti per i pesi e i bias;
  3. Calcolare dal1da^{l-1} per propagare la derivata all'indietro.
dzl=dalfl(zl)dWl=dzl(al1)Tdbl=dzldal1=(Wl)Tdzl\begin{aligned} dz^l &= da^l \odot f'^l(z^l)\\ dW^l &= dz^l \cdot (a^{l-1})^T\\ db^l &= dz^l\\ da^{l-1} &= (W^l)^T \cdot dz^l \end{aligned}

Questo processo viene ripetuto per ciascun livello precedente, passo dopo passo, fino a raggiungere il livello di input.

Aggiornamento di pesi e bias

Dopo aver calcolato i gradienti per tutti i livelli, i pesi e i bias vengono aggiornati utilizzando l'algoritmo di discesa del gradiente:

Wl=WlαdWl,bl=blαdbl.\begin{aligned} W^l &= W^l - \alpha \cdot dW^l,\\ b^l &= b^l - \alpha \cdot db^l. \end{aligned}

Qui, α\alpha rappresenta il tasso di apprendimento, che controlla quanto vengono modificati i parametri durante ogni fase di addestramento.

Qui, α\alpha è il tasso di apprendimento, un iperparametro che determina l'entità della modifica applicata a pesi e bias durante ogni fase di aggiornamento.

question mark

Durante la retropropagazione, come aggiorna una rete neurale i suoi pesi e bias per minimizzare la funzione di perdita?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 7

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Suggested prompts:

Can you explain how the chain rule is applied in backpropagation?

What is the difference between pre-activations and activations in a neural network?

Can you provide an example of calculating gradients for a simple neural network?

Awesome!

Completion rate improved to 4

bookPropagazione All'Indietro

Scorri per mostrare il menu

La propagazione all'indietro, o backpropagation, è il processo di determinazione di come la funzione di perdita varia rispetto a ciascun parametro della rete neurale. L'obiettivo è regolare questi parametri in modo da ridurre la perdita complessiva.

Questo processo si basa sull'algoritmo di discesa del gradiente, che utilizza le derivate della perdita rispetto ai valori di pre-attivazione di ciascun livello (gli output grezzi prima dell'applicazione della funzione di attivazione) e li propaga all'indietro attraverso la rete.

Poiché ogni livello contribuisce alla previsione finale, i gradienti vengono calcolati passo dopo passo:

  1. Eseguire la propagazione in avanti per ottenere gli output;
  2. Calcolare la derivata della perdita rispetto alla pre-attivazione dell'output;
  3. Propagare questa derivata all'indietro attraverso i livelli utilizzando la regola della catena;
  4. Calcolare e utilizzare i gradienti per pesi e bias per aggiornarli durante l'addestramento.
Note
Nota

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:

  • WlW^l è la matrice dei pesi del livello ll;
  • blb^l è il vettore dei bias del livello ll;
  • zlz^l è il vettore delle pre-attivazioni del livello ll;
  • ala^l è il vettore delle attivazioni del livello ll;

Pertanto, ponendo a0a^0 uguale a xx (gli input), la propagazione in avanti in un percettrone con n livelli può essere descritta dalla seguente sequenza di operazioni:

a0=x,......z1=W1a0+b1,zl=Wlal1+bl,zn=Wnan1+bn,a1=f1(z1),al=fl(zl),an=fn(zn),......y^=an.\begin{aligned} a^0 &= x, & &... & &...\\ z^1 &= W^1 a^0 + b^1, & z^l &= W^l a^{l-1} + b^l, & z^n &= W^n a^{n-1} + b^n,\\ a^1 &= f^1(z^1), & a^l &= f^l(z^l), & a^n &= f^n(z^n),\\ &... & &... & \hat y &= a^n. \end{aligned}

Per descrivere matematicamente la retropropagazione, si introducono le seguenti notazioni:

  • dalda^l: derivata della funzione di perdita rispetto alle attivazioni al livello ll;
  • dzldz^l: derivata della funzione di perdita rispetto alle pre-attivazioni al livello ll (prima di applicare la funzione di attivazione);
  • dWldW^l: derivata della funzione di perdita rispetto ai pesi al livello ll;
  • dbldb^l: derivata della funzione di perdita rispetto ai bias al livello ll.

Calcolo dei Gradienti per il Livello di Output

All'ultimo livello nn, il primo passo consiste nel calcolare il gradiente della funzione di perdita rispetto alle attivazioni del livello di output, indicato come danda^n.

Successivamente, utilizzando la regola della catena, il gradiente della funzione di perdita rispetto alle pre-attivazioni del livello di output viene calcolato come:

dzn=danfn(zn)dz^n = da^n \odot f'^n(z^n)

Qui, fn(zn)f'^n(z^n) rappresenta la derivata della funzione di attivazione al livello nn, e il simbolo \odot indica la moltiplicazione elemento per elemento.

Note
Nota

Il simbolo \odot indica la moltiplicazione elemento per elemento, ovvero ogni elemento di un vettore viene moltiplicato per il corrispondente elemento di un altro vettore. Al contrario, il simbolo \cdot rappresenta il prodotto scalare, utilizzato per la moltiplicazione standard di matrici o vettori. Il termine fnf'^n si riferisce alla derivata della funzione di attivazione al livello di output.

Questo valore indica quanto la funzione di perdita sia sensibile alle variazioni dei valori di pre-attivazione dello strato di output.

Dopo aver calcolato dzndz^n, il passo successivo è determinare i gradienti per i pesi e i bias:

dWn=dzn(an1)T,dbn=dzn\begin{aligned} dW^n &= dz^n \cdot (a^{n-1})^T,\\ db^n &= dz^n \end{aligned}

Questi gradienti descrivono di quanto ciascun peso e bias nello strato di output debba essere modificato per ridurre la perdita.

Qui, (an1)T(a^{n-1})^T è il vettore di attivazione trasposto proveniente dallo strato precedente. Se il vettore originale ha dimensione nneurons×1n_{\text{neurons}} \times 1, la sua trasposizione avrà dimensione 1×nneurons1 \times n_{\text{neurons}}.

Per continuare la retropropagazione, si calcola la derivata della perdita rispetto alle attivazioni dello strato precedente come:

dan1=(Wn)Tdznda^{n-1} = (W^n)^T \cdot dz^n

Questa espressione consente al segnale di errore di essere trasmesso all'indietro attraverso la rete, permettendo la regolazione degli strati precedenti durante l'addestramento.

Propagazione dei gradienti agli strati nascosti

Per ogni strato nascosto ll la procedura è la stessa. Dato dalda^l:

  1. Calcolare la derivata della perdita rispetto alle pre-attivazioni;
  2. Calcolare i gradienti per i pesi e i bias;
  3. Calcolare dal1da^{l-1} per propagare la derivata all'indietro.
dzl=dalfl(zl)dWl=dzl(al1)Tdbl=dzldal1=(Wl)Tdzl\begin{aligned} dz^l &= da^l \odot f'^l(z^l)\\ dW^l &= dz^l \cdot (a^{l-1})^T\\ db^l &= dz^l\\ da^{l-1} &= (W^l)^T \cdot dz^l \end{aligned}

Questo processo viene ripetuto per ciascun livello precedente, passo dopo passo, fino a raggiungere il livello di input.

Aggiornamento di pesi e bias

Dopo aver calcolato i gradienti per tutti i livelli, i pesi e i bias vengono aggiornati utilizzando l'algoritmo di discesa del gradiente:

Wl=WlαdWl,bl=blαdbl.\begin{aligned} W^l &= W^l - \alpha \cdot dW^l,\\ b^l &= b^l - \alpha \cdot db^l. \end{aligned}

Qui, α\alpha rappresenta il tasso di apprendimento, che controlla quanto vengono modificati i parametri durante ogni fase di addestramento.

Qui, α\alpha è il tasso di apprendimento, un iperparametro che determina l'entità della modifica applicata a pesi e bias durante ogni fase di aggiornamento.

question mark

Durante la retropropagazione, come aggiorna una rete neurale i suoi pesi e bias per minimizzare la funzione di perdita?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 7
some-alt