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