Batch Normalization
A normalização por lotes padroniza cada canal ao longo de um minilote e, em seguida, redimensiona-o com parâmetros aprendidos. Aborda a matemática, o comportamento durante a inferência e os limites.
A normalização em lote, ou BatchNorm, é uma camada de rede neural que normaliza cada canal da entrada usando a média e a variância do minilote atual e, em seguida, redimensiona o resultado com dois parâmetros aprendidos. Sergey Ioffe e Christian Szegedy a apresentaram em 2015, e ela permitiu que o classificador de imagens Inception atingisse a mesma precisão com 14 vezes menos etapas de treinamento. A BatchNorm permite taxas de aprendizado mais altas, torna o treinamento menos sensível à inicialização dos pesos e se tornou um componente padrão de redes neurais convolucionais (CNNs), como a ResNet.
Como funciona a normalização em lotes#
Para uma camada convolucional, a BatchNorm calcula uma média μ e uma variância σ² por canal, agregando os valores de todas as imagens do lote e de todas as posições espaciais. Cada ativação x passa então por duas etapas:
- Normalização: x̂ = (x − μ) / √(σ² + ε), em que um ε pequeno, 1e-5 por padrão no PyTorch, evita a divisão por zero.
- Escala e deslocamento: y = γ·x̂ + β, em que γ e β são aprendidos para cada canal. Eles permitem que a rede restaure a média e a dispersão adequadas à camada seguinte, inclusive desfazendo completamente a normalização.
A BatchNorm normalmente fica entre uma convolução e sua função de ativação. Como β já adiciona um deslocamento por canal, o viés da convolução anterior é redundante e geralmente fica desativado.
Treinamento vs. inferência#
Durante o treinamento, cada passagem para frente também atualiza uma média móvel e uma variância móvel, calculadas como médias móveis exponenciais das estatísticas do lote. A BatchNorm2d do PyTorch aproxima esses valores em 10% de cada novo lote por padrão (momentum=0.1). Na inferência, a camada normaliza usando essas médias móveis, então a previsão de uma imagem deixa de depender das outras imagens que estejam no mesmo lote. model.train() e model.eval() alternam entre os dois comportamentos:
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}")No modo de treinamento, a saída tem média 0.000 e desvio padrão 1.000, embora a entrada tenha média 5. Depois de um lote, a média móvel passou apenas de 0 para 0.496, e a variância móvel, de 1 para 1.294; por isso, o modo de avaliação produz saídas com média 3.920. As médias móveis precisam de algumas dezenas de lotes para convergir, e um modelo avaliado no modo errado, ou antes de suas estatísticas estabilizarem, apresenta uma pontuação muito inferior à sua precisão real.
Na inferência, a BatchNorm é uma transformação linear fixa por canal, então pode ser incorporada à convolução anterior: os pesos da convolução são multiplicados por γ/√(σ² + ε), e o viés passa a ser β − γμ/√(σ² + ε). O bloco de convolução padrão do YOLO26 é composto por uma convolução sem viés, seguida de BatchNorm e uma ativação SiLU, e a Ultralytics incorpora cada uma dessas camadas BatchNorm à convolução antes da previsão e da exportação, removendo a camada sem alterar as saídas.
Por que a normalização em lote ajuda#
O artigo original atribuiu o benefício da BatchNorm à redução do deslocamento de covariáveis interno, isto é, à mudança na distribuição das entradas de cada camada conforme as camadas anteriores são atualizadas. Experimentos posteriores que injetaram deslocamentos aleatórios de distribuição após camadas BatchNorm constataram que o treinamento mal era afetado e atribuíram o benefício a uma superfície de perda mais suave, com gradientes mais previsíveis, permitindo que o otimizador dê passos maiores e mais estáveis. Manter as pré-ativações próximas de média zero e variância unitária também impede que as ativações saturantes entrem em suas regiões planas, o que ajuda a combater gradientes que desaparecem.
Como cada exemplo é normalizado com as estatísticas de um lote escolhido aleatoriamente, a BatchNorm também adiciona ruído que age como um leve regularizador, e o artigo original relatou que, em alguns casos, ela podia eliminar a necessidade de dropout.
Limitações#
- Lotes pequenos: As estatísticas do lote ficam ruidosas quando cada dispositivo contém poucas imagens. Com 2 imagens por GPU, a normalização por grupos, que calcula estatísticas para grupos de canais dentro de cada imagem, teve erro no ImageNet 10.6% menor que a BatchNorm na ResNet-50.
- Treinamento em várias GPUs: Cada GPU normaliza usando sua própria parcela do lote, a menos que as camadas sejam convertidas para SyncBatchNorm, que agrega estatísticas entre dispositivos ao custo de comunicação adicional.
- Modelos de sequência: Sequências de comprimento variável e estatísticas dependentes do lote não combinam bem; por isso, os transformers usam normalização por camada.
Normalização em lote vs. termos relacionados#
- Normalização de dados: Redimensiona as entradas brutas uma vez durante o pré-processamento, por exemplo, dividindo os valores dos pixels por 255. A BatchNorm normaliza ativações intermediárias em cada camada e etapa de treinamento.
- Normalização por camada: Normaliza cada exemplo considerando suas próprias características, então se comporta da mesma forma no treinamento e na inferência e não depende do tamanho do lote. RMSNorm, uma variante mais simples sem subtração da média, é comum em modelos de linguagem grandes.
- Normalização por grupos: Divide os canais de cada imagem em grupos e normaliza cada grupo, o que é adequado para modelos de detecção e segmentação treinados com lotes pequenos.
- Normalização por instância: Normaliza separadamente cada canal de cada imagem, removendo o contraste específico da imagem. A substituição da BatchNorm pela normalização por instância, tanto no treinamento quanto no teste, melhorou bastante a qualidade da transferência rápida de estilo neural.










