Вопрос или проблема
Я вижу много ответов на ту же тему. Однако у меня есть часть, которая все еще меня сбивает с толку, поэтому я задаю этот вопрос.
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 становится всё более актуальным в контексте беспрерывно развивающихся алгоритмов машинного обучения.