La dimensione del batch Γ¨ la quantitΓ di dati di addestramento utilizzata in ogni epoca che viene fornita allβalgoritmo di ottimizzazione al fine di aggiornare i pesi. Per esempio con un batch size uguale a 1, i pesi vengono aggiornati ad ogni iterazione con lβutilizzo di un singolo esempio mentre con un batch size maggiore come 10 o piΓΉ, i pesi vengono tenuti in memoria e alla fine del batch (ovvero dopo aver processato tutti gli esempi allβinterno del minibatch) viene calcolata la media dei gradienti ottenuti dalle varie iterazioni e quindi utilizzata per lβaggiornamento dei pesi.
Full batch
Full batch significa che lβintero set di addestramento viene utilizzato per calcolare il gradiente della funzione di costo. Il vantaggio principale Γ¨ che utilizza tutte le informazioni disponibili per aggiornare i pesi, quindi la direzione del gradiente Γ¨ piΓΉ accurata. Gli svantaggi sono:
- Inefficienza per dataset grandi, dato che devono caricare lβintero dataset in ram per fornirlo allβalgoritmo
- Poco dinamico: per migliorare il modello con nuovi dati bisogna riaddestrarlo sullβintero dataset;
- Rischio di incorrere in un minimo locale. Lβesempio classico Γ¨ il Full Batch Gradient Descent.
Batch size = 1
Se la batch size Γ¨ piccola lβalgoritmo pesa poco in memoria ed Γ¨ molto dinamico, in quanto per aggiornare il modello con nuovi dati basta eseguire uno step dellβSGD solo su questi nuovi dati. Inoltre date le fluttuazioni della funzione di costo posso evitare i minimi locali. Il problema Γ¨ che puΓ² essere βrumorosoβ a causa dellβalta variabilitΓ nei singoli esempi. Lβesempio classico Γ¨ il Stochastic Gradient Descent (SGD).
Batch size = n
La dimensione dei dati di addestramento da utilizzare per calcolare il gradiente e aggiornare i pesi Γ¨ pari a n. Un buon compromesso tra lβefficienza computazionale del SGD e la stabilitΓ del Full Batch Gradient Descent. Lβesempio classico Γ¨ il Mini Batch Gradient Descent. I valori consigliati di batch size sono 32, 64, 128, 256 e 512.
TensorFlow
In TensorFlow posso definire la dimensione del batch nel metodo fit
.
batch_size = 32
model.fit(train_data, train_labels, batch_size=batch_size, epochs=num_epochs)