En Batch Normalization, ¿por qué se deben actualizar moving_mean y moving_variance?

Según la ley de los grandes números, la media y la varianza de la muestra convergen con la media y la varianza verdaderas a medida que el número de muestras se aproxima al infinito. En la configuración de Normalización de lote, primero está normalizando cada lote por su media y varianza. Esta es una estimación muy ruidosa para la media y la varianza de la media real y la varianza que es responsable de generar los datos de entrada debido al hecho de que batch_size << dataset_size << inf.

Por lo tanto, está tratando de acumular la mayor cantidad de estadísticas posible para converger a la media y la varianza verdaderas. moving_mean y moving_variance acumulan estas estadísticas durante el entrenamiento. No los acumula durante la inferencia porque la inferencia generalmente no se realiza en lotes y, por lo tanto, las estadísticas de un solo ejemplo distorsionarían las estadísticas acumuladas. (Puede actualizar las estadísticas con mini lotes de prueba; sin embargo, esto violaría la propiedad de retención del conjunto de prueba y no indicará el verdadero riesgo (rendimiento de generalización))

En realidad, hay una brecha entre el entrenamiento y la prueba. Durante el entrenamiento, la red solo usa estadísticas de lotes y aprende a trabajar con estadísticas de lotes. Sin embargo, de repente cambia a moving_mean y moving_var durante la inferencia que el modelo no ha visto antes. Esto es a veces la razón por la cual las redes batch_norm realizan una validación de modo de entrenamiento adecuado y un rendimiento significativamente peor en la prueba de modo de inferencia.

Recientemente se solucionó mediante una capa reciente llamada Renormalización por lotes. deberías echarle un vistazo: hacia la reducción de la dependencia del minibatch en modelos normalizados por lotes