Qual è la differenza tra la discesa del gradiente e la discesa del gradiente stocastico?
Non ho molta familiarità con questi, puoi descriverne la differenza con un breve esempio?
Qual è la differenza tra la discesa del gradiente e la discesa del gradiente stocastico?
Non ho molta familiarità con questi, puoi descriverne la differenza con un breve esempio?
Risposte:
Per una semplice spiegazione rapida:
Sia in discesa gradiente (GD) che in discesa gradiente stocastica (SGD), si aggiorna una serie di parametri in modo iterativo per ridurre al minimo una funzione di errore.
Mentre in GD, devi eseguire TUTTI i campioni nel tuo set di allenamento per fare un singolo aggiornamento per un parametro in una particolare iterazione, in SGD, d'altra parte, usi SOLO UNO o SUBSET di campione di allenamento dal tuo set di allenamento per eseguire l'aggiornamento per un parametro in una particolare iterazione. Se si utilizza SUBSET, viene chiamato discesa gradiente stocastico Minibatch.
Pertanto, se il numero di campioni di allenamento è elevato, in realtà molto elevato, l'utilizzo della discesa gradiente può richiedere troppo tempo perché in ogni iterazione durante l'aggiornamento dei valori dei parametri, si esegue l'intero set di addestramento. D'altra parte, l'utilizzo di SGD sarà più veloce perché si utilizza solo un campione di allenamento e inizia a migliorarsi immediatamente dal primo campione.
SGD converge spesso molto più velocemente rispetto a GD ma la funzione di errore non è minimizzata come nel caso di GD. Spesso nella maggior parte dei casi, l'approssimazione ravvicinata che si ottiene in SGD per i valori dei parametri è sufficiente perché raggiungono i valori ottimali e continuano a oscillare lì.
Se hai bisogno di un esempio di questo con un caso pratico, controlla le note di Andrew NG qui in cui ti mostra chiaramente i passaggi coinvolti in entrambi i casi. cs229-notes
Fonte: Quora Thread
L'inclusione della parola stocastica significa semplicemente che i campioni casuali dai dati di allenamento sono scelti in ogni corsa per aggiornare i parametri durante l'ottimizzazione, nell'ambito della discesa del gradiente .
In questo modo non solo gli errori calcolati e gli aggiornamenti dei pesi in iterazioni più veloci (poiché elaboriamo solo una piccola selezione di campioni in una volta sola), spesso aiutano anche a spostarsi verso un ottimale più rapidamente. Dai un'occhiata alle risposte qui , per ulteriori informazioni sul motivo per cui utilizzando minibatches stocastici per la formazione offre vantaggi.
Un aspetto forse negativo è che il percorso verso l'ottimale (supponendo che sarebbe sempre lo stesso ottimale) può essere molto più rumoroso. Quindi, invece di una bella curva di perdita regolare, che mostra come l'errore diminuisce in ogni iterazione della discesa del gradiente, potresti vedere qualcosa del genere:
Vediamo chiaramente che la perdita diminuisce nel tempo, tuttavia ci sono grandi variazioni da un'epoca all'altra (lotto di allenamento a lotto di allenamento), quindi la curva è rumorosa.
Questo semplicemente perché calcoliamo l'errore medio sul nostro sottoinsieme selezionato stocasticamente / casualmente, dall'intero set di dati, in ogni iterazione. Alcuni campioni produrranno errori elevati, altri bassi. Quindi la media può variare, a seconda di quali campioni abbiamo usato casualmente per una iterazione di discesa gradiente.
In Discesa a gradiente o Discesa a gradiente in batch, utilizziamo tutti i dati di allenamento per epoca mentre, in Discesa a gradiente stocastico, utilizziamo un solo esempio di allenamento per epoca e Discesa a gradiente in mini lotti si trova tra questi due estremi, in cui possiamo usare un mini-batch (piccola porzione) di dati di allenamento per epoca, la regola del pollice per selezionare la dimensione del mini-batch ha una potenza di 2 come 32, 64, 128 ecc.
Per maggiori dettagli: cs231n appunti della lezione