Blog.

Gradient Descent: cos’è? | Deep Learning & Neural Networks


Autore
Andrea Provino
Data
Tempo di lettura
5 minuti
Categoria
AI, machine-learning

Cos’è il Gradient Descent (Discesa del gradiente) ? Il Gradient Descent è un optimization algorithm (algoritmo di ottimizzazione) capace d’individuare il valore minimo di una cost function, consentendoti di sviluppare un modello dalle accurate previsioni.

Allineiamoci un attimo.

Oversimplifying… Una rete neurale sviluppa una funzione che mappa gli input agli output e viene generato un modello utile a fare previsioni.

Quella funzione contiene differenti parametri il cui valore deve essere in qualche modo appreso.

Dude, dov’è finito il vostro linguaggio forbito?

Siamo data scientst. Siamo mucche viola. Il nostro codice etico reclama un linguaggio forbito.

Prima di arrivare a una spiegazione tecnica, dobbiamo comprendere il concetto intuitivamente.

Dunque.

Calcolare valori randomici a ogni epoca, o iterazione, con il solo obiettivo di generare quelli perfetti è il modo stupido di procedere. Non ci piace.

In realtà conserviamo il metodo randomico per inizializzare i parametri.

Ora però dobbiamo valutare in che modo la loro variazione cambi la previsione finale.

Ci serve quindi una funzione che determini quanto il nostro modello sia bravo, o meno, a effettuare le previsioni: entra in gioco la cost function.

Piccola nota: loss function e cost function sono concetti differenti. In breve, senza scendere troppo nel tecnico, la loss function è relativa alle singole previsioni, quindi calcolata su ciascuna osservazione del dataset; la cost function è definita globalmente.

Quindi ora abbiamo:

  • Una funzione con il compito di mappare gli input e gli output: il nostro modello, con differenti parametri i weights.
  • Una cost function che calcola quale sia l’errore del modello per i parametri che lo definiscono.

Ecco la strada per arrivare in vetta: dobbiamo minimizzare la cost function, cioè trovare quei valori del modello, quei weights, tali per cui la cost function abbia il valore minimo.

Come facciamo?

Ancora una volta entra in gioco la matematica e come sempre con una soluzione brillante: optimization algorithm, ovvero gli algoritmi di ottimizzazione.

Abbiamo definito cosa siano, e chiuso la nostra introduzione con una carrellata di algoritmi.

“In realtà erano 4”

Abbiamo definito cosa siano, e chiuso la nostra introduzione con un cestino di algoritmi.

Honest

Gradient Descent algorithm

Finalmente iniziamo a parlare di Gradient Descent.

Ripetendoci, ma principalmente per motivi estetici:

Gradient Descent (Discesa del gradiente) è un optimization algorithm (algoritmo di ottimizzazione) generico capace d’individuare il valore minimo di una cost function, consentendoti di sviluppare un modello dalle accurate previsioni.

Gradient descent definition

Il cliché vuole che per descriverne il funzionamento si usi la metafora della montagna con la nebbia.

Ormai mucche viola al pascolo, un po’ di nebbia in montagna può farci solo che bene.

Nel problema della montagna vogliamo raggiungere il punto più basso, la valle. La difficoltà è data dall’impossibilità di vedere il tragitto. Quindi decidiamo di procedere a tentativi testando il terreno e la sua pendenza.

Quando inizieremo a salire, la nostra discesa sarà terminata e avremo raggiunto il punto di minimo.

fonte: medium

Come accennato poco fa, la best practice prevede l’inizializziazione in modo randomico dei weights ad un valore prossimo allo zero, ma non zero. (random initialization)

Ora introduciamo un termine: il gradiente.

Il gradiente indica la direzione di salita, quindi è nostro interesse ottenere un gradiente negativo, perché vogliamo scendere, vogliamo raggiungere il punto di minimo.

Quindi aggiorneremo (update) i weights nella direzione negativa del gradiente (negative gradient direction) per minimizzare la perdita (to minimize the loss).

Di quanto deve essere aggiornato il valore?

Lo stabilisce il learning rate.

In soldoni, Il learning rate è un hyperparameter che influenza il cambiamento dei weights in funzione del gradiente.

Approfondiremo insieme questo concetto in un altro post.

Ti basta sapere che il learning rate gestisce lo step di cambiamento dei parametri a ogni iterazione, e viene generalmente indicato con la lettera greca α :

  • Per α troppo piccolo, il tempo di convergenza (convergence) è grande, quindi la determinazione del punto di minimo impiega parecchie risorse computazionali.
  • Per α grande, potrebbe fallire la convergenza, superando il minimo, o arrivando persino a divergere mancando la determinazione della soluzione.

Minimo locale o globale?

Non tutte le funzioni di costo sono semplici archi.

Questo rende l’individuazione del minimo piuttosto complessa.

In merito alla metafora della montagna, potresti infatti obiettare affermando che la “valle” identificata, sia un minimo locale, ben lontana dal nostro ideale minimo globale.

fonte: medium

La nostra amata montagna ci tende un trabocchetto e la valle che crediamo di aver raggiunto è in realtà un ampio terreno pianeggiante: siamo ancora in alta quota, la pianura è altrove.

Prendiamo un esempio pratico.

La Mean Squared Error, una cost function spesso impiegata nel modello di Linear Regression, è una funzione convessa (convex function).

Una convex function ci piace per tre motivi:

  • Ha un minimo globale, senza alcun minimo locale
  • La random initialization non compromette la convergenza
  • È una funzione continua, questo implica che la sua derivata sia una funzione Lipshitziana.

Queste qualità, unite a un learning rate non troppo alto, garantiscono la convergenza al minimo globale. (dopo un tempo sufficiente).

In generale però, come può il gradient descent riconosce un minimo locale da uno globale?

Short answer non può.

Long answer lo rendiamo possibile.

Esistono infatti metodi alternativi per ovviare a questa insidiosa problematica.

Vediamoli nel prossimo post!

Un caldo abbraccio, Andrea.

TaggedAIdeep learningneural networkteoria


Ultimi post

Patricia Merkle Trie

Il Practical Algorithm To Retrieve Information Coded In Alphanumeric Merkle Trie, o Patricia Merkle Trie è una struttura dati chiave-valore usatada Ethereum e particolarmente efficiente per il salvataggio e la verifica dell’integrità dell’informazione. In questo post ne studieremo le caratteristiche. Prima di procedere, ci conviene ripassare l’introduzione al Merkle Tree nella quale abbiamo chiarito il […]

Andrea Provino
ethereum-patricia-merkle-tree
Tree Data Structure: cos’è un Merkle Tree

Un Merkle Tree è una struttura dati efficiente per verificare che un dato appartenga a un insieme esteso di elementi. È comunemente impiegato nelle Peer to Peer network in cui la generazione efficiente di prove (proof) contribuisce alla scalabilità della rete. Capire i vantaggi di questa struttura ci tornerà utile nel nostro percorso di esplorazione […]

Andrea Provino
merkle-tree-cover
UTXO: come funziona il modello Unspent Transaction Outputs

Per tenere traccia dei bilanci utente, la blockchain di Bitcoin sfrutta un modello di contabilità definito UTXO o Unspent Transaction Outputs. In questo articolo ne esaminiamo le caratteristiche. Ogni blockchain è dotata di un sistema di contabilità, un meccanismo attraverso cui tenere traccia dei bilanci di ciascun utente. I due grandi modelli di riferimento nel […]

Andrea Provino
bitcoin-utxo
Cos’è Ethereum

Possiamo definire Ethereum come una macchina a stati distribuita che traccia le transizioni di un archivio dati general-purpose (i.e. una memoria in grado di registrare qualsiasi dato esprimibile come coppia di chiave e valore o key-value) all’interno della Ethereum Blockchain. È arrivato il momento di esplorare uno dei progetti tecnologici più innovativi e interessanti degli […]

Andrea Provino
ethereum