Home » Intelligenza Artificiale » 📋 URL
Il gradient descent è una tecnica utilizzata nel Machine Learning per trovare i pesi {\bf w} di una funzione di loss nel caso in cui si abbia a che fare con un problema multidimensionale.
L’algoritmo consiste sempre nel cercare di minimizzare la funzione di loss finché non si arriva in una situazione in cui i pesi convergono a dei valori stazionari \forall\,w_i\in{\bf w}.
L’algoritmo generale può essere riassunto come
\begin{aligned}&\textbf{w} \leftarrow \text{any point in the parameter space}\\ &\text{\textbf{while not} converged \textbf{do}}\\ &\qquad\textbf{for each $w_i$ in w do}\\&\qquad\qquad w_i \leftarrow w_i - \alpha\cdot\dfrac{\partial}{\partial w_i}\left[Loss(\textbf{w})\right]\end{aligned}
A parole: per tutti i punti dell’insieme di dati, ogni valore di peso w_i viene modificato di peso utilizzando la derivata parziale della funzione di loss nella direzione w_i finché non si raggiunge la stabilità, dunque la convergenza.
Nota: il parametro \alpha viene chiamato learning rate. Maggiore è \alpha, più velocemente l’algoritmo cerca di convergere verso il minimo. Il problema di avere valori di \alpha grandi è però quello di avere un algoritmo che non esplora a fondo lo spazio, infatti a causa dei “grandi passi” che vengono fatti a causa di \alpha ci si potrebbe bloccare in una situazione di minimo locale che non rappresenta effettivamente il nostro obiettivo.
Per evitare una situazione del genere si utilizzano dei valori di \alpha variabili che in un primo momento sono piuttosto elevati mentre col tempo diminuiscono sempre di più, permettendo una prima esplorazione dello spazio più approssimativa, per poi raffinare la ricerca quando l’algoritmo ha già un’idea della zona in cui è presente il minimo.
Variazioni del Gradient Descent
- Batch gradient descent: la tecnica del batch GD è molto costosa dal punto di vista computazionale, infatti questo tipo di gradient descent utilizza l’intero dataset per aggiornare i pesi nel corso di ogni iterazione. Viene usato quando non si è particolarmente interessati all’efficienza ma alla qualità della soluzione. Tramite questo algoritmo si è infatti certi di trovare il minimo assoluto
- Stochastic gradient descent (SGD): il gradient descent stocastico è da preferire nel caso in cui l’efficienza sia importante, infatti tramite questo algoritmo si esplora lo spazio in maniera stocastica, dunque si procede “a tentativi” cercando di avvicinarsi il più possibile al minimo cercato. Non c’è però certezza nel trovarlo effettivamente
- Minibatch SGD: rappresenta una tecnica intermedia tra le prime due nella quale si divide lo spazio del problema in un numero arbitrario di sottospazi sui quali si può utilizzare SGD per esplorarli in maniera veloce, riuscendo comunque ad assicurarsi che l’intero spazio venga esplorato grazie alla divisione in minibatch
In poche parole
✅ Il gradient descent viene usato per minimizzare una funzione di loss e trovarne i suoi pesi ottimali. L’algoritmo aggiorna iterativamente i pesi muovendosi nella direzione opposta del gradiente della funzione di loss. L’obiettivo è raggiungere un punto di convergenza in cui i pesi stabilizzano.
✅ Si utilizza un parametro chiamato “learning rate” per controllare la dimensione dei “passi” che l’algoritmo cerca di fare nella direzione del minimo. Valori più alti di learning rate possono accelerare il processo ma potrebbero portare a minimi locali indesiderati.
✅ Per evitare minimi locali, si possono utilizzare learning rates variabili che diminuiscono nel tempo, consentendo una fase iniziale di esplorazione più ampia e una fase successiva di raffinamento.
✅ Esistono anche varianti del gradient descent:
- Batch gradient descent
- Stochastic gradient descent
- Minibatch SGD