Qual è la dimensione del batch nella rete neurale?


176

Sto usando Python Keras packageper la rete neurale. Questo è il collegamento . È batch_sizeuguale al numero di campioni di prova? Da Wikipedia abbiamo queste informazioni:

Tuttavia, in altri casi, la valutazione del gradiente di somma può richiedere costose valutazioni dei gradienti da tutte le funzioni di summand. Quando il set di addestramento è enorme e non esistono formule semplici, la valutazione delle somme dei gradienti diventa molto costosa, perché la valutazione del gradiente richiede la valutazione di tutti i gradienti delle funzioni di summand. Per risparmiare sul costo computazionale ad ogni iterazione, la discesa del gradiente stocastica campiona un sottoinsieme di funzioni di summand in ogni fase. Ciò è molto efficace in caso di problemi di apprendimento automatico su larga scala.

Le informazioni di cui sopra descrivono i dati dei test? È lo stesso batch_sizedi keras (Numero di campioni per aggiornamento gradiente)?


3
È bello vedere class.coursera.org/ml-005/lecture/preview course, specialmente per te settimana 4-6 + 10. Wikipedia potrebbe non essere una risorsa così preziosa per l'apprendimento delle reti neurali.
404pio,

Risposte:


230

La dimensione del batch definisce il numero di campioni che verranno propagati attraverso la rete.

Ad esempio, supponiamo che tu abbia 1050 campioni di allenamento e desideri impostarne uno batch_sizeuguale a 100. L'algoritmo preleva i primi 100 campioni (dal 1 ° al 100 °) dal set di dati di addestramento e addestra la rete. Successivamente, preleva i secondi 100 campioni (dal 101 ° al 200 °) e forma nuovamente la rete. Possiamo continuare a seguire questa procedura fino a quando non abbiamo propagato tutti i campioni attraverso la rete. Potrebbe essersi verificato un problema con l'ultimo set di campioni. Nel nostro esempio, abbiamo usato 1050 che non è divisibile per 100 senza resto. La soluzione più semplice è solo quella di ottenere gli ultimi 50 campioni e addestrare la rete.

Vantaggi dell'utilizzo di una dimensione del lotto <numero di tutti i campioni:

  • Richiede meno memoria. Poiché si allena la rete utilizzando un numero inferiore di campioni, la procedura di formazione complessiva richiede meno memoria. Ciò è particolarmente importante se non si è in grado di adattare l'intero set di dati nella memoria della macchina.

  • In genere le reti si allenano più velocemente con i mini-batch. Questo perché aggiorniamo i pesi dopo ogni propagazione. Nel nostro esempio abbiamo propagato 11 lotti (10 di essi avevano 100 campioni e 1 avevano 50 campioni) e dopo ognuno di essi abbiamo aggiornato i parametri della nostra rete. Se utilizzassimo tutti i campioni durante la propagazione, effettueremmo solo 1 aggiornamento per il parametro della rete.

Svantaggi dell'utilizzo di una dimensione del lotto <numero di tutti i campioni:

  • Più piccolo è il lotto, meno accurata sarà la stima del gradiente. Nella figura seguente, puoi vedere che la direzione del gradiente mini-batch (colore verde) oscilla molto di più rispetto alla direzione del gradiente completo del batch (colore blu).

Indicazioni di gradiente per diverse configurazioni batch

Lo stocastico è solo un mini-batch con batch_sizeuguale a 1. In tal caso, il gradiente cambia direzione anche più spesso di un gradiente mini-batch.


3
No, non l'ho fatto. Questa è la tecnica popolare nelle reti neurali e questa terminologia che puoi vedere in diverse biblioteche, libri e articoli. Vuoi controllare l'errore dei dati di prova in ogni epoca o semplicemente verificare il modello dopo l'allenamento?
itdxer,

1
La rete converge anche più velocemente poiché il numero di aggiornamenti è notevolmente superiore. Impostare le dimensioni del mini batch è un po 'un'arte, troppo piccola e rischi di rendere l'apprendimento troppo stocastico, più veloce ma convergerà in modelli inaffidabili, troppo grandi e non si adatta alla memoria e richiede ancora secoli.
Ramalho,

2
In genere quando le persone dicono che l'apprendimento online significa batch_size=1. L'idea alla base dell'apprendimento online è che aggiorni il tuo modello non appena vedi l'esempio. Con una dimensione batch più grande significa che per prima cosa si guardano attraverso più campioni prima di eseguire l'aggiornamento. In RNN la dimensione del batch può avere significati diversi. Di solito, è comune dividere la sequenza di allenamento in una finestra di dimensioni fisse (come 10 parole). In questo caso, includendo 100 di queste finestre durante l'allenamento, ciò significa che hai batch_size=100.
itdxer,

1
@Oleg Melnikov, se il tuo ultimo lotto ha dimensioni significativamente inferiori (supponiamo che sarebbe 1 invece di 50), la stima per il gradiente sarebbe meno accurata e può rovinare un po 'i tuoi pesi. Nell'immagine sopra, immagina di fare 10 aggiornamenti con un mini batch 100 (linee verdi) e uno con mini batch 1 (linea rossa). Ciò significa che nella prossima epoca alcune prime iterazioni possono iniziare a risolvere il problema con l'ultimo mini batch 1 aggiornamento dall'epoca precedente.
itdxer,

1
@OlegMelnikov Il libro di deep learning del MIT ha una buona spiegazione relativa a questo problema (capitolo 8.1.3): deeplearningbook.org/contents/optimization.html
itdxer,

153

Nella terminologia della rete neurale:

  • uno un'epoca = un passaggio in avanti e un passaggio all'indietro tutti gli esempi di addestramento
  • dimensione del lotto = il numero di esempi di allenamento in un passaggio avanti / indietro. Maggiore è la dimensione del batch, maggiore sarà lo spazio di memoria necessario.
  • numero di iterazioni = numero di passaggi, ogni passaggio utilizzando [dimensione batch] numero di esempi. Per essere chiari, un passaggio = un passaggio in avanti + un passaggio all'indietro (non contiamo il passaggio in avanti e il passaggio all'indietro come due passaggi diversi).

Esempio: se hai 1000 esempi di addestramento e la dimensione del tuo lotto è 500, occorreranno 2 iterazioni per completare 1 epoca.

FYI: dimensione del lotto di compromesso rispetto al numero di iterazioni per la formazione di una rete neurale


Ma qual è la differenza tra l'utilizzo di numeri di [dimensioni batch] di esempi e formare la rete su ciascun esempio e procedere con i successivi esempi di numeri [dimensioni batch]. Dal momento che si passa un esempio attraverso la rete e si applica SGD e si prende l'esempio successivo e così via, non farà alcuna differenza se la dimensione del batch è 10 o 1000 o 100000. Dopo che [numero di batch] vengono eseguiti numeri di esempi, l'esempio successivo del seguirà il prossimo lotto. Fa differenza solo se i numeri di esempio [dimensione batch] passeranno [numero di iterazioni] volte la rete e quindi procederanno con i successivi esempi [dimensione batch].
Erhard Dinhobl,

Una distinzione importante è che il passaggio di apprendimento (un passaggio) viene applicato una volta per ogni lotto, mentre è necessario scorrere tutti i lotti per fare un'epoca. Quindi la differenza è anche algoritmica non solo nella memoria: lotti più grandi significano che si fa la media del gradiente su più campioni.
Meduz,

Qual è la differenza tra epoca e iterazioni?
Goldname

2
L'epoca di @Goldname 1 include tutti gli esempi di addestramento mentre 1 iterazione include solo il numero [di dimensioni del lotto] di esempi di addestramento.
Franck Dernoncourt,

3

Quando si risolve con una CPU un problema di ottimizzazione, si applica in modo iterativo un algoritmo su alcuni dati di input. In ciascuna di queste iterazioni di solito aggiorni una metrica del tuo problema facendo alcuni calcoli sui dati. Ora, quando la dimensione dei dati è grande, potrebbe essere necessario un notevole lasso di tempo per completare ogni iterazione e potrebbe richiedere molte risorse. Quindi a volte si sceglie di applicare questi calcoli iterativi su una parte dei dati per risparmiare tempo e risorse computazionali. Questa porzione è batch_size e il processo è chiamato (nel Neural Network Lingo) elaborazione dei dati batch. Quando applichi i tuoi calcoli su tutti i tuoi dati, esegui l'elaborazione dei dati online. Immagino che la terminologia risalga agli anni '60 e anche prima. Qualcuno ricorda il. bat file DOS? Ma ovviamente il concetto incarnato significa un thread o una parte dei dati da utilizzare.


2

La documentazione per Kerascirca dimensione del lotto si trova sotto la fitfunzione nelle Models (API funzionale) pagina

batch_size: Intero o nessuno. Numero di campioni per aggiornamento gradiente. Se non specificato, batch_size verrà impostato automaticamente su 32.

Se si dispone di un piccolo set di dati, sarebbe meglio rendere la dimensione del batch uguale alla dimensione dei dati di training. Prima prova con un piccolo batch, quindi aumenta per risparmiare tempo. Come accennato da itdxer , c'è un compromesso tra precisione e velocità.

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.