Discesa discendente in pendenza rispetto alla discesa gradiente stocastica


101

Supponiamo di avere un set di addestramento per . Supponiamo inoltre di eseguire un qualche tipo di algoritmo di apprendimento supervisionato sul set di addestramento. Le ipotesi sono rappresentate come . Dobbiamo trovare i parametri che minimizzano la "distanza" tra e . Sia(x(i),y(i))i=1,,mhθ(x(i))=θ0+θ1x(i)1++θnx(i)nθy(i)hθ(x(i))

J(θ)=12i=1m(y(i)hθ(x(i))2

Quindi vogliamo trovare che minimizza . Nella discesa del gradiente inizializziamo ogni parametro ed eseguiamo il seguente aggiornamento:θJ(θ)

θj:=θjαθjJ(θ)

Qual è la differenza chiave tra la discesa gradiente batch e la discesa gradiente stocastica?

Entrambi usano la regola di aggiornamento sopra. Ma uno è migliore dell'altro?

Risposte:


121

L'applicabilità della discesa del gradiente discontinuo o stocastico dipende in realtà dalla varietà di errori prevista.

La discesa del gradiente in batch calcola il gradiente usando l'intero set di dati. Questo è ottimo per collettori di errore convessi o relativamente lisci. In questo caso, ci spostiamo in qualche modo direttamente verso una soluzione ottimale, sia locale che globale. Inoltre, la discesa del gradiente discontinuo, dato un tasso di apprendimento ricotto, alla fine troverà il minimo situato nel suo bacino di attrazione.

La discesa stocastica del gradiente (SGD) calcola il gradiente usando un singolo campione. La maggior parte delle applicazioni di SGD utilizza effettivamente un minibatch di diversi campioni, per ragioni che verranno spiegate un po 'più tardi. SGD funziona bene (non bene, suppongo, ma meglio della discesa del gradiente batch) per collettori di errori che hanno molti massimi / minimi locali. In questo caso, il gradiente un po 'più rumoroso calcolato usando il numero ridotto di campioni tende a scuotere il modello dai minimi locali in una regione che si spera sia più ottimale. I singoli campioni sono davvero rumorosi, mentre i minimarket tendono a fare una media del rumore. Pertanto, la quantità di jerk è ridotta quando si utilizzano i mini-batch. Viene raggiunto un buon equilibrio quando la dimensione del minibatch è abbastanza piccola da evitare alcuni dei minimi locali poveri, ma abbastanza grande da non farlo t evitare i minimi globali o minimi locali più performanti. (Per inciso, questo presuppone che i minimi migliori abbiano un bacino di attrazione più grande e più profondo, e quindi siano più facili da cadere.)

Un vantaggio di SGD è che dal punto di vista computazionale è molto più veloce. Spesso i set di dati di grandi dimensioni non possono essere conservati nella RAM, il che rende la vettorializzazione molto meno efficiente. Piuttosto, ogni campione o lotto di campioni deve essere caricato, lavorato, i risultati memorizzati e così via. Minibatch SGD, d'altra parte, è di solito intenzionalmente reso abbastanza piccolo da essere trattabile dal punto di vista computazionale.

Di solito, questo vantaggio computazionale viene sfruttato eseguendo molte più iterazioni di SGD, facendo molti più passaggi rispetto alla discesa con gradiente batch convenzionale. Questo di solito si traduce in un modello molto vicino a quello che verrebbe trovato tramite la discesa del gradiente batch, o meglio.

Il modo in cui mi piace pensare a come funziona SGD è immaginare di avere un punto che rappresenti la mia distribuzione di input. Il mio modello sta tentando di apprendere quella distribuzione di input. Intorno alla distribuzione di input c'è un'area ombreggiata che rappresenta le distribuzioni di input di tutti i possibili minibatch che potrei campionare. Di solito è ragionevole supporre che le distribuzioni di input minibatch siano vicine alla vera distribuzione di input. La discesa del gradiente in batch, in tutti i passaggi, prende il percorso più ripido per raggiungere la vera distribuzione di input. SGD, d'altra parte, sceglie un punto casuale all'interno dell'area ombreggiata e prende il percorso più ripido verso questo punto. Ad ogni iterazione, tuttavia, sceglie un nuovo punto. La media di tutti questi passaggi approssimerà la vera distribuzione di input, di solito abbastanza bene.


13
In pratica, nessuno usa la Discendenza gradiente in lotti. È semplicemente troppo costoso dal punto di vista computazionale per non essere molto utile. (Il vantaggio è che stai effettivamente abbassando il gradiente "vero".) Quando hai una funzione di perdita altamente non convessa devi solo fare un passo nella direzione giusta e alla fine convergerai su un minimo locale. Pertanto, minibatch SGD.
Sabalaba,

@Jason_L_Bens hai qualche riferimento (documenti o testi online) dove posso leggere di più su questi algoritmi?
user110320

1
@ user110320 Non al limite, no, anche se sono algoritmi molto comuni, e quindi ci dovrebbero essere una tonnellata di risorse disponibili sull'argomento con un po 'di ricerca. Se stai cercando un approccio generale, ti consiglio di leggere alcune delle Learning Deep Architectures di AI di Yoshua Bengio. È da dove ho iniziato.
Jason_L_Bens

6

Come suggerisce un'altra risposta, il motivo principale per utilizzare SGD è ridurre il costo di calcolo del gradiente pur mantenendo in gran parte la direzione del gradiente quando mediata su molti mini-lotti o campioni - che sicuramente aiuta a portarti ai minimi locali.

  1. Perché funziona il minibatch .

La matematica alla base di ciò è che il gradiente "vero" della funzione di costo (il gradiente per l'errore di generalizzazione o per i set di campioni infinitamente grandi) è l'aspettativa del gradiente rispetto ai dati reali che generano la distribuzione ; il gradiente effettivo calcolato su una serie di campioni è sempre un'approssimazione del gradiente reale con la distribuzione empirica dei dati . pdatap^data

g=Epdata(J(θ)θ)
La discesa del gradiente in batch può portare il possibile gradiente "ottimale" dati tutti i campioni di dati, ma non è il gradiente "vero". Un batch più piccolo (minibatch) probabilmente non è ottimale come l'intero batch, ma sono entrambe approssimazioni, così come il minibatch a campione singolo (SGD). La differenza tra gli errori standard è inversamente proporzionale alle dimensioni del minibatch. Cioè,
SE(g^(n))SE(g^(m))=mn
Vale a dire, la riduzione dell'errore standard è la radice quadrata dell'aumento della dimensione del campione. L'equazione sopra è per i gradienti calcolati in una fase della discesa del gradiente minibatch. Quando si ripetono i passaggi degli aggiornamenti del gradiente minibatch e si utilizzano finalmente tutti i campioni di allenamento in un'unica epoca, si sta praticamente calcolando la media dei gradienti in base a tutti i campioni dati. Cioè, per la dimensione del minibatch , Dalle equazioni di cui sopra, possiamo concludere che, con un'epoca, i tuoi gradienti medi con diverse dimensioni di minibatchm
Ep^data(g^(m))=Ep^data(J(θ)θ)
m (da uno a tutto il batch) presentano lo stesso errore standard e, cosa ancora più importante, sono tutte approssimazioni fedeli al gradiente "vero", ovvero si spostano nella giusta direzione del gradiente "vero".
  1. Perché il minibatch potrebbe funzionare meglio .

In primo luogo, il minibatch rende alcuni problemi di apprendimento tecnicamente non impacchettabili per essere affrontabili a causa della ridotta domanda di calcolo con dimensioni di lotto inferiori.

In secondo luogo, la dimensione ridotta del lotto non significa necessariamente una precisione del gradiente ridotta. I campioni di addestramento molti hanno molti rumori o valori anomali o pregiudizi. Un minibatch campionato casualmente può riflettere la distribuzione dei dati reali che genera meglio (o non peggio) del batch completo originale. Se alcune iterazioni degli aggiornamenti del gradiente minibatch offrono una stima migliore, nel complesso il risultato medio di un'epoca può essere migliore del gradiente calcolato da un intero batch.

In terzo luogo, il minibatch non solo aiuta a gestire campioni di dati spiacevoli, ma aiuta anche a gestire la spiacevole funzione di costo che ha molti minimi locali. Come menziona Jason_L_Bens, a volte le varietà di errori possono essere più facili da intercettare un gradiente regolare in un minimo locale, mentre è più difficile intrappolare il gradiente temporaneamente casuale calcolato con minibatch.

Infine, con la discesa del gradiente, non stai raggiungendo i minimi globali in un solo passaggio, ma iterando sulla varietà erro. Il gradiente ti dà in gran parte solo la direzione per iterare. Con Minibatch, puoi iterare molto più velocemente. In molti casi, più iterazioni, il punto migliore che puoi raggiungere. Non ti interessa davvero in qualsiasi condizione atmosferica il punto è ottimale a livello globale o anche a livello locale. Vuoi solo raggiungere un modello ragionevole che ti dia un errore di generalizzazione accettabile. Minibatch lo rende più facile.

Potresti trovare il libro "Apprendimento profondo" di Ian Goodfellow, et al., Che discute abbastanza bene su questo argomento se lo leggi attentamente.


Per problemi di ottimizzazione convessi, quello che hai detto va bene. Ma per usare i metodi a gradiente su funzioni non convesse, hai perso un motivo molto critico che SGD è migliore del batch GD. Vedi la mia risposta datascience.stackexchange.com/questions/16807/…
horaceT

@horaceT Grazie per il tuo commento. Poiché il punto che hai citato è stato descritto da Jason_L_Bens sopra con dettagli, non mi sono preso la briga di ripetere ma riferendo la sua risposta nell'ultimo terzo paragrafo, con il dovuto rispetto. Per sfumare il problema dell'ottimizzazione della discesa, il non convesso viene riflesso dai minimi locali incluso il punto di sella (vedere l'ultimo terzo paragrafo); e per motivi di descrizione, la mia risposta descrive SGD come minibatch ma con una dimensione batch di 1 (vedere il terzo paragrafo).
Xiao-Feng Li

3

Per me, il gradiente batch assomiglia al gradiente magro. In gradienti magri, viene scelta la dimensione del lotto in modo che ogni parametro che deve essere aggiornato, sia variato indipendentemente, ma non necessariamente ortogonalmente, nel lotto. Ad esempio, se il batch contiene 10 esperimenti, 10 righe, è possibile formare colonne indipendenti. 10 righe consentono l'aggiornamento indipendente, ma non ortogonale, di 512 parametri.2101=512

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.