Batch Normalization
La normalización por lotes estandariza cada canal en un minilote y luego lo reescala con parámetros aprendidos. Incluye las matemáticas, el comportamiento durante la inferencia y sus límites.
La normalización por lotes, o BatchNorm, es una capa de red neuronal que normaliza cada canal de su entrada usando la media y la varianza del minilote actual y, después, vuelve a escalar el resultado con dos parámetros aprendidos. Sergey Ioffe y Christian Szegedy la presentaron en 2015, y permitió que su clasificador de imágenes Inception alcanzara la misma precisión con 14 veces menos pasos de entrenamiento. BatchNorm permite usar tasas de aprendizaje más altas, hace que el entrenamiento sea menos sensible a la inicialización de los pesos y se convirtió en un componente estándar de las redes neuronales convolucionales (CNNs), como ResNet.
Cómo funciona la normalización por lotes#
Para una capa convolucional, BatchNorm calcula una media μ y una varianza σ² por canal, agrupando todas las imágenes del lote y todas las posiciones espaciales. Después, cada activación x sigue dos pasos:
- Normalización: x̂ = (x − μ) / √(σ² + ε), donde un ε pequeño, 1e-5 por defecto en PyTorch, evita la división por cero.
- Escalado y desplazamiento: y = γ·x̂ + β, donde γ y β se aprenden para cada canal. Permiten que la red restaure la media y la dispersión que convengan a la capa siguiente, incluso deshaciendo por completo la normalización.
BatchNorm suele situarse entre una convolución y su función de activación. Como β ya añade un desplazamiento por canal, el sesgo de la convolución anterior es redundante y normalmente se desactiva.
Entrenamiento frente a inferencia#
Durante el entrenamiento, cada propagación hacia delante también actualiza una media móvil y una varianza móvil, calculadas como promedios móviles exponenciales de las estadísticas del lote. BatchNorm2d de PyTorch las acerca por defecto un 10 % a cada lote nuevo (momentum=0.1). Durante la inferencia, la capa normaliza con estas medias móviles, por lo que la predicción de una imagen ya no depende de qué otras imágenes haya en su lote. model.train() y model.eval() alternan entre ambos comportamientos:
import torch
torch.manual_seed(0)
bn = torch.nn.BatchNorm2d(num_features=3)
# A batch of 8 three-channel feature maps with mean 5 and standard deviation 2
x = 5 + 2 * torch.randn(8, 3, 16, 16)
# Training mode normalizes with this batch's per-channel mean and variance
out = bn(x)
print(f"train mode: output mean {out.mean():.3f}, std {out.std():.3f}")
# The same call nudges the running averages 10% of the way toward the batch statistics
print(f"running mean {bn.running_mean[0]:.3f}, running var {bn.running_var[0]:.3f}")
# Eval mode normalizes with the running averages instead of the batch statistics
bn.eval()
out = bn(x)
print(f"eval mode: output mean {out.mean():.3f}, std {out.std():.3f}")En modo de entrenamiento, la salida tiene una media de 0.000 y una desviación estándar de 1.000, aunque la entrada tenga una media de 5. Tras un lote, la media móvil solo ha pasado de 0 a 0.496 y la varianza móvil, de 1 a 1.294, por lo que el modo de evaluación genera salidas con una media de 3.920. Las medias móviles necesitan varias decenas de lotes para converger, y un modelo evaluado en el modo incorrecto, o antes de que sus estadísticas se estabilicen, obtiene una puntuación muy inferior a su precisión real.
Durante la inferencia, BatchNorm es una transformación lineal fija por canal, por lo que puede integrarse en la convolución anterior: los pesos de la convolución se multiplican por γ/√(σ² + ε), y el sesgo pasa a ser β − γμ/√(σ² + ε). El bloque de convolución estándar de YOLO26 consta de una convolución sin sesgo, seguida de BatchNorm y una activación SiLU. Ultralytics fusiona cada una de estas capas BatchNorm con su convolución antes de la predicción y la exportación, lo que elimina la capa y mantiene las mismas salidas.
Por qué ayuda la normalización por lotes#
El artículo original atribuyó el beneficio de BatchNorm a la reducción del cambio de covariables interno: el cambio en la distribución de entrada de cada capa a medida que se actualizan las capas anteriores. Más adelante, experimentos que introdujeron cambios aleatorios en la distribución tras las capas BatchNorm comprobaron que el entrenamiento apenas se veía afectado y atribuyeron el beneficio a una superficie de pérdida más suave, con gradientes más predecibles, que permite al optimizador dar pasos más grandes y estables. Mantener las preactivaciones cerca de una media cero y una varianza unitaria también evita que las activaciones saturantes entren en sus regiones planas, lo que ayuda a combatir los gradientes que desaparecen.
Como cada ejemplo se normaliza con las estadísticas de un lote elegido al azar, BatchNorm también añade ruido que actúa como un regularizador moderado. El artículo original señaló que, en algunos casos, podía eliminar la necesidad de usar dropout.
Limitaciones#
- Lotes pequeños: Las estadísticas del lote se vuelven ruidosas cuando cada dispositivo procesa pocas imágenes. Con 2 imágenes por GPU, la normalización por grupos, que calcula las estadísticas para grupos de canales dentro de cada imagen, obtuvo un error en ImageNet un 10,6 % menor que BatchNorm en ResNet-50.
- Entrenamiento con varias GPU: Cada GPU normaliza con su propia parte del lote, salvo que las capas se conviertan a SyncBatchNorm, que agrupa las estadísticas entre dispositivos a costa de una comunicación adicional.
- Modelos secuenciales: Las secuencias de longitud variable y las estadísticas dependientes del lote no encajan bien, por lo que los transformers utilizan la normalización por capas.
Normalización por lotes y términos relacionados#
- Normalización de datos: Vuelve a escalar las entradas sin procesar una sola vez durante el preprocesamiento; por ejemplo, dividiendo los valores de los píxeles entre 255. BatchNorm normaliza las activaciones intermedias en cada capa y en cada paso de entrenamiento.
- Normalización por capas: Normaliza cada ejemplo usando sus propias características, por lo que se comporta igual durante el entrenamiento y la inferencia y no depende del tamaño del lote. RMSNorm, una variante más sencilla que no resta la media, es habitual en los modelos de lenguaje grandes.
- Normalización por grupos: Divide los canales de cada imagen en grupos y normaliza cada grupo, algo adecuado para modelos de detección y segmentación entrenados con lotes pequeños.
- Normalización por instancias: Normaliza por separado cada canal de cada imagen y elimina el contraste propio de cada imagen. Sustituir BatchNorm por la normalización por instancias, tanto durante el entrenamiento como durante la prueba, mejoró notablemente la calidad de la transferencia de estilo neuronal rápida.










