Quanto dovrebbe essere grande la dimensione del lotto per la discesa gradiente stocastica?


Risposte:


72

La "dimensione del campione" si sta parlando viene indicato come dimensione del lotto , . Il parametro dimensione batch è solo uno degli iperparametri che sintonizzerai quando ti alleni una rete neurale con discendenza stocastica gradiente mini-batch (SGD) e dipende dai dati. Il metodo più semplice per la ricerca di iperparametri è quello di eseguire una ricerca in griglia sulla velocità di apprendimento e sulla dimensione del batch per trovare una coppia che faccia convergere la rete.B

Per capire quale dovrebbe essere la dimensione del lotto, è importante vedere la relazione tra discesa gradiente batch, SGD online e SGD mini-batch. Ecco la formula generale per la fase di aggiornamento del peso in SGD mini-batch, che è una generalizzazione di tutti e tre i tipi. [ 2 ]

θt+1θtϵ(t)1Bb=0B1L(θ,mb)θ
  1. Discesa gradiente batch,B=|x|
  2. Discesa gradiente stocastica online:B=1
  3. Discesa gradiente stocastica mini-batch: ma.B>1B<|x|

Si noti che con 1, la funzione di perdita non è più una variabile casuale e non è un'approssimazione stocastica.

SGD converge più velocemente della normale discesa in pendenza "batch" perché aggiorna i pesi dopo aver esaminato un sottoinsieme selezionato casualmente del set di allenamento. Lascia che sia il nostro set di allenamento e lascia che . La dimensione del lotto è solo la cardinalità di :.xmxBmB=|m|

La discesa del gradiente in batch aggiorna i pesi usando i gradienti dell'intero set di dati ; mentre SGD aggiorna i pesi usando una media dei gradienti per un mini-lotto . (L'uso della media anziché una somma impedisce all'algoritmo di eseguire passi troppo grandi se il set di dati è molto grande. Altrimenti, è necessario regolare la frequenza di apprendimento in base alla dimensione del set di dati.) Il valore atteso di questo l'approssimazione stocastica del gradiente usato in SGD è uguale al gradiente deterministico usato nella discesa del gradiente batch. .θxmE[LSGD(θ,m)]=L(θ,x)

Ogni volta che prendiamo un campione e aggiorniamo i nostri pesi, viene chiamato un mini-batch . Ogni volta che eseguiamo l'intero set di dati, si parla di un'epoca .

Supponiamo di avere un vettore di dati , un vettore di peso iniziale che parametrizza la nostra rete neurale, e una funzione di perdita che stiamo cercando di minimizzare . Se abbiamo esempi di allenamento e una dimensione del lotto di , possiamo suddividere tali esempi di allenamento in mini lotti C:x:RDθ0:RSL(θ,x):RSRDRSTB

C=T/B

Per semplicità possiamo supporre che T sia uniformemente divisibile per B. Anche se, quando ciò non accade, come spesso non accade, è necessario assegnare un peso adeguato a ciascun mini-lotto in funzione delle sue dimensioni.

Di seguito è riportato un algoritmo iterativo per SGD con epoche :M

t0while t<Mθt+1θtϵ(t)1Bb=0B1L(θ,mb)θtt+1

Nota: nella vita reale stiamo leggendo questi dati di esempio di allenamento dalla memoria e, a causa del pre-recupero della cache e di altri trucchi di memoria eseguiti dal tuo computer, il tuo algoritmo funzionerà più velocemente se gli accessi alla memoria sono uniti , cioè quando leggi la memoria in ordine e non saltare in modo casuale. Pertanto, la maggior parte delle implementazioni SGD mescola il set di dati e quindi carica gli esempi in memoria nell'ordine in cui verranno letti.

I parametri principali per lo SGD vaniglia (senza slancio) sopra descritti sono:

  1. Tasso di apprendimento:ϵ

Mi piace pensare a epsilon come una funzione dal conteggio dei tempi a un tasso di apprendimento. Questa funzione è chiamata pianificazione del tasso di apprendimento .

ϵ(t):NR

Se vuoi che il tasso di apprendimento sia fisso, definisci epsilon come una funzione costante.

  1. Dimensione del lotto

Le dimensioni del batch determinano quanti esempi vengono visualizzati prima di effettuare un aggiornamento del peso. Più è basso, più rumoroso sarà il segnale di allenamento, più è alto, più tempo ci vorrà per calcolare il gradiente per ogni passo.

Citazioni e ulteriori letture:

  1. Introduzione all'apprendimento basato sul gradiente
  2. Consigli pratici per la formazione graduale di architetture profonde
  3. Formazione efficiente in mini-batch per l'ottimizzazione stocastica

1
For simplicity we can assume that D is evenly divisible by B. Non vuoi dire che T dovrebbe essere uniformemente divisibile per B?
Antoine,

4
e per rispondere effettivamente alla domanda del PO, è possibile aggiungere B is typically chosen between 1 and a few hundreds, e.g. B = 32 is a good default value, with values above 10 taking advantage of the speed-up of matrix-matrix products over matrix-vector products.(dal documento di Bengio del 2012)
Antoine,

@sabalaba Bella risposta. Ma non è che nell'equazione "Di seguito è riportato un algoritmo iterativo per SGD con epoche M", aggiorneremo il peso dopo aver eseguito ogni mini-batch. In altre parole, non dovrebbe esserci un altro anello (sopra i mini lotti C) all'interno del ciclo sopra l'epoca, cioè mentre t <M
Kaushik Acharya,

2
In statistica, un campione è costituito da più osservazioni. Pertanto, la dimensione del campione è interpretata correttamente dagli statistici. Nell'informatica (in particolare nell'apprendimento automatico) un campione è una singola osservazione e un lotto è una raccolta di campioni. Potrebbe essere un po 'confuso. Un campione per gli statistici è un lotto per i data scientist;) Fonte: en.wikipedia.org/wiki/Sample_size_determination
Oleg Melnikov,

"Il parametro della dimensione del batch è solo uno degli iperparametri che intendi ottimizzare." L'esecuzione di più modelli di tuning non vanterebbe in primo luogo l'intero scopo di SGD? Penso che l'OP chieda una regola empirica per la dimensione del campione. Se i tuoi dati contengono record e variabili, qual è la dimensione del campione adatta per calcolare adeguatamente il gradiente? nm
RobertF,
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.