Batch Size
Scopri come la dimensione del batch influisce sulla velocità e sull'accuratezza dell'addestramento del machine learning. Esplora i limiti hardware e ottimizza Ultralytics YOLO26 usando AutoBatch.
Nel campo del machine learning e, in particolare, del deep learning, la dimensione del batch indica il numero di esempi di addestramento utilizzati in un'iterazione dell'addestramento del modello. Anziché fornire l'intero training data alla rete neurale in una sola volta — cosa spesso computazionalmente impossibile a causa dei limiti di memoria — il dataset viene suddiviso in sottoinsiemi più piccoli chiamati batch. Il modello elabora un batch, calcola l'errore e aggiorna i propri pesi del modello tramite la retropropagazione prima di passare al batch successivo. Questo iperparametro svolge un ruolo fondamentale nel determinare sia la velocità dell'addestramento sia la stabilità del processo di apprendimento.
La dinamica dell'addestramento con i batch#
La scelta della dimensione del batch modifica radicalmente il modo in cui l'algoritmo di ottimizzazione, in genere una variante della discesa del gradiente stocastico, attraversa il paesaggio della funzione di perdita.
- Dimensioni del batch ridotte: l'utilizzo di un numero ridotto (ad esempio, 8 o 16) produce aggiornamenti "rumorosi". Sebbene la stima del gradiente sia meno accurata per il dataset nel suo complesso, questo rumore può talvolta aiutare il modello a sfuggire ai minimi locali, portando potenzialmente a una migliore capacità di generalizzazione. Tuttavia, i batch più piccoli richiedono più aggiornamenti per epoca, il che può rallentare l'addestramento in termini di tempo effettivo a causa dell'overhead.
- Dimensioni del batch elevate: un batch più grande (ad esempio, 128 o 256) fornisce una stima più accurata del gradiente, portando a una convergenza più uniforme della funzione di perdita. Consente un massiccio parallelismo sull'hardware moderno, accelerando significativamente i calcoli. Tuttavia, se il batch è troppo grande, il modello potrebbe stabilizzarsi in minimi aguzzi e subottimali, causando overfitting e una ridotta capacità di generalizzare a dati nuovi.
Implicazioni per l'hardware e la memoria#
Spesso chi si occupa di machine learning deve scegliere la dimensione del batch in base ai limiti dell'hardware, anziché a una preferenza puramente teorica. I modelli di deep learning, soprattutto le architetture di grandi dimensioni come i Transformer o le reti convoluzionali avanzate, vengono archiviati nella VRAM di una GPU.
Quando utilizzi NVIDIA CUDA per l'accelerazione, la VRAM deve contenere i parametri del modello, il batch di dati di input e gli output delle attivazioni intermedie necessari per il calcolo del gradiente. Se la dimensione del batch supera la memoria disponibile, l'addestramento si interrompe con un errore di "Memoria esaurita" (OOM). Tecniche come l'addestramento a precisione mista vengono spesso impiegate per ridurre l'utilizzo della memoria, consentendo dimensioni del batch maggiori sullo stesso hardware.
Distinzione tra concetti correlati#
Per configurare efficacemente l'addestramento, è essenziale distinguere la dimensione del batch da altri termini temporali del ciclo di addestramento.
- Dimensione del batch vs. epoca: un'epoca rappresenta un passaggio completo attraverso l'intero dataset di addestramento. La dimensione del batch determina in quanti blocchi vengono suddivisi i dati all'interno di quell'epoca. Ad esempio, se hai 1.000 immagini e una dimensione del batch pari a 100, saranno necessarie 10 iterazioni per completare un'epoca.
- Dimensione del batch vs. iterazione: un'iterazione (o step) consiste nell'elaborazione di un batch e nell'aggiornamento dei pesi. Il numero totale di iterazioni nell'addestramento è dato dal numero di batch per epoca moltiplicato per il numero totale di epoche.
- Dimensione del batch vs. Batch Normalization: sebbene condividano il nome, Batch Normalization è un tipo specifico di livello che normalizza gli input del livello in base alla media e alla varianza del batch corrente. Questa tecnica dipende fortemente dalla dimensione del batch; se la dimensione del batch è troppo piccola (ad esempio, 2), le stime statistiche diventano inaffidabili, con un potenziale peggioramento delle prestazioni.
Applicazioni nel mondo reale#
Modificare la dimensione del batch è una necessità ordinaria quando si implementano soluzioni di computer vision in vari settori.
-
Imaging medico ad alta fedeltà: nel campo dell'AI nella sanità, spesso si lavora con dati volumetrici 3D, come scansioni MRI o CT. Questi file sono estremamente densi e richiedono molta memoria. Per eseguire attività come l'analisi di immagini mediche o la complessa segmentazione delle immagini senza causare l'arresto del sistema, gli ingegneri spesso riducono la dimensione del batch a un numero molto piccolo, talvolta fino a un batch di 1. In questo caso, la priorità è elaborare dettagli ad alta risoluzione anziché massimizzare la velocità grezza di addestramento.
-
Controllo qualità industriale: al contrario, nell'AI nella produzione, la velocità è fondamentale. I sistemi automatizzati che ispezionano i prodotti su un nastro trasportatore devono elaborare migliaia di immagini all'ora. Durante l'inferenza, gli ingegneri possono aggregare i flussi video in ingresso delle telecamere in batch più grandi per massimizzare l'utilizzo dei dispositivi di edge AI, garantendo un throughput elevato per il rilevamento dei difetti in tempo reale.
Configurazione della dimensione del batch in Python#
Quando utilizzi il pacchetto Python di Ultralytics, impostare la dimensione del batch è semplice. Puoi specificare un numero intero fisso oppure utilizzare l'impostazione dinamica batch=-1, che sfrutta la funzionalità AutoBatch per calcolare automaticamente la dimensione massima del batch che il tuo hardware può gestire in sicurezza.
L'esempio seguente mostra come addestrare un modello YOLO26 — lo standard più recente in termini di velocità e accuratezza — utilizzando un'impostazione specifica del batch.
from ultralytics import YOLO
# Load the YOLO26n model (nano version for speed)
model = YOLO("yolo26n.pt")
# Train on the COCO8 dataset
# batch=16 is manually set.
# Alternatively, use batch=-1 for auto-tuning based on available GPU memory.
results = model.train(data="coco8.yaml", epochs=5, batch=16)Per gestire esperimenti su larga scala e visualizzare l'effetto delle diverse dimensioni del batch sulle metriche di addestramento, strumenti come la Ultralytics Platform offrono un ambiente completo per registrare e confrontare le esecuzioni. Una corretta ottimizzazione degli iperparametri della dimensione del batch è spesso il passaggio finale per ottenere le migliori prestazioni possibili dal tuo modello.









