Итак, на сегодня я собираюсь изучить пакетную нормализацию (Пакетная нормализация: ускорение глубокого обучения сети за счет уменьшения внутреннего ковариантного сдвига от Сергея Иоффе и Кристиана Сегеди). Однако, чтобы лучше понять предварительную обработку данных, я расскажу о трех случаях:

Случай 1 - Нормализация: целые данные (Numpy)
Случай 2 - Стандартизация: целые данные (Numpy)
Случай 3 - Пакетная нормализация: мини-пакет (Numpy / Tensorflow)

** ПРИМЕЧАНИЕ ** Я не буду рассматривать обратную пропаганду в этом посте!

Настройка эксперимента

Установка для этого эксперимента чрезвычайно проста. Чтобы смоделировать реальный вариант использования, давайте создадим изображение 32 * 32 из случайного нормального распределения и добавим к нему немного шума. Выше как выглядит наше изображение.

Красный ящик → (количество изображений, ширина изображения, высота изображения, количество каналов), пока мы будем работать с изображениями в оттенках серого 32 * 32.
Левый график → Гистограмма наших данных изображения

Как вы можете видеть выше, наши изображения имеют среднее значение 26 и дисперсию 306. А слева мы можем видеть гистограмму наших данных изображения.

Случай 1. Нормализация - все данные

В нашем первом случае выполним нормализацию всего набора данных. Визуально разницы нет.

Однако, как только мы построим гистограмму или просмотрим среднее значение и стандартное отклонение, мы ясно увидим, что наши данные находятся в диапазоне от 0 до 1.

Случай 2. Стандартизация - все данные

Опять же, визуально я не вижу особых отличий друг от друга.

Однако, когда мы видим ось гистограммы, мы можем ясно видеть, что среднее значение наших данных сдвинулось до 0 (почти), а дисперсия равна 1.

Уравнения для нормализации / стандартизации

Слева → Уравнение для нормализации
Вправо → Уравнение для стандартизации

На всякий случай, если кому-то интересно, давайте рассмотрим уравнение для обоих случаев нормализации и стандартизации. Обратите внимание: μ - это среднее значение, а σ - стандартное отклонение.

Уравнение для пакетной нормализации

Красный прямоугольник → Уравнение для стандартизации
Синяя линия → Параметры, которые будут изучены

Теперь, когда мы рассмотрели как нормализацию, так и стандартизацию, мы видим, что уравнение для пакетной нормализации - это точно такой же процесс для стандартизации. Единственная разница - это значения гаммы и бета, подчеркнутые синим цветом. Мы можем думать об этих терминах точно как о весах, мы собираемся вычислить ошибку на основе наземных данных и, используя обратное распространение, изучим эти параметры.

Но хочу отметить одну вещь! Если мы установим гамму (спасибо Luoyang Fang за исправление) равным 1, а бета - равным 0, весь процесс будет просто стандартизацией. И для реализации Tensorflow мы собираемся злоупотребить этим свойством.

Случай 3. Пакетная нормализация - чистая реализация

Красная линия → Мини-пакет, первые 10 изображений из наших данных изображения
Синий ящик → Стандартизация данных

Здесь нужно отметить одну вещь: для пакетной нормализации мы собираемся взять первые 10 изображений из наших тестовых данных и применить пакетную нормализацию.

Опять же, мы видим, что среднее значение около 0, а дисперсия равна 1. Теперь давайте посмотрим на реализацию тензорного потока.

Случай 3. Пакетная нормализация - Tensorflow

Красная линия → мини-пакет, первые 10 изображений из наших данных изображения
Синяя линия → смещение (бета) как 0 и масштаб (гамма) как 1

Опять же, визуально мы не видим никакой разницы.

Однако, если мы посмотрим на среднее значение и дисперсию данных, мы увидим, что это в точности то же самое, что и применение стандартизации.

Интерактивный код (Google Collab / Replit / Microsoft Azure Notebook)

Для Google Colab вам понадобится учетная запись Google для просмотра кодов, а также вы не можете запускать скрипты только для чтения в Google Colab, поэтому сделайте копию на своем игровом поле. Наконец, я никогда не буду спрашивать разрешения на доступ к вашим файлам на Google Диске, просто к сведению. Удачного кодирования!

Чтобы получить доступ к коду в Google Colab, пожалуйста, нажмите здесь.
Чтобы получить доступ к коду Заменить, нажмите здесь.
Чтобы получить доступ к коду в блокноте Microsoft Azure, щелкните здесь.

Заключительные слова

Недавно исследовательская группа Face book AI выпустила нормализацию группы. (Групповая нормализация от Yuxin Wu и Kaiming He) Я постараюсь это осветить.

Если будут обнаружены какие-либо ошибки, напишите мне по адресу [email protected], если вы хотите увидеть список всех моих писем, пожалуйста, просмотрите мой сайт здесь.

Тем временем подпишитесь на меня в моем твиттере здесь и посетите мой веб-сайт или мой канал Youtube для получения дополнительной информации. Я также сделал сравнение Decoupled Neural Network здесь, если вам интересно.

Ссылка

  1. CS231n Зима 2016: Лекция 5: Нейронные сети, часть 2. (2018). YouTube. Получено 19 марта 2018 г. с сайта https://www.youtube.com/watch?v=gYpoJMlgyXA&feature=youtu.be&list=PLkt2uSq6rBVctENoVBg1TpCC7OQi31AlC&t=3078.
  2. Тори, К. (2016). Как выглядит градиент, проходящий через пакетную нормализацию?. Cthorey.github.io. Получено 19 марта 2018 г. с сайта http://cthorey.github.io/backpropagation/.
  3. Вывод уравнений пакетной нормы обратного распространения | Крис Ага. (2018). Chrisyeh96.github.io. Получено 19 марта 2018 г. с сайта https://chrisyeh96.github.io/2017/08/28/deriving-batchnorm-backprop.html.
  4. Получение градиента для обратного прохода пакетной нормализации. (2018). Kevinzakka.github.io. Получено 19 марта 2018 г. с сайта https://kevinzakka.github.io/2016/09/14/batch_normalization/.
  5. Кратцерт, Ф. (2018). Понимание обратного прохода через уровень пакетной нормализации. Kratzert.github.io. Получено 19 марта 2018 г. с сайта https://kratzert.github.io/2016/02/12/understanding-the-gradient-flow-through-the-batch-normalization-layer.html.
  6. (2018). Arxiv.org. Получено 19 марта 2018 г. с сайта https://arxiv.org/pdf/1502.03167.pdf.
  7. numpy.histogram - Руководство по NumPy v1.13. (2018). Docs.scipy.org. Получено 19 марта 2018 г. с сайта https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.histogram.html.
  8. numpy.random.weibull - Руководство по NumPy v1.13. (2018). Docs.scipy.org. Получено 19 марта 2018 г. с сайта https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.random.weibull.html#numpy.random.weibull
  9. numpy.var - Руководство по NumPy v1.14. (2018). Docs.scipy.org. Получено 26 марта 2018 г. с сайта https://docs.scipy.org/doc/numpy/reference/generated/numpy.var.html.
  10. данные ?, Х. (2018). Как построить гистограмму с помощью Matplotlib в Python со списком данных ?. Stackoverflow.com. Получено 26 марта 2018 г. с сайта https://stackoverflow.com/questions/33203645/how-to-plot-a-histogram-using-matplotlib-in-python-with-a-list-of-data.
  11. numpy.random.randn - Руководство по NumPy v1.14. (2018). Docs.scipy.org. Получено 27 марта 2018 г. с сайта https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.randn.html.
  12. Ву, Ю., и Хе, К. (2018). Групповая нормализация. Arxiv.org. Получено 27 марта 2018 г. с сайта https://arxiv.org/abs/1803.08494.
  13. Стандартизация против нормализации | Блог интеллектуального анализа данных - www.dataminingblog.com. (2007). Dataminingblog.com. Получено 27 марта 2018 г. с сайта http://www.dataminingblog.com/standardization-vs-normalization/.
  14. Иоффе С. и Сегеди К. (2015). Пакетная нормализация: ускорение глубокого обучения сети за счет уменьшения внутреннего ковариального сдвига. Arxiv.org. Получено 27 марта 2018 г. с сайта https://arxiv.org/abs/1502.03167.
  15. Нормальное распределение. (2018). Mathsisfun.com. Получено 27 марта 2018 г. с сайта https://www.mathsisfun.com/data/standard-normal-distribution.html.