Пакетная нормализация вместо нормализации ввода

Могу ли я использовать пакетный слой нормализации сразу после входного слоя и не нормализовать мои данные? Могу ли я ожидать аналогичного эффекта / производительности?

В керасе функционал это будет примерно так:

x = Input (...)
x = Batchnorm(...)(x)
...

2 ответа

Решение

Ты можешь это сделать. Но хорошая вещь в batchnorm, в дополнение к стабилизации распределения активации, состоит в том, что среднее значение и стандартное отклонение, вероятно, переносятся по мере обучения сети.

По сути, установка пакета сразу после входного слоя - это сложный этап предварительной обработки данных. Это помогает, иногда очень (например, в линейной регрессии). Но проще и эффективнее вычислить среднее значение и дисперсию всего обучающего образца один раз, чем изучать его для каждой партии. Обратите внимание, что batchnorm не является бесплатным с точки зрения производительности, и вы не должны злоупотреблять им.


Да, это возможно, и я очень успешно использовал это для моделей машинного зрения. Однако у этого подхода есть свои плюсы и минусы, основные преимущества заключаются в следующем:

  1. Вы не можете забыть этап нормализации при интеграции модели в производство, поскольку он является частью самой модели (это происходит чаще, чем вы думаете).
  2. Таким образом, нормализация учитывает увеличение данных.

Основными недостатками являются:

  1. Добавлена ​​стоимость выполнения, если у вас уже есть нормализованные входные данные.

Я также подробно писал об этой теме здесь: Замените ручную нормализацию пакетной нормализацией в моделях Vision AI. https://towardsdatascience.com/replace-manual-normalization-with-batch-normalization-in-vision-ai-models-e7782e82193c