Come trovare i pesi di ogni nodo in un Neural Network: foreward-pass e back-propagation

Nella maggior parte degli algoritmi che riguardano i Neural Network, la miglior tecnica per determinare i diversi pesi dei nodi che compongono la rete è quella di minimizzare una funzione di loss L({\bf w}) tramite l’algoritmo SGD (stochastic gradient descent). Tale algoritmo riesce infatti a minimizzare la probabilità di bloccarsi in un minimo locale, nonché permette di parallelizzare tramite minibatch l’effettivo calcolo del gradiente necessario per l’SGD.

In breve, possiamo indicare tale procedimento come

{\bf w} \leftarrow {\bf w} - \alpha \cdot\nabla {\bf w}\cdot L({\bf w})

A parole: si tratta di controllare la convergenza della differenza tra il vettore {\bf w} e il gradiente del vettore dei pesi stessi, moltiplicato per il valore delle funzione di loss scelta per descrivere il problema (ed eventualmente scalata del fattore \alpha che rappresenta la maggiore (o minore) velocità dell’algoritmo SGD a muoversi nella direzione del minimo della funzione—in altre parole, rappresenta la quantità di esplorazione fatta dall’agente prima di dirigersi verso il valore finale ricercato). Di fatto, cercare di far convergere tale differenza si traduce nel rendere il più vicino a zero il valore della funzione di loss—infatti nella tecnica citata nelle prime righe parliamo di minimizzare la funzione di loss.

Nel calcolo pratico di tale tecnica avremo bisogno di svolgere due diversi passaggi:

  • Il foreward-pass
  • La back-propagation

Foreward pass

Durante la fase del foreward-pass proviamo a indovinare la funzione che approssima il sistema e calcolare tutte le derivate parziali dei pesi della rete basandoci sulla funzione di loss scelta per la descrizione della specifica rete in questione

\dfrac{\partial}{\partial w_i}\left[L({\bf w})\right]

Back propagation

Durante lo step della back-propagation partiamo dal nodo di output della rete e si calcoliamo “all’indietro” tutti gli errori che vengono commessi rispetto all’output desiderato utilizzando la funzione di loss, che tiene conto degli errori commessi.

A partire dall’ultimo strato della rete i diversi errori vengono poi propagati all’indietro calcolando, per ogni nodo, il suo contributo all’errore totale ottenuto in output.

Successivamente, si può procedere alla fase di aggiornamento dei pesi sulla base dell’errore ottenuto, ripetendo poi più volte tale procedimento per minimizzare di volta in volta la funzione di loss cercando di farla convergere.

In poche parole

‎‏‏‎ ‎‏‏‎✅ Per trovare i pesi ottimali dei nodi di una rete si segue il seguente processo:

  • Durante il forward-pass, si passano i dati di input attraverso la rete neurale per ottenere un primo output che cerca di “indovinare” il comportamento desiderato. Durante questa fase, si calcolano anche le derivate parziali dei pesi della rete rispetto alla funzione di loss scelta.
  • Durante la back-propagation, si parte dal nodo di output della rete e si calcolano gli errori commessi rispetto all’output desiderato utilizzando la funzione di loss. Gli errori vengono quindi propagati all’indietro attraverso la rete, calcolando il contributo di ciascun nodo all’errore totale ottenuto in output.

‎‏‏‎ ‎‏‏‎✅ Una volta calcolati gli errori per ciascun nodo, si procede all’aggiornamento dei pesi. L’obiettivo è ridurre gradualmente la funzione di loss.

Se hai trovato errori o informazioni mancanti scrivi a:
giacomo.dandria@esercizistem.com

Se hai trovato errori o informazioni mancanti scrivi a:
giacomo.dandria@esercizistem.com

Questa pagina è stata utile?
No
Torna in alto