Оценка несмещенной дисперсии нормализации батча во время вывода в сверточных нейронных сетях.

Вопрос или проблема

Я вижу много ответов на ту же тему. Однако у меня есть часть, которая все еще меня сбивает с толку, поэтому я задаю этот вопрос.

https://stackoverflow.com/questions/38553927/batch-normalization-in-convolutional-neural-network

Предпоследний абзац ответа Maverick Meerkat гласит, что среднее и стандартное отклонение вычисляются по [m, n_W, n_H], что означает размер мини-батча, ширину, высоту.

Это, как сказано в оригинальной статье, используя

эффективную мини-партию размера m’ = |B| = m * p q

где m — размер мини-батча, p x q — размер карты признаков в случае сверток.

p x q, будучи размером карты признаков, означает, что p, q — это ширина и размер столбца тензора, к которому применяется нормализация батча.

Но я хочу подтвердить уравнение для E[x] и Var[x], которые являются средним и дисперсией, используемыми во время вывода.

Уравнения в оригинальной статье: E[x] = E_B[μ_B] и Var[x] = m/m−1 E_B[σ^2_B]

Очевидно, что мы будем вычислять μ_B и σ^2_B с 3D тензором в диапазоне эффективной мини-партии = размер мини-партии x ширина тензора x высота тензора.

Таким образом, длина векторов μ_B и σ^2_B будет равна глубине тензора. Количество векторов μ_B и σ^2_B будет (размер эпохи)/(размер мини-батча), что означает, что для всего обучающего набора данных (эпохи) мы будем вычислять μ_B и σ^2_B для каждого мини-батча.

Следовательно

E[x] = E_B[μ_B] = (Сумма μ_B) / глубина

и

Var[x] = m/m−1 E_B[σ^2_B] = m / m-1 (Сумма σ^2_B) / глубина

где сумма варьируется в диапазоне [0, (размер эпохи)/(размер мини-батча)).

Проблема заключается в том, как мы должны интерпретировать m в определении Var[x]. В статье упоминалось, что они используют “эффективный размер мини-батча (m’)” вместо размера батча (m) и сказано

Alg. 2 модифицирован аналогичным образом, так что
во время вывода трансформация BN применяет ту же линейную
преобразование к каждой активации в данной карте признаков.

в оригинальной статье.

ВОПРОС:

Однако, из-за моего ограниченного знания математики, я не могу подтвердить, должны ли мы интерпретировать Var[x] = m/m−1 E_B[σ^2_B] как Var[x] = m’/m’−1 E_B[σ^2_B] для m’ = m * p * q.

В оригинальной статье говорится, что Var[x] = m/m−1 E_B[σ^2_B] является “несмещенной оценкой дисперсии” в случае для 1D вектора x. Я надеюсь, что кто-то мог бы подтвердить, что Var[x] = m’/m’−1 E_B[σ^2_B] действительно является несмещенной оценкой дисперсии в случае сверток 3D тензора, где m’ — это эффективный размер мини-батча.

.

Ответ или решение

Теория

Введение Batch Normalization (BN) существенно повлияло на развитие глубоких нейронных сетей, улучшив их способность обучаться, ускоряя процесс конвергенции и стабилизируя обучение. В контексте свёрточных нейронных сетей (CNN) Batch Normalization применяется на тензор. Обычно тензоры, подаваемые в свёрточный слой сети, имеют размерности: [batch size, высота, ширина, глубина].

Одним из ключевых этапов нормализации является вычисление средней (E[x]) и дисперсии (Var[x]) внутри мини-батча, что помогает стандартизировать показатели и снижает чувствительность к изменениям входных данных. В оригинальной статье, написанной Сергеем Иоффе и Кристианом Щилле, содержатся формулы для вычисления средних и дисперсий:

  • Среднее: E_B[μ_B] = E[x],
  • Дисперсия: Var[x] = m/m−1 E_B[σ^2_B],

где m — размер мини-батча. В случае свёрточных нейронных сетей (convnet) размер эффективного мини-батча (m’) вычисляется как произведение m на размеры ширины и высоты feature map, то есть p и q соответственно.

Пример

Представим свёрточную нейронную сеть, где на вход подаётся тензор размером [20, 32, 32, 64], где:

  • 20 — размер батча (m),
  • 32 — ширина и высота feature map (p и q),
  • 64 — глубина канала.

Вычислим среднее и дисперсию для такого тензора:

  • Поскольку ширина и высота у нас равны, эффективный размер мини-батча (m’) равен ( m \times p \times q = 20 \times 32 \times 32 = 20480 ).

Теперь это способствует расчёту средних и дисперсий для каждого глубинного слоя (в данном случае 64 канала):

  • E[x] вычисляется средством суммирования всех μ_B и последующего деления на глубину. Это даёт среднее значение для каждого из 64 каналов, которые поступают на вход.
  • Var[x] корректируется с учётом дисперсии следуя формуле: Var[x] = m’/m’-1 E_B. Для нашего примера это будет Var[x] = 20480/20479 E_B.

Применение

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

Правильная интерпретация дисперсии особенного значения в случае задач машинного обучения. Без неё сеть будет некорректно обрабатывать данные, вынуждая её к неустойчивости в прогнозах. В рассмотренной ситуации ваша интерпретация Var[x] как m’/m’-1 E_B действительно важна и актуальна, поскольку она поддерживает ту же концепцию "unbiased estimate".

Заключение

Таким образом, использование эффективного размера мини-батча m’ в расчёте дисперсии Var[x] во время инференса CNN обеспечивает более корректную оценку, что поддерживает производительность и надёжность сети. Благодаря этому повышается общее качество прогнозов сети, она лучше справляется с разнообразией входных данных. Такое детальное понимание математики behind BN становится всё более актуальным в контексте беспрерывно развивающихся алгоритмов машинного обучения.

Оцените материал
Добавить комментарий

Капча загружается...