Содержание статьи
Зачем нормализовать данные для нейросети
В применении к переносу стиля
Есть другой способ: можно вместе с настройкой сети обучать алгоритм выбора параметров [math]PARAMS[/math] сжатия и сдвига по заданному входу: [math](\beta_c, \gamma_c) = PARAMS(x)[/math] . К примеру, в работе Modulating early visual processing by language в качестве [math]PARAMS[/math] используется многослойный перцептрон по Румельхарту с одним скрытым слоем. Таким образом, характеристики [math]x[/math] могут изменить выход целого слоя. Это бывает полезно, если верна гипотеза, что структура входных векторов связана с желаемым результатом работы.
Также существует «золотая середина» между стохастическим градиентным спуском и пакетным градиентным спуском — когда просматривается только некоторое подмножество обучающей выборки фиксированного размера (англ. batch-size). В таком случае такие подмножества принято называть мини-пакетом (англ. mini-batch). Здесь и далее, мини-пакеты будем также называть пакетом.
Заметим, что если [math]\beta=\mu_[/math] и [math]\gamma=\sqrt<\sigma_^ + \epsilon>[/math] , то [math]y_[/math] равен [math]x_[/math] , то есть [math]BN_<\gamma, \beta>(\cdot)[/math] является тождественным отображением. Таким образом, использование пакетной нормализации не может привести к снижению точности, поскольку оптимизатор просто может использовать нормализацию как тождественное отображение.
Есть несколько способов выбрать параметры. Самой простой из них — разделить предметную область на [math]C[/math] частей. Для каждого слоя надо добавить соответствующие параметры [math]\beta_c, \gamma_c \; , c \in 1..C[/math] и настраивать их вместе с остальными параметрами модели. Когда мы тренируем на данных из [math]i[/math] -ой части, мы явно указываем, что в формуле [math](1)[/math] [math]c = i[/math] . Когда мы хотим осуществить предсказание, мы снова явно указываем желаемый [math]c[/math] и в вычислениях используются соответствующие параметры.
где математическое ожидание и дисперсия считаются по всей обучающей выборке. Такая нормализация входа слоя нейронной сети может изменить представление данных в слое. Чтобы избежать данной проблемы, вводятся два параметра сжатия и сдвига нормализованной величины для каждого [math]x^[/math] : [math]\gamma^[/math] , [math]\beta^[/math] — которые действуют следующим образом:
Необходимость нормализации данных обучающих выборок данных обусловлена особенностями используемых переменных в нейросетевых моделях. Поскольку они различаются по физическому смыслу, их абсолютные значения могут значительно разниться. Например, выборка может включать концентрацию, измеряемую в десятых или сотых долях процентов, а также давление в сотнях тысяч паскаль и температуру в градусах Цельсия.
Рисунок [math]2[/math] . Граф вычислений слоя пакетной нормализации алгоритмом обратного распространения ошибки. Слева-направо черными стрелками показана работа алгоритма в прямом направлении. А справа-налево красными стрелками — в обратном направлении, где вычисляется градиент функции потерь. Здесь [math]N=m[/math] и [math]D=d[/math] . Иллюстрация из статьи.
В случае свёрточных сетей, дополнительно необходима нормализация, чтобы удовлетворить свойство свёрточных сетей, что различные элементы в разных местах одной карты признаков (образ операции свёртки, англ. feature map) должны быть нормализованы одинаково. Чтобы этого добиться, нормализация выполняется совместно над всеми значениями в пакете. Пусть [math]B[/math] — множество всех значений в карте признаков по всему пакету и всем точкам в карте признаков. Тогда для пакета размера [math]m[/math] и карты признаков размера [math]p \times q[/math] размер [math]B[/math] равен [math]m’=|B|=m \cdot pq[/math] . Тогда параметры [math]\gamma^[/math] и [math]\beta^[/math] настраиваются для каждой карты признаков отдельно.
Линейная нормализация
На Рисунке [math]5[/math] изображены два графика, показывающие разницу между моделями. Как видно, обе модели достигли высокой точности, но модель с использованием пакетной нормализации достигла точности более [math]90\%[/math] быстрее, почти сразу, и достигла максимума, примерно, уже на [math]10000[/math] итераций. Однако, модель без пакетной нормализации достигла скорости обучения примерно [math]510[/math] пакетов в секунду, а модель с использованием пакетной нормализации — [math]270[/math] . Однако, как можно видеть, пакетная нормализация позволяет выполнить меньшее количество итераций и, в итоге, сойтись за меньшее время.
Проиллюстрируем ковариантный сдвиг примером. Пусть есть глубокая нейронная сеть, которая обучена определять находится ли на изображении роза. И нейронная сеть была обучена на изображениях только красных роз. Теперь, если попытаться использовать обученную модель для обнаружения роз различных цветов, то, очевидно, точность работы модели будет неудовлетворительной. Это происходит из-за того, что обучающая и тестовая выборки содержат изображения красных роз и роз различных цветов в разных пропорциях. Другими словами, если модель обучена отображению из множества [math]X[/math] в множество [math]Y[/math] и если пропорция элементов в [math]X[/math] изменяется, то появляется необходимость обучить модель заново, чтобы «выровнять» пропорции элементов в [math]X[/math] и [math]Y[/math] . Когда пакеты содержат изображения разных классов, распределенные в одинаковой пропорции на всем множестве, то ковариантный сдвиг незначителен. Однако, когда пакеты выбираются только из одного или двух подмножеств (в данном случае, красные розы и розы различных цветов), то ковариантный сдвиг возрастает. Это довольно сильно замедляет процесс обучения модели. На Рисунке [math]1[/math] изображена разница в пропорциях.
Если обучающая выборка не содержит примеров с потенциально возможными меньшими или большими выходными значениями, можно задаться шириной коридора экстраполяции ψ для левой, правой или обеих границ в долях от длины всего первоначального интервала изменения переменной, обычно не более 10% от нее. В этом случае происходит переход от фактических границ из обучающей выборки к гипотетическим:
Рисунок [math]1[/math] . Верхние две строки роз показывают первое подмножество данных, а нижние две строки показывают другое подмножество. Два подмножества имеют разные пропорции изображения роз. На графиках показано распределение двух классов в пространстве объектов с использованием красных и зеленых точек. Синяя линия показывает границу между двумя классами. Иллюстрация из статьи.
Пусть обучение модели производится с помощью пакетов [math]B[/math] размера [math]m[/math] : [math]B = \,\ldots, x_\>[/math] . Здесь нормализация применяется к каждому элементу входа с номером [math]k[/math] отдельно, поэтому в [math]x^[/math] индекс опускается для ясности изложения. Пусть были получены нормализованные значения пакета [math]\hat_,\ldots, \hat_[/math] . После применения операций сжатия и сдвига были получены [math]y_,\ldots, y_[/math] . Обозначим данную функцию пакетной нормализации следующим образом:
Рассмотрим в сравнении методы линейной и нелинейной нормализации. Ниже приведены графики нормализации входной переменной для пределов [–1; 1]. Для нелинейной нормализации с использованием функции гиперболического тангенса принято значение параметра a = 1,0. Следует отметить, что совпадение нормализованного значения в обоих случаях имеет место лишь в точке, соответствующей центру нормализуемого интервала.
Простой способ решить проблему ковариантного сдвига для входного слоя — это случайным образом перемешать данные перед созданием пакетов. Но для скрытых слоев нейронной сети такой метод не подходит, так как распределение входных данных для каждого узла скрытых слоев изменяется каждый раз, когда происходит обновление параметров в предыдущем слое. Эта проблема называется внутренним ковариантным сдвигом (англ. internal covariate shift). Для решения данной проблемы часто приходится использовать низкий темп обучения (англ. learning rate) и методы регуляризации при обучении модели. Другим способом устранения внутреннего ковариантного сдвига является метод пакетной нормализации.
На Рисунке [math]6[/math] изображен график, сравнивающий точно такие же модели, но с использованием сигмоиды в качестве функции активации. Такая конфигурация моделей требует большего времени, чтобы начать обучение. В итоге, модель обучается, но на это потребовалось более [math]45000[/math] итераций, чтобы получить точность более [math]80\%[/math] . При использовании пакетной нормализации получилось достичь точность более [math]90\%[/math] примерно за [math]1000[/math] итераций.