Batch Size
El tamaño del lote es el número de ejemplos de entrenamiento que procesa un modelo en cada actualización de pesos. Determina el uso de memoria de la GPU, la velocidad de entrenamiento y el ruido del gradiente.
El tamaño del lote es el número de ejemplos de entrenamiento que un modelo procesa a la vez antes de actualizar sus pesos. En lugar de introducir todo el conjunto de datos de entrenamiento en una red neuronal de una sola vez, el entrenamiento lo divide en lotes. Para cada lote, el modelo genera predicciones, la función de pérdida las puntúa, la retropropagación calcula los gradientes y el optimizador da un paso. El tamaño del lote es un hiperparámetro que determina tres cosas a la vez: cuánta memoria GPU necesita el entrenamiento, cuánto tarda cada época y cuánto ruido tiene cada estimación del gradiente.
Cómo afecta el tamaño del lote al entrenamiento#
Cada lote proporciona al algoritmo de optimización una estimación del gradiente para todo el conjunto de datos, y la estimación es más precisa cuanto mayor es el lote. El fragmento de PyTorch que aparece a continuación mide esa precisión directamente, promediando los gradientes por muestra en muchos lotes aleatorios de cada tamaño:
import torch
torch.manual_seed(0)
# Per-sample gradients of a squared-error loss for 10,000 samples
x = torch.randn(10_000)
y = 2 * x + torch.randn(10_000)
w = torch.tensor(0.0)
per_sample_grads = 2 * (w * x - y) * x
# Estimate the gradient from 1,000 random batches at each batch size
for batch_size in (8, 64, 512):
idx = torch.randint(0, len(x), (1000, batch_size))
batch_grads = per_sample_grads[idx].mean(dim=1)
print(f"batch {batch_size:3d}: gradient std {batch_grads.std():.3f}")La dispersión de la estimación del gradiente baja de 2.248 con un tamaño de lote de 8 a 0.771 con 64 y a 0.267 con 512. Cada aumento de 8 veces en el tamaño del lote reduce el ruido unas 2,9 veces, un valor cercano a la raíz cuadrada de 8, que es el comportamiento de los promedios de muestras independientes.
Ese ruido determina el equilibrio entre lotes pequeños y grandes:
- Lotes pequeños (por ejemplo, de 8 a 32): Actualizaciones ruidosas y muchos pasos por época. El ruido actúa como un regularizador moderado que suele ayudar a que el descenso de gradiente estocástico (SGD) generalice. Además, los lotes pequeños caben en equipos modestos, pero cada época tarda más porque la GPU está parcialmente inactiva.
- Lotes grandes (por ejemplo, de 256 en adelante): Gradientes suaves, menos pasos por época y un alto aprovechamiento del hardware. Los lotes muy grandes tienden a converger en mínimos pronunciados que generalizan peor, como observaron Keskar et al.. Además, como requieren menos pasos por época, necesitan una tasa de aprendizaje proporcionalmente mayor y un periodo de calentamiento. Con esa regla de escalado lineal, Goyal et al. entrenaron ResNet-50 con ImageNet en una hora, usando un tamaño de lote de 8.192 repartido entre 256 GPU y obteniendo una precisión equivalente a la del entrenamiento con lotes pequeños.
Límites de memoria y acumulación de gradientes#
La memoria de la GPU debe almacenar los pesos del modelo, el estado del optimizador y las activaciones intermedias que necesita la retropropagación. La memoria de activaciones aumenta de forma lineal con el tamaño del lote y la resolución de la imagen. Si un lote no cabe, el entrenamiento se detiene con un error de memoria agotada (OOM). El entrenamiento con precisión mixta reduce aproximadamente a la mitad la memoria de activaciones, y la acumulación de gradientes permite alcanzar un lote efectivo mayor al sumar los gradientes de varios lotes pequeños antes de actualizar los pesos.
El entrenamiento de Ultralytics YOLO incorpora esta función: acumula gradientes hasta haber procesado unas 64 imágenes, el tamaño de lote nominal nbs, de modo que, tras el calentamiento, el valor predeterminado batch=16 actualiza los pesos cada cuatro lotes. Al establecer batch=-1, se ejecuta AutoBatch, que elige el lote más grande que cabe en aproximadamente el 60 % de la memoria CUDA libre y recurre a un tamaño de lote de 16 en dispositivos CPU y Apple MPS.
from ultralytics import YOLO
# Carga un modelo YOLO26n preentrenado
model = YOLO("yolo26n.pt")
# batch=-1 permite que AutoBatch elija el tamaño del lote según la memoria GPU disponible
# Usa un entero (batch=16) para fijar el tamaño o un número decimal (batch=0.70) para indicar una fracción de la memoria
results = model.train(data="coco8.yaml", epochs=5, batch=-1)Antes de iniciar el entrenamiento, AutoBatch ejecuta el modelo YOLO26 con tamaños de lote de 1 a 16 (hasta 64 en GPU con 16 GB o más), ajusta una recta a las mediciones de uso de memoria y la resuelve para obtener el tamaño de lote que alcanza la fracción objetivo.
Tamaño del lote y términos relacionados#
- Época e iteración: Una época es un recorrido por todo el conjunto de datos y una iteración es una actualización de pesos. El número de iteraciones por época es el tamaño del conjunto de datos dividido entre el tamaño del lote, redondeado hacia arriba. Por tanto, 1.000 imágenes con un tamaño de lote de 100 requieren 10 iteraciones.
- Minilote: En la mayoría de los textos sobre aprendizaje profundo, es sinónimo de lote. En sentido estricto, el descenso de gradiente por lotes utiliza todo el conjunto de datos en cada actualización, el descenso de gradiente estocástico utiliza un ejemplo y el descenso de gradiente por minilotes queda entre ambos; así es como se entrenan casi todas las redes modernas.
- Normalización por lotes: Capa que normaliza las activaciones con la media y la varianza del lote actual, por lo que sus estadísticas dejan de ser fiables con tamaños de lote muy pequeños. La normalización por grupos evita esta dependencia y obtuvo un error un 10,6 % menor que la normalización por lotes en ResNet-50 con ImageNet y un tamaño de lote de 2.
- Tamaño del lote de inferencia: Durante el despliegue, el procesamiento por lotes intercambia latencia de inferencia por rendimiento. Agrupar fotogramas de varias cámaras aumenta el número de imágenes procesadas por segundo, mientras cada fotograma espera a que se complete su lote.










