Изменения

Перейти к: навигация, поиск

Batch-normalization

4901 байт добавлено, 20:48, 2 января 2021
Добавление информации про условную нормализацию
В случае свёрточных сетей, дополнительно необходима нормализация, чтобы удовлетворить свойство свёрточных сетей, что различные элементы в разных местах одной карты признаков (образ операции свёртки, англ. feature map) должны быть нормализованы одинаково. Чтобы этого добиться, нормализация выполняется совместно над всеми значениями в пакете. Пусть <tex>B</tex> {{---}} множество всех значений в карте признаков по всему пакету и всем точкам в карте признаков. Тогда для пакета размера <tex>m</tex> и карты признаков размера <tex>p \times q</tex> размер <tex>B</tex> равен <tex>m'=|B|=m \cdot pq</tex>. Тогда параметры <tex>\gamma^{(k)}</tex> и <tex>\beta^{(k)}</tex> настраиваются для каждой карты признаков отдельно.
 
==Условная нормализация==
 
===Перенос стиля===
[[file:style-transfer-example.png|300px|thumb|Рисунок 3. Перенесения стиля с картины Клода Моне "Рыбацкие лодки" (слева) на изображение человека (справа). Иллюстрация из <ref>https://arxiv.org/pdf/1610.07629.pdf</ref>.]]
 
Популярной задачей является отрисовка данного изображения в стиле какой-то заданной картины, как на Рисунке 3. Одно из популярных и достаточно быстрых решений этой задачи использует простые нейронные сети с прямой связью. Однако это решение имеет недостаток: каждая сеть может переносить лишь один стиль. Если мы хотим научиться переносить <tex>N</tex> стилей, то надо обучать <tex>N</tex> различных сетей. Однако лишь небольшое количество параметров этих сетей отвечает за индивидуальные особенности стиля. Хотелось бы уметь переиспользовать остальные параметры.
 
===Индивидуальная нормализация===
[[file:types-of-normalization.png|300px|thumb|Рисунок 4. Типы нормализации. Ось N — по объектам в пакете, ось C — по картам признаков (channels), оставшаяся ось — по пространственным измерениям объектов, например, ширине и высоте картинки. Иллюстрация из [https://medium.com/syncedreview/facebook-ai-proposes-group-normalization-alternative-to-batch-normalization-fb0699bffae7 статьи].]]
 
При пакетной нормализации происходит усреднение параметров по всему пакету. Однако в случае переноса стилей картин, это вносит много шума. При усреднении теряются индивидуальные характеристики картин. Поэтому используется более тонкая нормализация — индивидуальная нормализация, или instance normalization. Разница заключается в том, что нормализация происходит по каждому отдельному объекту, а не по всему пакету. То есть, усреднение происходит по пикселям картины, но не по всем картинам в пакете, как видно на Рисунке 6.
 
===Добавление условности===
В <ref>https://arxiv.org/pdf/1610.07629.pdf</ref> был получен удивительный результат: для моделирования какого-то стиля, достаточно специализировать параметры сжатия и сдвига нормализации для каждого конкретного стиля. Таким образом, давайте для каждого изображения стиля <tex>s</tex> будем учитывать свои <tex>\gamma_s</tex> и <tex>\beta_s</tex>. Таким образом, у нас будет лишь два (вектора) параметров, специфичных для каждого стиля, а все остальные — общие.
 
Такой подход имеет много преимуществ по сравнению с наивным:
 
* Это быстрее.
* Это требует меньше памяти.
* Легче добавить новый стиль: достаточно взять текущие веса, добавить новые параметры сжатия и сдвига и дообучить. Веса, скорее всего, уже были близки к оптимальным и дообучение не будет долгим.
* Можно комбинировать новые стили за счёт [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D0%BA%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%86%D0%B8%D1%8F#%D0%90%D1%84%D1%84%D0%B8%D0%BD%D0%BD%D0%B0%D1%8F,_%D0%BA%D0%BE%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%B8_%D0%B2%D1%8B%D0%BF%D1%83%D0%BA%D0%BB%D0%B0%D1%8F_%D0%BA%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%86%D0%B8%D0%B8 выпуклой комбинации] существующих коэффициентов сжатия и сдвига.
==Пример==
[[File:bn_exp_1.png|300px|thumb|Рисунок 35. Точность распознавания в зависимости от итерации обучения. Оранжевая кривая изображает результаты для модели с использованием пакетной нормализации, синяя кривая {{---}} без. Иллюстрация из [https://github.com/udacity/deep-learning/blob/master/batch-norm/Batch_Normalization_Lesson.ipynb статьи].]][[File:bn_exp_2.png|300px|thumb|Рисунок 46. Точность распознавания в зависимости от итерации обучения c использованием сигмоиды в качетсве функции активации. Иллюстрация из [https://github.com/udacity/deep-learning/blob/master/batch-norm/Batch_Normalization_Lesson.ipynb статьи].]]
Приведем пример демонстрирующий работу пакетной нормализации.
Веса инициализированы значениями с малой дисперсией.
На Рисунке 3 5 изображены два графика, показывающие разницу между моделями.
Как видно, обе модели достигли высокой точности, но модель с использованием пакетной нормализации достигла точности более <tex>90\%</tex> быстрее, почти сразу, и достигла максимума, примерно, уже на <tex>10000</tex> итераций. Однако, модель без пакетной нормализации достигла скорости обучения примерно <tex>510</tex> пакетов в секунду, а модель с использованием пакетной нормализации {{---}} <tex>270</tex>.
Однако, как можно видеть, пакетная нормализация позволяет выполнить меньшее количество итераций и, в итоге, сойтись за меньшее время.
На Рисунке 4 6 изображен график, сравнивающий точно такие же модели, но с использованием сигмоиды в качестве функции активации.
Такая конфигурация моделей требует большего времени, чтобы начать обучение.
В итоге, модель обучается, но на это потребовалось более <tex>45000</tex> итераций, чтобы получить точность более <tex>80\%</tex>.
25
правок

Навигация