Discesa del gradiente in batch rispetto alla discesa del gradiente stocastico

Supponiamo di avere un set di addestramento $ (x _ {(i)}, y _ {(i)}) $ per $ i = 1, \ dots, m $ . Supponiamo inoltre di eseguire qualche tipo di algoritmo di apprendimento supervisionato sul set di addestramento. Le ipotesi sono rappresentate come $ h _ {\ theta} (x _ {(i)}) = \ theta_0 + \ theta_ {1} x _ {(i) 1} + \ cdots + \ theta_ { n} x _ {(i) n} $ . Dobbiamo trovare i parametri $ \ mathbf {\ theta} $ che minimizzano la “distanza” tra $ y _ {(i )} $ e $ h _ {\ theta} (x _ {(i)}) $ . Lascia che $$ J (\ theta) = \ frac {1} {2} \ sum_ {i = 1} ^ {m} (y _ {(i)} – h _ {\ theta } (x _ {(i)}) ^ {2} $$

Quindi vogliamo trovare $ \ theta $ che minimizza $ J (\ theta) $ . Nella discesa del gradiente inizializziamo ogni parametro ed eseguiamo il seguente aggiornamento: $$ \ theta_j : = \ theta_j- \ alpha \ frac {\ partial} {\ partial \ theta_ {j}} J (\ theta) $$

Qual è la differenza fondamentale tra la discesa del gradiente in batch e la discesa del gradiente stocastico?

Entrambi utilizzano la regola di aggiornamento precedente. Ma uno è migliore dellaltro?

Risposta

Lapplicabilità della discesa del gradiente stocastico o batch dipende in realtà dalla varietà di errori prevista.

La discesa del gradiente in batch calcola il gradiente utilizzando lintero set di dati. Questo è ottimo per le varietà di errore convesse o relativamente uniformi. In questo caso, ci spostiamo di qualche cappello diretto verso una soluzione ottimale, locale o globale. Inoltre, la discesa del gradiente in batch, data una velocità di apprendimento ricotto, alla fine troverà il minimo situato nel bacino di attrazione.

La discesa del gradiente stocastico (SGD) calcola il gradiente utilizzando un singolo campione. La maggior parte delle applicazioni di SGD in realtà utilizza un minibatch di diversi campioni, per ragioni che verranno spiegate un po più avanti. SGD funziona bene (non bene, suppongo, ma meglio della discesa del gradiente batch) per le varietà di errore che hanno molti massimi / minimi locali. caso, il gradiente un po più rumoroso calcolato utilizzando il numero ridotto di campioni tende a spostare il modello dai minimi locali in una regione che si spera sia più ottimale. I campioni singoli sono davvero rumorosi, mentre i minibatch tendono a mediare un po del rumore. , la quantità di jerk è ridotta quando si utilizzano minibatch. Un buon equilibrio viene raggiunto quando la dimensione del minibatch è abbastanza piccola da evitare alcuni dei minimi locali poveri, ma abbastanza grande da non evitare i minimi globali o le prestazioni migliori l minimi ocali. (Per inciso, questo presuppone che i minimi migliori abbiano un bacino di attrazione più ampio e profondo e siano quindi più facili da raggiungere.)

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

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

Il modo in cui mi piace pensare a come funziona SGD è immaginare di avere un punto che rappresenta la mia distribuzione di input. Il mio modello sta tentando di apprendere quella distribuzione degli input. Intorno alla distribuzione dellinput cè unarea ombreggiata che rappresenta le distribuzioni degli input di tutti i possibili minibatch che ho potuto campionare. Di solito è giusto presumere che le distribuzioni di input del minibatch siano vicine alla distribuzione di input reale. La discesa del gradiente di batch, a tutti i passaggi, prende il percorso più ripido per raggiungere la distribuzione di input reale. SGD, invece, sceglie una punto casuale allinterno dellarea ombreggiata e prende il percorso più ripido verso questo punto. Ad ogni iterazione, però, sceglie un nuovo punto. La media di tutti questi passaggi si avvicinerà alla vera distribuzione dellinput, di solito abbastanza bene.

Commenti

  • In pratica, nessuno usa Batch Gradient Descent. ‘ è semplicemente troppo costoso dal punto di vista computazionale per non molto di un guadagno. (Il vantaggio è che tu ‘ stai effettivamente abbandonando il ” true ” gradiente.) Quando hai una funzione di perdita altamente non convessa, devi solo muoverti principalmente nella giusta direzione e ‘ alla fine convergi o n un minimo locale. Quindi, minibatch SGD.
  • @Jason_L_Bens hai qualche riferimento (documenti o testi online) dove posso leggere di più su questi algoritmi?
  • @ user110320 Non a testa alta, no, sebbene ‘ sono algoritmi molto comuni, quindi dovrebbero essere disponibili tonnellate di risorse sullargomento con un po di ricerca. Se ‘ stai cercando un approccio generale, ‘ ti consiglio di leggere alcuni brani di Yoshua Bengio ‘ s Apprendimento delle architetture profonde per lIA. ‘ è dove ho iniziato.

Risposta

Come suggerisce unaltra risposta, il motivo principale per utilizzare SGD è ridurre il costo di calcolo del gradiente pur mantenendo in gran parte la direzione del gradiente quando viene calcolata la media su molti mini-batch o campioni, il che sicuramente aiuta a raggiungere i minimi locali.

  1. Perché il minibatch funziona .

La matematica alla base di questo è che il gradiente ” true ” della funzione di costo (il gradiente per lerrore di generalizzazione o per un insieme di campioni infinitamente grandi) è laspettativa del gradiente $ g $ sulla distribuzione che genera i dati reali $ p_ {data} $ ; il gradiente effettivo $ \ hat {g} $ calcolato su un lotto di campioni è sempre unapprossimazione del vero gradiente con la distribuzione empirica dei dati $ \ hat {p} _ {data} $ . $$ \ hat {g} = E _ {\ hat {p} _ {data}} ({\ partial J (\ theta) \ over \ partial \ theta}) $$ La discesa del gradiente in batch può portarti il possibile gradiente ” ottimale ” dato tutti i campioni di dati, non è il ” true ” gradiente però. Un batch più piccolo (cioè un minibatch) probabilmente non è ottimale come il batch completo, ma sono entrambe approssimazioni, così come il minibatch a campione singolo (SGD).

Supponendo che non vi sia dipendenza tra $ m $ campioni in un minibatch, il $ \ hat {g} (m) $ calcolato è un errore stima del gradiente reale. Lerrore standard (al quadrato) delle stime con diverse dimensioni di minibatch è inversamente proporzionale alle dimensioni del minibatch. Cioè, $$ {SE ({\ hat {g} (n)}) \ over SE ({\ hat {g} (m)})} = {\ sqrt { m \ over n}} $$ Cioè, la riduzione dellerrore standard è la radice quadrata dellaumento della dimensione del campione. Ciò significa che, se la dimensione del minibatch è piccola, anche il tasso di apprendimento deve essere piccolo, al fine di ottenere stabilità sulla varianza grande. Quando i campioni non sono indipendenti, la proprietà della stima imparziale non viene più mantenuta. Ciò richiede di mescolare i campioni prima delladdestramento, se i campioni non sono sequenziati in modo abbastanza casuale.

  1. Perché il minibatch può funziona meglio .

In primo luogo, il minibatch rende alcuni problemi di apprendimento tecnicamente intrattabili per essere trattabili a causa della ridotta richiesta di calcolo con batch di dimensioni inferiori.

In secondo luogo, la dimensione ridotta del batch non significa necessariamente una minore precisione del gradiente. I campioni di addestramento hanno molti rumori, valori anomali o pregiudizi. Un minibatch campionato a caso può riflettere i dati reali che generano una distribuzione migliore (o non peggiore) del batch completo originale. Se alcune iterazioni degli aggiornamenti del gradiente del minibatch forniscono una stima migliore, nel complesso il risultato medio di unepoca può essere migliore del gradiente calcolato da un batch completo.

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

Infine, con la discesa del gradiente, non lo sei raggiungendo i minimi globali in un passo, ma iterando sulla varietà di errore. Gradiente ti dà in gran parte solo la direzione per iterare. Con il minibatch, puoi iterare molto più velocemente. In molti casi, più sono le iterazioni, migliore è il punto che puoi raggiungere. Non ti interessa davvero per niente il tempo che il punto è ottimale a livello globale o anche locale. Vuoi solo raggiungere un modello ragionevole che ti porti a un errore di generalizzazione accettabile. Minibatch rende tutto più semplice.

Puoi trovare il libro ” Deep learning ” di Ian Goodfellow e altri, ha discussioni abbastanza buone su questo argomento se lo leggi attentamente.

Commenti

  • Per problemi di ottimizzazione convessa, quello che hai detto va bene.Ma per usare i metodi del gradiente su funzioni non convesse, hai perso un motivo molto critico per cui SGD è migliore del GD batch. Visualizza la mia risposta datascience.stackexchange.com/questions/16807/…
  • @horaceT Grazie per il tuo commento. Poiché il punto che hai menzionato è stato descritto da Jason_L_Bens sopra con i dettagli, non mi sono preoccupato di ripetere ma riferendo la sua risposta nellultimo terzo paragrafo, con il dovuto rispetto. Per il problema dellottimizzazione della discesa del gradiente, il non convesso è riflesso dai minimi locali incluso il punto di sella (vedere lultimo terzo paragrafo); e per amor di descrizione, la mia risposta descrive SGD come minibatch ma con una dimensione batch di 1 (vedere il terzo paragrafo).
  • Perché hai detto virtualmente in * finalmente in unepoca, stai virtualmente la media dei gradienti basata su tutti i campioni forniti. *? Non ‘ pensi che questa affermazione sia sbagliata a causa dellaggiornamento dei pesi a ogni passaggio?
  • @Media Hai ragione. Ho ‘ ho rimosso lultimo paragrafo. Grazie.

Risposta

Per me, il gradiente batch assomiglia al gradiente magro. Nel gradiente magra, la dimensione del lotto viene scelta in modo tale che ogni parametro che deve essere aggiornato venga anche variato indipendentemente, ma non necessariamente ortogonalmente, nel lotto. Ad esempio, se il batch contiene 10 esperimenti, 10 righe, è possibile formare $ 2 ^ {10-1} = 512 $ colonne indipendenti. 10 righe consente laggiornamento indipendente, ma non ortogonale, di 512 parametri.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *