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.
- 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 minibatch
mEp^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".
- 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.