Qual è la differenza tra Gradient Descent e Stochastic Gradient Descent?
Non li conosco molto bene, puoi descrivere la differenza con un breve esempio?
Risposta
Per una spiegazione rapida e semplice:
Sia nella discesa del gradiente (GD) che nella discesa del gradiente stocastico (SGD), si aggiorna una serie di parametri in modo iterativo per ridurre al minimo una funzione di errore.
Mentre in GD, devi esaminare TUTTI gli esempi nel tuo set di addestramento per eseguire un singolo aggiornamento per un parametro in una particolare iterazione, in SGD, daltra parte, usi SOLO UNO o SUBSET di campioni di addestramento da il set di allenamento per eseguire laggiornamento per un parametro in una particolare iterazione. Se usi SUBSET, si chiama Minibatch Stochastic gradient Descent.
Quindi, se il numero di campioni di allenamento è grande, anzi molto grande, luso della discesa del gradiente potrebbe richiedere troppo tempo perché in ogni iterazione quando stai aggiornando i valori dei parametri, stai eseguendo il training set completo. Daltra parte, luso di SGD sarà più veloce perché usi solo un campione di addestramento e inizia a migliorarsi subito dal primo campione.
SGD converge spesso molto più velocemente rispetto a GD ma la funzione di errore non lo è così ridotto al minimo come nel caso di GD. Spesso nella maggior parte dei casi, lapprossimazione ravvicinata che si ottiene in SGD per i valori dei parametri è sufficiente perché raggiungono i valori ottimali e continuano a oscillare.
Se hai bisogno di un esempio di questo con un caso pratico, controlla Andrew NG “nota qui dove mostra chiaramente i passaggi coinvolti in entrambi i casi. cs229-notes
Fonte: Quora Thread
Commenti
- grazie, Brevemente in questo modo? Ci sono tre varianti del Discesa gradiente: Batch, Stocastico e Minibatch: Batch aggiorna i pesi dopo che tutti i campioni di allenamento sono stati valutati. Stocastico, i pesi vengono aggiornati dopo ogni campione di allenamento. Il Minibatch combina il meglio di entrambi i mondi. Non utilizziamo lintero set di dati, ma non usiamo il singolo punto dati. Usiamo un insieme di dati selezionato casualmente dal nostro insieme di dati. In questo modo, riduciamo il costo di calcolo e otteniamo una varianza inferiore rispetto alla versione stocastica.
- Nota che il link sopra a cs229-notes non è attivo. Tuttavia, Wayback Machine, in linea con la data di invio, consegna – yay! web.archive.org/web/20180618211933/http://cs229.stanford.edu/…
Risposta
Linclusione della parola stochastic significa semplicemente che i campioni casuali dai dati di addestramento vengono scelti in ciascuna esecuzione per aggiornare i parametri durante lottimizzazione, nellambito della discesa del gradiente .
In questo modo non solo si calcolano errori e si aggiornano i pesi in iterazioni più veloci (poiché elaboriamo solo una piccola selezione di campioni in una volta), ma spesso aiuta anche a spostarsi verso un ottimale più rapidamente. Dai unocchiata alle risposte qui , per ulteriori informazioni sul motivo per cui lutilizzo di minibatch stocastici per laddestramento offre vantaggi.
Uno degli aspetti forse negativi è che il percorso verso lottimo (supponendo che sarebbe sempre lo stesso ottimo) può essere molto più rumoroso. Quindi, invece di una bella curva di perdita uniforme, che mostra come lerrore diminuisce in ogni iterazione della discesa del gradiente, potresti vedere qualcosa del genere:
Vediamo chiaramente la perdita diminuire nel tempo, tuttavia ci sono grandi variazioni da epoca a epoca (batch di addestramento in batch di addestramento), quindi la curva è rumorosa.
Questo è semplicemente perché calcoliamo lerrore medio sul nostro sottoinsieme selezionato in modo stocastico / casuale, dallintero insieme di dati, in ogni iterazione. Alcuni campioni produrranno un errore elevato, altri basso. Quindi la media può variare, a seconda di quali campioni abbiamo usato casualmente per uniterazione di discesa del gradiente.
Commenti
- grazie, Brevemente come questo? Sono disponibili tre varianti di Gradient Descent: Batch, Stochastic e Minibatch: Batch aggiorna i pesi dopo che tutti i campioni di allenamento sono stati valutati. Stocastico, i pesi vengono aggiornati dopo ogni campione di allenamento. Il Minibatch combina il meglio di entrambi i mondi. Non utilizziamo lintero set di dati, ma non utilizziamo il singolo punto dati. Usiamo un set di dati selezionato casualmente dal nostro set di dati. In questo modo, riduciamo il costo di calcolo e otteniamo una varianza inferiore rispetto alla versione stocastica.
- Se ‘ dico che cè un batch, dove un batch è lintero set di addestramento (quindi fondamentalmente unepoca), poi cè un mini-batch, dove un viene utilizzato un sottoinsieme (quindi qualsiasi numero inferiore allintero insieme $ N $) – questo sottoinsieme viene scelto a caso, quindi è stocastico. Luso di un singolo campione verrebbe indicato come apprendimento in linea ed è un sottoinsieme di mini-batch … O semplicemente mini-batch con
n=1
. - tks, questo è chiaro!
Risposta
In Discesa gradiente o Discesa gradiente batch , usiamo tutti i dati di allenamento per epoca mentre, in Stochastic Gradient Descent, usiamo solo un singolo esempio di allenamento per epoca e Mini-batch Gradient Descent si trova tra questi due estremi, in cui possiamo usare un mini-batch (piccola porzione ) dei dati di addestramento per epoca, la regola empirica per selezionare la dimensione del mini-batch è in potenza di 2 come 32, 64, 128 ecc.
Per ulteriori dettagli: cs231n dispense
Commenti
- grazie, Brevemente come questo? Sono disponibili tre varianti di Gradient Descent: Batch, Stochastic e Minibatch: Batch aggiorna i pesi dopo che tutti i campioni di allenamento sono stati valutati. Stocastico, i pesi vengono aggiornati dopo ogni campione di allenamento. Il Minibatch combina il meglio di entrambi i mondi. Non utilizziamo lintero set di dati, ma non utilizziamo il singolo punto dati. Usiamo un set di dati selezionato casualmente dal nostro set di dati. In questo modo, riduciamo il costo di calcolo e otteniamo una varianza inferiore rispetto alla versione stocastica.
Risposta
Discesa gradiente è un algoritmo per ridurre al minimo $ J (\ Theta) $ !
Idea: per il valore corrente di theta, calcola $ J (\ Theta) $ , quindi fai un piccolo passo in direzione del gradiente negativo. Ripeti.
Algoritmo:
while True: theta_grad = evaluate_gradient(J,corpus,theta) theta = theta - alpha * theta_grad
Ma il problema è che $ J (\ Theta) $ è la funzione di tutto il corpus in Windows, quindi molto costoso da calcolare.
Stochastic Gradient Descent campiona ripetutamente la finestra e aggiorna dopo ciascuna
Stochastic Gradient Descent Algoritmo:
while True: window = sample_window(corpus) theta_grad = evaluate_gradient(J,window,theta) theta = theta - alpha * theta_grad
Di solito la dimensione della finestra di esempio è la potenza di 2, diciamo 32, 64 come mini batch.
Risposta
Entrambi gli algoritmi sono abbastanza simili. Lunica differenza arriva durante literazione. In Discesa in gradiente, consideriamo tutti i punti nel calcolo della perdita e derivata, mentre in Discesa in gradiente stocastica, usiamo un punto singolo nella funzione di perdita e la sua derivata in modo casuale. Dai unocchiata a questi due articoli, entrambi sono correlati e ben spiegati. Spero che sia daiuto.