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)1B∑b=0B−1∂L(θ,mb)∂θ
- Discesa gradiente batch,B=|x|
- Discesa gradiente stocastica online:B=1
- 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 :.xm⊂xBmB=|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):RS→RD→RSTB
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
twhile tθt+1t←0<M←θt−ϵ(t)1B∑b=0B−1∂L(θ,mb)∂θ←t+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:
- 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):N→R
Se vuoi che il tasso di apprendimento sia fisso, definisci epsilon come una funzione costante.
- 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:
- Introduzione all'apprendimento basato sul gradiente
- Consigli pratici per la formazione graduale di architetture profonde
- Formazione efficiente in mini-batch per l'ottimizzazione stocastica