Gradient Descent: come apprende il Machine Learning (Parte I)

Mar 19 2023
In che modo un modello di regressione lineare determina la pendenza e il coefficiente ottimali? Potresti aver sentito che sceglie i valori che minimizzano la sua funzione di errore, ma come si fa? In questo articolo, tratteremo l'algoritmo che funziona sotto il cofano di molti processi di apprendimento automatico, apprendimento profondo e ottimizzazione generale delle funzioni convesse: discesa del gradiente. Potrebbe essere utile imparare prima i concetti in 2D e con una semplice funzione come una parabola, ma gli esempi visivi qui sotto dovrebbero aiutare! Intuizione Immagina che la valle raffigurata qui sotto sia la nostra funzione di perdita, una misura di quanto le nostre previsioni siano lontane dai valori reali.

In che modo un modello di regressione lineare determina la pendenza e il coefficiente ottimali? Potresti aver sentito che sceglie i valori che minimizzano la sua funzione di errore, ma come si fa?

In questo articolo, tratteremo l'algoritmo che funziona sotto il cofano di molti processi di apprendimento automatico, apprendimento profondo e ottimizzazione generale delle funzioni convesse: discesa del gradiente. Potrebbe essere utile imparare prima i concetti in 2D e con una semplice funzione come a parabola , ma gli esempi visivi di seguito dovrebbero aiutare!

Intuizione

Immagina che la valle raffigurata sotto sia la nostra funzione di perdita, una misura di quanto le nostre previsioni siano lontane dai valori reali. Miriamo a minimizzare la funzione per creare il modello migliore (quello che prevede il più vicino possibile ai valori effettivi).

Ottimizzare la funzione di perdita è analogo a raggiungere il fondovalle!

Analogia per la funzione di perdita di un modello

Per visualizzarlo, ho sovrapposto gli assi x, y e z = f(x, y) sulla nostra immagine per simboleggiare una funzione di perdita f(x, y). La freccia rappresenta l'obiettivo che stiamo cercando di raggiungere: il fondovalle, raggiunto alla coordinata (x, y) che risulta nell'output f(x, y) minimo.

Interpretazione multivariata del raggiungimento del fondovalle minimizzando l'output della funzione di perdita f(x,y)

Comprensione dei vettori gradiente

Logicamente, il modo più rapido per salire o scendere dalla montagna è seguire il pendio della montagna stessa.

In 2D, il tasso di variazione di una certa quantità (altezza, in questo caso) in un punto sarà semplicemente la derivata (o pendenza istantanea) di y rispetto a x in quel punto. Questo sarebbe uno scalare.

In 3D, ti muovi in ​​2 modi: fronte-retro (asse x in questa immagine) OPPURE da lato a lato (asse y). Seguire il pendio naturale della montagna richiede che il tuo movimento abbia entrambe le componenti x e y, come i vettori disegnati sotto.

Pendio naturale della montagna - vettori di gradiente

In 3D, il tasso di variazione dell'altezza deve essere calcolato individualmente per ogni componente x e y:

  • Mantenendo y costante, troviamo il tasso di variazione dell'altezza rispetto solo a x in un punto tramite ∂f/∂x, la derivata parziale rispetto a x
  • Mantenendo x costante, troviamo il tasso di variazione dell'altezza rispetto solo a y in un punto tramite ∂f/∂y, la derivata parziale rispetto a y

Ora, torniamo a quello che stiamo cercando di trovare: gli input (x, y) che corrispondono al minimo z del fondovalle. Vogliamo sempre cambiare (x, y) in modo da essere più vicini rispetto a quando abbiamo iniziato.

Regola di aggiornamento

La distinzione tra (x,y) ez = f(x,y) qui è importante. Ad esempio, nell'angolo in alto a sinistra dell'immagine, sia la coordinata x che la coordinata y sono minori della (x, y) corrispondente al minimo. Dobbiamo aumentare sia x che y per diminuire z.

  • Generalizzando, per un dato punto (x, y) sul lato destro dell'immagine, la montagna è inclinata verso l'alto– il tasso di variazione di f(x, y) è positivo rispetto a z. Se aggiungessimo questo vettore gradiente che punta lontano dal minimo al nostro (x, y), aumenteremmo z e andremmo verso l'alto allontanandoci dal nostro obiettivo.
  • Il prossimo caso potrebbe essere più confuso, ma se prendiamo una (x, y) sul lato sinistro, il tasso di variazione di f(x, y) rispetto a z è negativo. Questo vettore gradiente punta verso il minimo, ma aggiungere un vettore negativo a (x, y) equivale ad aggiungere un vettore positivo nella direzione opposta. Ciò aumenterebbe anche z e significherebbe allontanarsi dal nostro obiettivo.

E se allora invertissimo la direzione e ci muovessimo con il gradiente negativo?

Sul lato sinistro dell'immagine, i vettori del gradiente negativo diventerebbero positivi e aumenterebbero (x, y), avvicinandosi al fondo. A destra, i vettori gradiente positivi diventerebbero negativi e diminuirebbero (x, y), anch'essi spostandosi verso il basso. La regola di aggiornamento della discesa del gradiente deriva da questa nozione:

x = x — a * ∂f/∂x valutato in (x, y)

y = y — a * ∂f/∂y valutato in (x, y)

Queste equazioni dicono semplicemente che in un dato punto inizializzato, calcoliamo il tasso di variazione di f(x, y) rispetto solo a x e solo rispetto a y. Quindi, ridimensioniamo questi parziali in base a un tasso di apprendimento indicato con alfa (ne parleremo più avanti) e sottraiamo dal nostro punto corrente (x, y).

Nella nostra analogia, misuriamo la pendenza della montagna, la scaliamo in base al nostro tasso di apprendimento e torniamo indietro da dove siamo.

È importante notare che dobbiamo prima calcolare entrambe le parziali, piuttosto che calcolare ∂f/∂x e modificare x e poi trovare ∂f/∂y. Altrimenti troveremmo i tassi di variazione dei componenti per 2 punti diversi (seguendo il pendio della montagna in 2 punti diversi).

E questo è tutto! Abbiamo coperto tutto ciò che fa l'algoritmo di discesa del gradiente 3D: inizializza un punto (x, y, f(x,y)), calcola le parziali, aggiorna x e y contemporaneamente per spostarsi nella direzione del minimo e ripete questo processo fino alla convergenza. Diversi modelli definiranno la convergenza in modo diverso: alcuni eseguono semplicemente 100 iterazioni, mentre altri continuano finché un aggiornamento delle coordinate diminuisce f(x, y) di meno di .001.

Convergenza

Come puoi immaginare in base alle suddette condizioni per la convergenza, dove inizializziamo il nostro primo punto può fare un'enorme differenza nei risultati del modello.

  • Ad esempio, potremmo convergere a un minimo locale piuttosto che al minimo assoluto se un crinale nella valle fosse vicino al punto di partenza. Per questo motivo, alcuni algoritmi utilizzano test multi-start, il che significa che ci sono più punti di inizializzazione. Ai fini del nostro semplice algoritmo da zero, eviteremo di analizzare funzioni con diversi minimi locali.
  • Inoltre, se inizializzi sul bordo della valle, forse non andrai mai nella direzione corretta per un minimo e divergerai. Per il nostro algoritmo, inizializzeremo a una stima ragionevole del nostro obiettivo.

Un tasso di apprendimento troppo basso significa che il modello impiegherà molto più tempo a convergere verso il nostro obiettivo, analogo a strisciare giù dalla montagna a piccoli passi e morire di fame.

L'algoritmo potrebbe anche potenzialmente convergere troppo presto. Se il gradiente nel punto è piccolo, ad es. la pendenza è graduale, un piccolo numero moltiplicato per un piccolo alfa potrebbe non riuscire a cambiare molto la coordinata e per estensione non riuscire a cambiare f(x, y) di più di .001 che il computer controlla per la convergenza.

Esempio di un alfa troppo piccolo

Un tasso di apprendimento troppo elevato è inefficiente perché può far sì che il modello superi l'obiettivo. Stai prendendo la strada più lunga, rimbalzando avanti e indietro tra i fianchi della valle

Esempio di un alfa troppo grande

Un tasso di apprendimento eccessivamente elevato può persino far divergere completamente il modello, non riuscendo mai a trovare una soluzione per il minimo. Pensa a questo come perdersi e abbandonare completamente la valle.

Esempio di un alfa troppo grande

Un buon algoritmo di discesa del gradiente arriverà in modo fluido ed efficiente al minimo, idealmente il minimo globale:

Esempio di una buona scelta per l'alfa!

Conclusione

Per riportare tutto questo alle applicazioni informatiche, i modelli di apprendimento automatico si addestrano modificando i loro parametri per ridurre al minimo alcune funzioni di perdita che misurano l'errore delle loro previsioni sui dati di addestramento. Migliori parametri del modello = migliori previsioni = minore output della funzione di perdita e meno errori.

Prendiamo l'esempio della regressione lineare: stiamo cercando una pendenza e un'intercetta di regressione che minimizzi la somma dei quadrati dei residui:

Funzione di perdita di regressione lineare, somma dei quadrati delle differenze tra i valori previsti e quelli effettivi

Questo è proprio come i nostri esempi sopra, tranne che invece di qualche funzione f(x, y) che prende come input una coordinata fisica nella valle, la nostra f(m, b) calcola la somma dei quadrati dei residui dai parametri di una data regressione - il suo pendenza e intercetta.

Nella Parte II , metteremo insieme tutto ciò che abbiamo imparato con il codice e proveremo a ottimizzare noi stessi una regressione lineare!

Riferimenti

Vorrei ringraziare i seguenti articoli per avermi aiutato a capire la discesa del gradiente per metterlo insieme!

Gradiente discendente