Sto utilizzando Python Keras package
per la rete neurale. Questo è link . batch_size
è uguale al numero di campioni di prova? Da Wikipedia abbiamo questo informazioni:
Tuttavia, in altri casi, la valutazione del gradiente di somma può richiedere costose valutazioni dei gradienti da tutte le funzioni di sommatoria. Quando linsieme di addestramento è enorme e non esistono formule semplici, valutare le somme dei gradienti diventa molto costoso, perché la valutazione del gradiente richiede la valutazione di tutte le funzioni di sommatoria “gradienti”. Per risparmiare sul costo computazionale a ogni iterazione, la discesa del gradiente stocastico campiona un sottoinsieme di funzioni di somma ad ogni passo. Questo è molto efficace nel caso di problemi di apprendimento automatico su larga scala.
Le informazioni sopra descrivono i dati di test? È uguale a batch_size
in keras (numero di campioni per aggiornamento gradiente)?
Commenti
- ‘ è bello vedere il corso class.coursera.org/ml-005/lecture/preview , soprattutto per settimana 4-6 + 10. Wikipedia potrebbe non essere una risorsa così preziosa per lapprendimento delle reti neurali.
Risposta
La dimensione del batch definisce il numero di campioni che verranno propagati attraverso la rete.
Ad esempio , supponiamo che tu abbia 1050 campioni di addestramento e desideri impostare un batch_size
uguale a 100. Lalgoritmo preleva i primi 100 campioni (dal 1 ° al 100 °) dal set di dati di addestramento e addestra la rete. Successivamente, prende i secondi 100 campioni (dal 101 ° al 200 °) e addestra nuovamente la rete. Possiamo continuare a eseguire questa procedura finché non abbiamo propagato tutti i campioni attraverso la rete. P il problema potrebbe verificarsi con lultima serie di campioni. Nel nostro esempio, abbiamo utilizzato 1050 che non è divisibile per 100 senza resto. La soluzione più semplice è solo ottenere i 50 campioni finali e addestrare la rete.
Vantaggi dellutilizzo di una dimensione batch < numero di tutti i campioni:
-
Richiede meno memoria. Poiché si addestra la rete utilizzando meno campioni, la procedura di addestramento complessiva richiede meno memoria. Che “È particolarmente importante se non sei in grado di adattare lintero set di dati nella memoria della tua macchina.
-
In genere le reti si addestrano più velocemente con i mini-batch. Questo perché aggiorniamo i pesi dopo ogni propagazione. Nel nostro esempio abbiamo propagato 11 batch (10 di loro avevano 100 campioni e 1 ne aveva 50) e dopo ognuno di essi abbiamo aggiornato i parametri della nostra rete. Se usassimo tutti i campioni durante la propagazione, faremmo solo 1 aggiornamento per il parametro di rete.
Svantaggi dellutilizzo di un numero < di tutti i campioni di dimensioni batch:
- Più piccolo è il batch, meno accurata sarà la stima del gradiente. Nella figura seguente, puoi vedere che la direzione del gradiente del mini-batch (colore verde) oscilla molto di più rispetto alla direzione del gradiente del batch completo (colore blu).
Stochastic è solo un mini-batch con batch_size
uguale a 1. In tal caso, il gradiente cambia direzione anche più spesso di un gradiente mini-batch.
Commenti
- No, non ‘ t. Questa è una tecnica popolare nelle reti neurali e questa terminologia è visibile in diverse biblioteche, libri e articoli. Vuoi controllare lerrore dei dati di test in ogni epoca o semplicemente verificare il modello dopo laddestramento?
- La rete converge anche più velocemente poiché il numero di aggiornamenti è notevolmente più alto. Impostare la dimensione del mini batch è una specie di arte, troppo piccola e rischi di rendere il tuo apprendimento troppo stocastico, più veloce ma convergerà verso modelli inaffidabili, troppo grandi e non si adatterà alla memoria e richiederà ancora anni.
- Questo significa che
batch_size=<size of dataset>
sono considerati apprendimento online, o megliobatch_size=1
? E tutto questo rimane vero anche per gli RNN? Quando si utilizzabatch_size
negli RNN, il batch viene considerato una sorta di intervallo temporale virtuale in quanto tutte le istanze in quel batch verranno calcolate come se si fossero verificate contemporaneamente ? - In genere, quando le persone dicono apprendimento online, intendono
batch_size=1
. Lidea alla base dellapprendimento online è che aggiorni il tuo modello non appena vedi lesempio. Con una dimensione del batch più grande, significa che prima stai esaminando i più campioni prima di eseguire laggiornamento. In RNN le dimensioni del lotto possono avere significati diversi.Di solito, ‘ è comune dividere la sequenza di addestramento in finestre di dimensioni fisse (come 10 parole). In questo caso, includere 100 di queste finestre durante la formazione significa che haibatch_size=100
. - @Oleg Melnikov, se il tuo ultimo batch ha dimensioni notevolmente inferiori (lascia ‘ s dicono che sarebbe 1 invece di 50) quindi la stima per il gradiente sarebbe meno precisa e potrebbe rovinare un po i tuoi pesi. Nellimmagine sopra, immagina di effettuare 10 aggiornamenti con un mini batch 100 (linee verdi) e uno con mini batch 1 (linea rossa). Il che significa che nella prossima epoca alcune prime iterazioni possono iniziare a risolvere il problema con lultimo aggiornamento mini batch 1 dellepoca precedente.
Risposta
Nella terminologia della rete neurale:
- one epoch = un passaggio in avanti e un passaggio allindietro di tutti gli esempi di addestramento
- dimensione batch = 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 allindietro (non contiamo il passaggio in avanti e il passaggio allindietro come due passaggi diversi).
Esempio: se hai 1000 esempi di addestramento e la dimensione del batch è 500, saranno necessarie 2 iterazioni per completare 1 epoca.
FYI: Dimensione del batch di compromesso rispetto al numero di iterazioni per addestrare una rete neurale
Commenti
- Ma qual è la differenza tra utilizzando [dimensione batch] numeri di esempi e addestrare la rete su ogni esempio e procedere con gli esempi di numeri [dimensione batch] successivi. Poiché passi un esempio attraverso la rete e applichi SGD, prendi lesempio successivo e così via, non differenza se la dimensione del batch è 10, 1000 o 100000. Dopo [batc h size] numero di esempi è fatto il prossimo esempio del lotto successivo seguirà. Fa differenza solo se i numeri di [dimensione del batch] di esempi passano [numero di iterazioni] volte la rete e poi procedono con i successivi [dimensione del batch] esempi.
- Una distinzione importante è che la fase di apprendimento (un passaggio) viene applicato una volta per ogni batch, mentre devi scorrere tutti i batch per fare unepoca. Quindi la differenza è anche algoritmica non solo nella memoria: batch più grandi significano che media il gradiente su più campioni.
- Qual è ‘ la differenza tra epoca e iterazioni ?
- @Goldname 1 epoch include tutti gli esempi di addestramento mentre 1 iterazione include solo il numero [batch size] di esempi di addestramento.
- Quindi: se il numero di epoche è costante, e noi ‘ ricostruendo il grafico di convergenza con ogni punto che rappresenta il risultato dopo ogni epoca, possiamo aspettarci che il grafico risultante sia ‘ più fluido ‘ (e la formazione per essere più lenti) man mano che diminuiamo
batch_size
?
Risposta
Quando risolvi con una CPU o una GPU un problema di ottimizzazione, applichi in modo iterativo un algoritmo su alcuni dati di input. In ciascuna di queste iterazioni di solito aggiorni una metrica del tuo problema eseguendo alcuni calcoli sui dati. Ora, quando la dimensione dei dati è grande, potrebbe essere necessario molto tempo per completare ogni iterazione e potrebbe consumare molte risorse. Quindi a volte si sceglie di applicare questi calcoli iterativi su una porzione di dati per risparmiare tempo e risorse di calcolo. Questa parte è batch_size e il processo è chiamato (in Neural Network Lingo) elaborazione dati batch. Quando applichi i tuoi calcoli a tutti i tuoi dati, esegui lelaborazione dei dati online. Immagino che la terminologia provenga dagli anni 60 e anche da prima. Qualcuno ricorda i file DOS .bat? Ma ovviamente il concetto si è incarnato per indicare un thread o una parte dei dati da utilizzare.
Risposta
La documentazione per Keras
sulla dimensione del batch può essere trovata sotto il fit
funzione nella pagina Modelli (API funzionale)
batch_size
: numero intero o nessuno. Numero di campioni per aggiornamento gradiente. Se non specificato, batch_size verrà impostato per impostazione predefinita su 32.
Se si dispone di un set di dati di piccole dimensioni, sarebbe meglio impostare la dimensione del batch uguale alla dimensione del dati di allenamento. Prima prova con un piccolo lotto, quindi aumenta per risparmiare tempo. Come menzionato itdxer , cè un compromesso tra precisione e velocità.
Risposta
La dimensione del batch è un iperparametro che definisce il numero di campioni su cui lavorare prima di aggiornare i parametri del modello interno.