Пакетная нормализация вместо нормализации ввода
Могу ли я использовать пакетный слой нормализации сразу после входного слоя и не нормализовать мои данные? Могу ли я ожидать аналогичного эффекта / производительности?
В керасе функционал это будет примерно так:
x = Input (...)
x = Batchnorm(...)(x)
...
2 ответа
Ты можешь это сделать. Но хорошая вещь в batchnorm, в дополнение к стабилизации распределения активации, состоит в том, что среднее значение и стандартное отклонение, вероятно, переносятся по мере обучения сети.
По сути, установка пакета сразу после входного слоя - это сложный этап предварительной обработки данных. Это помогает, иногда очень (например, в линейной регрессии). Но проще и эффективнее вычислить среднее значение и дисперсию всего обучающего образца один раз, чем изучать его для каждой партии. Обратите внимание, что batchnorm не является бесплатным с точки зрения производительности, и вы не должны злоупотреблять им.
Да, это возможно, и я очень успешно использовал это для моделей машинного зрения. Однако у этого подхода есть свои плюсы и минусы, основные преимущества заключаются в следующем:
- Вы не можете забыть этап нормализации при интеграции модели в производство, поскольку он является частью самой модели (это происходит чаще, чем вы думаете).
- Таким образом, нормализация учитывает увеличение данных.
Основными недостатками являются:
- Добавлена стоимость выполнения, если у вас уже есть нормализованные входные данные.
Я также подробно писал об этой теме здесь: Замените ручную нормализацию пакетной нормализацией в моделях Vision AI. https://towardsdatascience.com/replace-manual-normalization-with-batch-normalization-in-vision-ai-models-e7782e82193c