Путаница в последовательности функций пакетной нормализации и активации

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

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

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

Пакетная нормализация решает главную проблему внутреннего ковариантного сдвига ( Internal - input, Covariate - Feature shift - change ), что по сути означает, что если входные данные имеют разную амплитуду, чем то, как сеть понимает взаимосвязь между ними (недавно вышла статья, в которой говорится, что пакетная нормализация не решает внутренний ковариационный сдвиг, однако пока мы проигнорируем это, поскольку нам еще предстоит получить полную понимание этого). При этом эффект пакетной нормализации на обобщение нейронных сетей очень очевиден.

Пакетная нормализация - очень простая для понимания концепция. Как следует из названия, она отличается от нормализации изображения, поскольку здесь основное внимание уделяется нормализации по пакету, а не по всему изображению. Размер пакета относится к количеству изображений, которые сеть в настоящее время просматривает для оптимизации и определения текстур, узоры, части объекта, предметы и т. д.

Для обсуждения предположим, что наша модель имеет 15 уровней свертки, прежде чем мы сделаем окончательный прогноз, а уровень 10 сети состоит из 64 каналов (изображение1 ниже показывает пример 3 каналов) и пакета размер 32. Теперь пакетная нормализация здесь работает путем вычисления среднего и стандартного отклонения для каждого канала путем вычитания среднего значения из канала и деления его на стандартное отклонение (поскольку каждый канал является выходным сигналом определенного фильтра). Поскольку сеть вычисляет среднее значение и стандартное отклонение, которое фиксируется для партии, следовательно, это необучаемый параметр, в отличие от других гиперпараметров, которые модель обучает для оптимизации.

Точно так же одна из наиболее предпочтительных и удобных для вычислений функций активации - это relu, поскольку она работает по принципу простого преобразования значений -ve в 0 и сохранения положительных значений такими, какие они есть (см. Изображение 1 выше).

Теперь, когда специалисты по обработке данных начали использовать пакетную нормализацию с функцией активации, возник очевидный вопрос, следует ли использовать пакетную нормализацию до функции активации или после нее? Существует множество исследовательских работ, блогов и сообщений, в которых утверждается, что они дают разные результаты при использовании одного за другим, однако никаких конкретных доказательств, ясно показывающих преимущества использования одного за другим, нет.

Здесь мы рассмотрим пример обоих сценариев и попытаемся проанализировать результат. Допустим, мы смотрим на слой с размером изображения 5 x 5 (мы берем небольшой размер изображения для простоты расчета и представления).

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

Функция активации после пакетной нормализации

Если мы внимательно рассмотрим приведенные выше диаграммы, то станет очевидным, что распределение входных данных для уровня пакетной нормализации и выходных данных одинаково. Разница только в масштабе, который он представлен. Распределение после функции активации «relu» показывает, что отрицательные значения были устранены (через некоторое время мы снова рассмотрим 3-й график).

Нормализация пакета после активации

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

Теперь давайте попробуем изучить обе выходные диаграммы.

  1. «Relu after Batch Normalization» и
  2. «Нормализация партии после повторного включения.

если мы внимательно проанализируем, то обнаружим, что распределение данных не изменилось. Изменились только ценности. Это не должно влиять на обработку следующих слоев, поскольку ядро ​​(фильтр), которое пытается работать с выходом, будет иметь разные веса для каждого. Например, одно ядро ​​может выбрать значение веса в диапазоне от -2 до +1,5, а другое - от -1,8 до +1,7.

Мы также попытались добавить слой максимального пула 2 x 2 поверх него и проанализировали вывод максимального уровня пула. Давайте посмотрим на форму вывода для обоих случаев.

Вы заметили разницу? Да, кривая «relu + Batch Normalization + Max pool» имеет немного больше значений по оси Y, чем «Batch Normalization + relu + Max pool». Однако распределение и поведение обоих данных одинаковы. Как мы заявляли ранее, ядра, которые должны работать на обоих, будут немного отличаться.

Резюме

Из приведенного выше анализа мы не смогли найти какой-либо существенной разницы в использовании одного за другим. Мы также запустили две отдельные сети

  1. С функцией пакетной нормализации после активации и другим
  2. С функцией активации после нормализации партии на тех же входных данных.

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

# Спасибо, что прочитали статью.

Пожалуйста, напишите мне ([email protected]) по любым вопросам / проблемам / исправлениям / идеям. Я буду рад связаться с вами.