Изменения
→Идея
==Идея==
[[Файл:covariate-shift1.png|600px|thumb|Верхние две строки роз показывают первое подмножество данных, а нижние две строки показывают другое подмножество данных. Данные подмножества имеют довольно различные распределения. На графиках показано распределение двух классов в пространстве объектов с использованием красных и зеленых точек. Синяя линия показывает границу между двумя классами.]]
Нормализация входного слоя обычно выполняется путем масштабирования данных, подаваемых в функции активации. Например, когда у нас есть признаки со значениями от 0 до 1 и некоторые признаки со значениями от 1 до 1000, то их необходимо нормализовать, чтобы ускорить обучение. То же самое можно сделать и для скрытых слоев нейронных сетей.
Нормализация батчей уменьшает величину, на которую смещаются значения узлов в скрытых слоях (т.н. '''смещение ковариации ''' (англ. covariance shift)). Проиллюстрируем смещение ковариации примером. Пусть есть глубокая нейронная сеть, которая обучена определять находится ли на изображении роза. И нейронная сеть была обучена на изображении только красных роз. Теперь, если попытаться использовать обученную модель для обнаружения цветных роз, то, очевидно, результат будет неудовлетворительный. Обучающая и тестовая выборки содержат изображения роз, но немного отличаются. Другими словами, если модель обучена отображению из множества <tex>X</tex> в множество <tex>Y</tex> и если распределение элементов в <tex>X</tex> изменяется, то появляется необходимость обучить модель заново, чтобы "выровнять" распределение элементов в <tex>X</tex> и <tex>Y</tex>. Когда батчи содержат изображения, равномерно-распределенные на всем множестве, то смещение ковариации незначительно. Однако, когда батчи выбираются только из одного из двух подмножеств (в данном случае, красные розы и цветные розы), то смещение ковариации возрастает. Это довольно сильно замедляет процесс обучения модели.
Простой способ решить проблему смещения ковариации для входного слоя {{---}} это рандомизировать случайным образом перемешать данные перед созданием батчей. Но для скрытых слоев нейронной сети данный метод не подходит, так как распределение входных данных для каждого узла скрытых слоев изменяется каждый раз, когда происходит обновление параметров в предыдущем слое. Данная проблема называется '''внутренним смещением ковариации ''' (англ. internal covariate shift). Для решения этой проблемы необходимо использовать маленький коэффициент скорости обучения и методы регуляризации. Но, для решения данной проблемы как раз и был придуман метод нормализация батчей.
Кроме того, нормализация использование нормализации батчей имеет несколько приемуществобладает еще несколькими дополнительными полезными свойствами:* достигается более быстрая сходимость моделей, несмотря на добавление новых выполнение дополнительных вычислений;* нормализация батчей позволяет каждому слою сети обучатся более независимо от других слоев;* становится возможно возможным использование более высокого коэффициента скорости обучения, так как нормализация батчей гарантирует, что выходы узлов нейронной сети не будут иметь слишком больших или малых значений;
* нормализация батчей в каком-то смысле также является механизмом регуляризации: данный метод привносит в выходы узлов скрытых слоев некоторый шум, аналогично методу dropout;
* модели становятся менее чувствительны к начальной инициализации весов.