Редактирование: Batch-normalization

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

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 4: Строка 4:
 
Нормализация входного слоя нейронной сети обычно выполняется путем масштабирования данных, подаваемых в функции активации. Например, когда есть признаки со значениями от <tex>0</tex> до <tex>1</tex> и некоторые признаки со значениями от <tex>1</tex> до <tex>1000</tex>, то их необходимо нормализовать, чтобы ускорить обучение. Нормализацию данных можно выполнить и в скрытых слоях нейронных сетей, что и делает метод пакетной нормализации.
 
Нормализация входного слоя нейронной сети обычно выполняется путем масштабирования данных, подаваемых в функции активации. Например, когда есть признаки со значениями от <tex>0</tex> до <tex>1</tex> и некоторые признаки со значениями от <tex>1</tex> до <tex>1000</tex>, то их необходимо нормализовать, чтобы ускорить обучение. Нормализацию данных можно выполнить и в скрытых слоях нейронных сетей, что и делает метод пакетной нормализации.
 
===Пакет===
 
===Пакет===
Предварительно, напомним, что такое '''пакет''' (англ. batch). Возможны два подхода к реализации алгоритма градиентного спуска для обучения нейросетевых моделей: стохастический и пакетный<ref>[http://www.machinelearning.ru/wiki/index.php?title=Метод_стохастического_градиента Метод стохастического градиента]</ref>.
+
Предварительно, напомним, что такое '''пакет''' (англ. batch). Возможны два подхода к реализации алгоритма градиентного спуска для обучения нейросетевых моделей: стохастический и пакетный<ref>[http://www.machinelearning.ru/wiki/index.php?title=Метод_стохастического_градиента Метод стохастического градиента]</ref>.  
* [[Стохастический градиентный спуск|Стохастический градиентный спуск]] (англ. stochastic gradient descent) {{---}} реализация, в которой на каждой итерации алгоритма из обучающей выборки каким-то (случайным) образом выбирается только один объект;
+
* [[Стохастический градиентный спуск|Стохастический градиентный спуск]] (англ. stochastic gradient descent) {{---}} реализация, в которой на каждой итерации алгоритма из обучающей выборки каким-то (случайным) образом выбирается только один объект;  
* Пакетный (батч) (англ. batch gradient descent) {{---}} реализация градиентного спуска, когда на каждой итерации обучающая выборка просматривается целиком, и только после этого изменяются веса модели.
+
* Пакетный (батч) (англ. batch gradient descent) {{---}} реализация градиентного спуска, когда на каждой итерации обучающая выборка просматривается целиком, и только после этого изменяются веса модели.  
  
 
Также существует "золотая середина" между стохастическим градиентным спуском и пакетным градиентным спуском {{---}} когда просматривается только некоторое подмножество обучающей выборки фиксированного размера (англ. batch-size). В таком случае такие подмножества принято называть мини-пакетом (англ. mini-batch). Здесь и далее, мини-пакеты будем также называть пакетом.
 
Также существует "золотая середина" между стохастическим градиентным спуском и пакетным градиентным спуском {{---}} когда просматривается только некоторое подмножество обучающей выборки фиксированного размера (англ. batch-size). В таком случае такие подмножества принято называть мини-пакетом (англ. mini-batch). Здесь и далее, мини-пакеты будем также называть пакетом.
  
 
===Ковариантный сдвиг===
 
===Ковариантный сдвиг===
[[Файл:covariate-shift1.png|600px|thumb|Рисунок <tex>1</tex>. Верхние две строки роз показывают первое подмножество данных, а нижние две строки показывают другое подмножество. Два подмножества имеют разные пропорции изображения роз. На графиках показано распределение двух классов в пространстве объектов с использованием красных и зеленых точек. Синяя линия показывает границу между двумя классами. Иллюстрация из [https://www.learnopencv.com/batch-normalization-in-deep-networks/ статьи].]]
+
[[Файл:covariate-shift1.png|600px|thumb|Рисунок 1. Верхние две строки роз показывают первое подмножество данных, а нижние две строки показывают другое подмножество. Два подмножества имеют разные пропорции изображения роз. На графиках показано распределение двух классов в пространстве объектов с использованием красных и зеленых точек. Синяя линия показывает границу между двумя классами. Иллюстрация из [https://www.learnopencv.com/batch-normalization-in-deep-networks/ статьи].]]
Пакетная нормализация уменьшает величину, на которую смещаются значения узлов в скрытых слоях (т.н. '''[[Ковариация случайных величин|ковариантный]] сдвиг''' (англ. covariance shift)).
+
Пакетная нормализация уменьшает величину, на которую смещаются значения узлов в скрытых слоях (т.н. '''[[Ковариация случайных величин|ковариантный]] сдвиг''' (англ. covariance shift)).  
  
 
Ковариантный сдвиг {{---}} это ситуация, когда распределения значений признаков в обучающей и тестовой выборке имеют разные параметры (математическое ожидание, дисперсия и т.д.). Ковариантность в данном случае относится к значениям признаков.
 
Ковариантный сдвиг {{---}} это ситуация, когда распределения значений признаков в обучающей и тестовой выборке имеют разные параметры (математическое ожидание, дисперсия и т.д.). Ковариантность в данном случае относится к значениям признаков.
  
Проиллюстрируем ковариантный сдвиг примером.
+
Проиллюстрируем ковариантный сдвиг примером.  
 
Пусть есть [[Глубокое обучение|глубокая нейронная сеть]], которая обучена определять находится ли на изображении роза.
 
Пусть есть [[Глубокое обучение|глубокая нейронная сеть]], которая обучена определять находится ли на изображении роза.
И нейронная сеть была обучена на изображениях только красных роз.
+
И нейронная сеть была обучена на изображениях только красных роз.  
 
Теперь, если попытаться использовать обученную модель для обнаружения роз различных цветов, то, очевидно, точность работы модели будет неудовлетворительной.
 
Теперь, если попытаться использовать обученную модель для обнаружения роз различных цветов, то, очевидно, точность работы модели будет неудовлетворительной.
Это происходит из-за того, что обучающая и тестовая выборки содержат изображения красных роз и роз различных цветов в разных пропорциях.
+
Это происходит из-за того, что обучающая и тестовая выборки содержат изображения красных роз и роз различных цветов в разных пропорциях.  
Другими словами, если модель обучена отображению из множества <tex>X</tex> в множество <tex>Y</tex> и если пропорция элементов в <tex>X</tex> изменяется, то появляется необходимость обучить модель заново, чтобы "выровнять" пропорции элементов в <tex>X</tex> и <tex>Y</tex>.
+
Другими словами, если модель обучена отображению из множества <tex>X</tex> в множество <tex>Y</tex> и если пропорция элементов в <tex>X</tex> изменяется, то появляется необходимость обучить модель заново, чтобы "выровнять" пропорции элементов в <tex>X</tex> и <tex>Y</tex>.  
Когда пакеты содержат изображения разных классов, распределенные в одинаковой пропорции на всем множестве, то ковариантный сдвиг незначителен.
+
Когда пакеты содержат изображения разных классов, распределенные в одинаковой пропорции на всем множестве, то ковариантный сдвиг незначителен.  
Однако, когда пакеты выбираются только из одного или двух подмножеств (в данном случае, красные розы и розы различных цветов), то ковариантный сдвиг возрастает.
+
Однако, когда пакеты выбираются только из одного или двух подмножеств (в данном случае, красные розы и розы различных цветов), то ковариантный сдвиг возрастает.  
Это довольно сильно замедляет процесс обучения модели. На Рисунке <tex>1</tex> изображена разница в пропорциях.
+
Это довольно сильно замедляет процесс обучения модели. На Рисунке 1 изображена разница в пропорциях.
  
Простой способ решить проблему ковариантного сдвига для входного слоя {{---}} это случайным образом перемешать данные перед созданием пакетов.
+
Простой способ решить проблему ковариантного сдвига для входного слоя {{---}} это случайным образом перемешать данные перед созданием пакетов.  
Но для скрытых слоев нейронной сети такой метод не подходит, так как распределение входных данных для каждого узла скрытых слоев изменяется каждый раз, когда происходит обновление параметров в предыдущем слое.
+
Но для скрытых слоев нейронной сети такой метод не подходит, так как распределение входных данных для каждого узла скрытых слоев изменяется каждый раз, когда происходит обновление параметров в предыдущем слое.  
Эта проблема называется '''внутренним ковариантным сдвигом''' (англ. internal covariate shift).
+
Эта проблема называется '''внутренним ковариантным сдвигом''' (англ. internal covariate shift).  
Для решения данной проблемы часто приходится использовать низкий [[Стохастический градиентный спуск|темп обучения]] (англ. learning rate) и методы [[wikipedia:ru:Регуляризация_(математика)|регуляризации]] при обучении модели.
+
Для решения данной проблемы часто приходится использовать низкий [[Стохастический градиентный спуск|темп обучения]] (англ. learning rate) и методы [[wikipedia:ru:Регуляризация_(математика)|регуляризации]] при обучении модели.  
 
Другим способом устранения внутреннего ковариантного сдвига является метод пакетной нормализации.
 
Другим способом устранения внутреннего ковариантного сдвига является метод пакетной нормализации.
  
Строка 68: Строка 68:
  
 
==Обучение нейронных сетей с пакетной нормализацией==
 
==Обучение нейронных сетей с пакетной нормализацией==
[[Файл:BNcircuit.png|700px|thumb|Рисунок <tex>2</tex>. [[Настройка_глубокой_сети#Граф вычислений|Граф вычислений]] слоя пакетной нормализации алгоритмом обратного распространения ошибки. Слева-направо черными стрелками показана работа алгоритма в прямом направлении. А справа-налево красными стрелками {{---}} в обратном направлении, где вычисляется градиент функции потерь. Здесь <tex>N=m</tex> и <tex>D=d</tex>. Иллюстрация из [https://kratzert.github.io/2016/02/12/understanding-the-gradient-flow-through-the-batch-normalization-layer.html статьи].]]
+
[[Файл:BNcircuit.png|700px|thumb|Рисунок 2. [[Настройка_глубокой_сети#Граф вычислений|Граф вычислений]] слоя пакетной нормализации алгоритмом обратного распространения ошибки. Слева-направо черными стрелками показана работа алгоритма в прямом направлении. А справа-налево красными стрелками {{---}} в обратном направлении, где вычисляется градиент функции потерь. Здесь <tex>N=m</tex> и <tex>D=d</tex>. Иллюстрация из [https://kratzert.github.io/2016/02/12/understanding-the-gradient-flow-through-the-batch-normalization-layer.html статьи].]]
  
 
Для обучения нейронных сетей необходимо вычислять [[wikipedia:ru:Градиент|градиент]] [[wikipedia:en:Loss_function|функции потерь]] <tex>l</tex>. В случае использования метода пакетной нормализации градиент вычисляется следующим образом:
 
Для обучения нейронных сетей необходимо вычислять [[wikipedia:ru:Градиент|градиент]] [[wikipedia:en:Loss_function|функции потерь]] <tex>l</tex>. В случае использования метода пакетной нормализации градиент вычисляется следующим образом:
Строка 84: Строка 84:
 
<tex>\displaystyle \frac{\partial l}{\partial \beta} = \sum_{i=1}^{m}\frac{\partial l}{\partial y_{i}}</tex> <tex> (6)</tex>
 
<tex>\displaystyle \frac{\partial l}{\partial \beta} = \sum_{i=1}^{m}\frac{\partial l}{\partial y_{i}}</tex> <tex> (6)</tex>
  
На Рисунке <tex>2</tex> изображен [[Настройка_глубокой_сети#Граф вычислений|граф вычислений]] слоя пакетной нормализации алгоритмом обратного распространения ошибки.
+
На Рисунке 2 изображен [[Настройка_глубокой_сети#Граф вычислений|граф вычислений]] слоя пакетной нормализации алгоритмом обратного распространения ошибки.
  
В прямом направлении, как и описано в алгоритме метода, из входа <tex>x</tex> вычисляется среднее значение по каждой размерности признакового пространства. Затем полученный вектор средних значение вычитается из каждого элемента обучающей выборки. Далее вычисляется дисперсия,  и с помощью нее вычисляется знаменатель для нормализации. Затем полученное значение инвертируется и умножается на разницу входа <tex>x</tex> и средних значений. В конце применяются параметры <tex>\gamma</tex> и <tex>\beta</tex>.
+
В прямом направлении, как и описано в алгоритме метода, из входа <tex>x</tex> вычисляется среднее значение по каждой размерности признакового пространства. Затем полученный вектор средних значение вычитается из каждого элемента обучающей выборки. Далее вычисляется дисперсия,  и с помощью нее вычисляется знаменатель для нормализации. Затем полученное значение инвертируется и умножается на разницу входа <tex>x</tex> и средних значений. В конце применяются параметры <tex>\gamma</tex> и <tex>\beta</tex>.  
  
 
В обратном направлении вычисляются производные необходимых функций. В следующей таблице подробнее изображены шаги вычисления градиента функции потерь (иллюстрации из [https://kratzert.github.io/2016/02/12/understanding-the-gradient-flow-through-the-batch-normalization-layer.html статьи], здесь <tex>N=m</tex> и <tex>D=d</tex>):
 
В обратном направлении вычисляются производные необходимых функций. В следующей таблице подробнее изображены шаги вычисления градиента функции потерь (иллюстрации из [https://kratzert.github.io/2016/02/12/understanding-the-gradient-flow-through-the-batch-normalization-layer.html статьи], здесь <tex>N=m</tex> и <tex>D=d</tex>):
Строка 146: Строка 146:
  
 
В случае свёрточных сетей, дополнительно необходима нормализация, чтобы удовлетворить свойство свёрточных сетей, что различные элементы в разных местах одной карты признаков (образ операции свёртки, англ. 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> настраиваются для каждой карты признаков отдельно.
 
В случае свёрточных сетей, дополнительно необходима нормализация, чтобы удовлетворить свойство свёрточных сетей, что различные элементы в разных местах одной карты признаков (образ операции свёртки, англ. 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:types-of-normalization.png|300px|thumb|Рисунок <tex>3</tex>. Типы нормализации. Ось N
 
— по объектам в пакете, ось C — по картам признаков (channels), оставшаяся ось —
 
по пространственным измерениям объектов, например, ширине и высоте картинки.
 
Иллюстрация из
 
[https://medium.com/syncedreview/facebook-ai-proposes-group-normalization-alternative-to-batch-normalization-fb0699bffae7 статьи].]]
 
 
При пакетной нормализации происходит усреднение параметров по всему пакету.
 
Например, в случае задачи переноса стилей картин, это вносит много шума. При
 
усреднении теряются индивидуальные характеристики объектов. Поэтому используется
 
более тонкая нормализация — индивидуальная нормализация (англ. instance
 
normalization). Разница заключается в том, что нормализация происходит по
 
каждому отдельному объекту, а не по всему пакету. Для примера, усреднение
 
происходит по пикселям картины, но не по всем картинам в пакете, как видно на
 
Рисунке <tex>3</tex>.
 
 
==Условная пакетная нормализация==
 
 
'''Условная пакетная нормализация''' (англ. conditional batch normalization,
 
CBN) {{---}} метод, который позволяет "выбирать" параметры пакетной нормализации
 
(<tex>\beta</tex> и <tex>\gamma</tex>) в зависимости от какого-то состояния
 
сети, например метки класса. Впервые данный метод был представлен для
 
индивидуальной нормализации в
 
''A Learned Representation for Artistic Style''<ref name="A Learned Representation for Artistic Style">[https://arxiv.org/pdf/1610.07629.pdf A Learned Representation for Artistic Style]</ref>.
 
Позднее он был использован для пакетной нормализации в
 
''Modulating early visual processing by language''<ref name="Modulating early visual processing by language">[https://arxiv.org/pdf/1707.00683v3.pdf Modulating early visual processing by language]</ref>.
 
 
Зачем нужно делать параметры нормализации зависимостью? На практике было
 
выяснено <ref name="A Learned Representation for Artistic Style"/>, что иногда
 
нейронные сети, натренированные решать разные задачи из одного класса, имеют
 
схожие веса и достаточно лишь слегка поменять параметры сжатия и сдвига после
 
каждого слоя. Таким образом, добавив условную нормализацию, мы научимся решать
 
сразу несколько задач используя одну сеть.
 
 
===Описание метода===
 
 
Самая важная часть метода {{---}} ''выбрать'' для входа <tex>x</tex> параметры
 
<tex>\beta_c</tex> и <tex>\gamma_c</tex>. Возможные способы сделать это описаны
 
ниже. Единожды параметры выбраны, формула не отличается от приведённой в
 
параграфе c [[Batch-normalization#Описание метода | описанием метода пакетной нормализации]]:
 
 
<tex>y = \gamma_c \cdot \hat{x} + \beta_c \;\; (1)</tex>.
 
 
===Выбор параметров нормализации===
 
 
Есть несколько способов выбрать параметры. Самой простой из них — разделить
 
предметную область на <tex>C</tex> частей. Для каждого слоя надо добавить
 
соответствующие параметры <tex>\beta_c, \gamma_c \; , c \in 1..C</tex> и
 
настраивать их вместе с остальными параметрами модели. Когда мы тренируем на
 
данных из <tex>i</tex>-ой части, мы явно указываем, что в формуле <tex>(1)</tex>
 
<tex>c = i</tex>. Когда мы хотим осуществить предсказание, мы снова явно указываем
 
желаемый <tex>c</tex> и в вычислениях используются соответствующие параметры.
 
 
Есть другой способ: можно вместе с настройкой сети обучать алгоритм выбора
 
параметров <tex>PARAMS</tex> сжатия и сдвига по заданному входу: <tex>(\beta_c,
 
\gamma_c) = PARAMS(x)</tex>. К примеру, в работе [https://arxiv.org/pdf/1707.00683v3.pdf Modulating early visual processing by language]
 
в качестве <tex>PARAMS</tex> используется
 
[[Нейронные_сети, перцептрон#Классификация перцептронов | многослойный перцептрон по Румельхарту с одним скрытым слоем]].
 
Таким образом, характеристики <tex>x</tex> могут изменить выход целого слоя. Это
 
бывает полезно, если верна гипотеза, что структура входных векторов связана с
 
желаемым результатом работы.
 
 
===В применении к переносу стиля===
 
[[file:style-transfer-example.png|300px|thumb|Рисунок <tex>4</tex>. Перенесения стиля с картины Клода Моне "Рыбацкие лодки" (слева) на изображение человека (справа) <ref name="A Learned Representation for Artistic Style"/>.]]
 
 
Популярной задачей является отрисовка данного изображения в стиле какой-то заданной картины, как на Рисунке <tex>4</tex>. Эта задача называется [[Neural Style Transfer | "''перенос стиля''"]]. Одно из популярных и достаточно быстрых решений этой задачи использует простые нейронные сети [[Нейронные сети, перцептрон#Сети прямого распространения | прямого распространения]]. Это решение имеет недостаток: каждая сеть может переносить лишь один стиль. Если мы хотим научиться переносить <tex>N</tex> стилей, то надо обучать <tex>N</tex> различных сетей. Однако лишь небольшое количество параметров этих сетей отвечает за индивидуальные особенности стиля. Хотелось бы уметь переиспользовать остальные параметры.
 
 
====Добавление условности====
 
В статье [https://arxiv.org/pdf/1610.07629.pdf A Learned Representation for Artistic Style] был получен удивительный результат: для моделирования какого-то стиля, достаточно специализировать параметры сжатия и сдвига нормализации для каждого конкретного стиля. Таким образом, давайте для каждого изображения стиля <tex>s</tex> будем учитывать свои <tex>\gamma_c</tex> и <tex>\beta_c</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 выпуклой комбинации] существующих коэффициентов сжатия и сдвига.
 
 
===Когда использовать условную нормализацию?===
 
 
Во-первых, на условную нормализацию стоит обратить внимание, если вы
 
настраиваете много сетей, решающих похожие задачи. Возможно, в этом случае вы
 
можете использовать одну сеть с условными параметрами нормализации, зависящими
 
от конкретной задачи. Например, при переносе стилей вместо <tex>S</tex> сетей вы
 
настраиваете одну сеть с <tex>S</tex> наборами параметров нормализации.
 
 
Во-вторых, если вы подозреваете, что информация о структуре входных векторов
 
имеет значение для выхода. Например, имеет смысл "слить" лингвистическую
 
информацию и характеристики изображения для задачи ''ответа на визуальные вопросы''
 
(англ. Visual Question Answering, VQA).
 
 
Однако во всех случаях надо помнить, что полученные алгоритмы для разных задач
 
будут различаться лишь параметрами свёртки и сжатия. Иначе говоря, если ваши
 
задачи нельзя выразить
 
[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,%20%D0%BA%D0%BE%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F%20%D0%B8%20%D0%B2%D1%8B%D0%BF%D1%83%D0%BA%D0%BB%D0%B0%D1%8F%20%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|Рисунок <tex>5</tex>. Точность распознавания в зависимости от итерации обучения. Оранжевая кривая изображает результаты для модели с использованием пакетной нормализации, синяя кривая {{---}} без. Иллюстрация из [https://github.com/udacity/deep-learning/blob/master/batch-norm/Batch_Normalization_Lesson.ipynb статьи].]]
+
[[File:bn_exp_1.png|300px|thumb|Рисунок 3. Точность распознавания в зависимости от итерации обучения. Оранжевая кривая изображает результаты для модели с использованием пакетной нормализации, синяя кривая {{---}} без. Иллюстрация из [https://github.com/udacity/deep-learning/blob/master/batch-norm/Batch_Normalization_Lesson.ipynb статьи].]]
[[File:bn_exp_2.png|300px|thumb|Рисунок <tex>6</tex>. Точность распознавания в зависимости от итерации обучения c использованием сигмоиды в качетсве функции активации. Иллюстрация из [https://github.com/udacity/deep-learning/blob/master/batch-norm/Batch_Normalization_Lesson.ipynb статьи].]]
+
[[File:bn_exp_2.png|300px|thumb|Рисунок 4. Точность распознавания в зависимости от итерации обучения c использованием сигмоиды в качетсве функции активации. Иллюстрация из [https://github.com/udacity/deep-learning/blob/master/batch-norm/Batch_Normalization_Lesson.ipynb статьи].]]
  
Приведем пример демонстрирующий работу пакетной нормализации.
+
Приведем пример демонстрирующий работу пакетной нормализации.  
Рассмотрим задачу распознавания рукописных цифр на известном датасете MNIST <ref>[http://yann.lecun.com/exdb/mnist/ Датасет MNIST]</ref>.
+
Рассмотрим задачу распознавания рукописных цифр на известном датасете MNIST <ref>[http://yann.lecun.com/exdb/mnist/ Датасет MNIST]</ref>.  
Для решения задачи будет использоваться обычная нейронная сеть с <tex>3</tex> скрытыми полносвязными слоями по <tex>100</tex> узлов в каждом.
+
Для решения задачи будет использоваться обычная нейронная сеть с <tex>3</tex> скрытыми полносвязными слоями по <tex>100</tex> узлов в каждом.  
Функция активации {{---}} ReLU.
+
Функция активации {{---}} ReLU.  
Выходной слой содержит <tex>10</tex> узлов.
+
Выходной слой содержит <tex>10</tex> узлов.  
Размер пакета равен <tex>60</tex>.
+
Размер пакета равен <tex>60</tex>.  
Сравниваются две одинаковые модели, но в первой перед каждым скрытым слоем используется пакетная нормализация, а во второй {{---}} нет.
+
Сравниваются две одинаковые модели, но в первой перед каждым скрытым слоем используется пакетная нормализация, а во второй {{---}} нет.  
Темп обучения равен <tex>0.01</tex>.
+
Темп обучения равен <tex>0.01</tex>.  
Веса инициализированы значениями с малой дисперсией.
+
Веса инициализированы значениями с малой дисперсией.  
  
На Рисунке <tex>5</tex> изображены два графика, показывающие разницу между моделями.
+
На Рисунке 3 изображены два графика, показывающие разницу между моделями.  
Как видно, обе модели достигли высокой точности, но модель с использованием пакетной нормализации достигла точности более <tex>90\%</tex> быстрее, почти сразу, и достигла максимума, примерно, уже на <tex>10000</tex> итераций. Однако, модель без пакетной нормализации достигла скорости обучения примерно <tex>510</tex> пакетов в секунду, а модель с использованием пакетной нормализации {{---}} <tex>270</tex>.
+
Как видно, обе модели достигли высокой точности, но модель с использованием пакетной нормализации достигла точности более <tex>90\%</tex> быстрее, почти сразу, и достигла максимума, примерно, уже на <tex>10000</tex> итераций. Однако, модель без пакетной нормализации достигла скорости обучения примерно <tex>510</tex> пакетов в секунду, а модель с использованием пакетной нормализации {{---}} <tex>270</tex>.  
 
Однако, как можно видеть, пакетная нормализация позволяет выполнить меньшее количество итераций и, в итоге, сойтись за меньшее время.
 
Однако, как можно видеть, пакетная нормализация позволяет выполнить меньшее количество итераций и, в итоге, сойтись за меньшее время.
  
На Рисунке <tex>6</tex> изображен график, сравнивающий точно такие же модели, но с использованием сигмоиды в качестве функции активации.
+
На Рисунке 4 изображен график, сравнивающий точно такие же модели, но с использованием сигмоиды в качестве функции активации.  
Такая конфигурация моделей требует большего времени, чтобы начать обучение.
+
Такая конфигурация моделей требует большего времени, чтобы начать обучение.  
В итоге, модель обучается, но на это потребовалось более <tex>45000</tex> итераций, чтобы получить точность более <tex>80\%</tex>.
+
В итоге, модель обучается, но на это потребовалось более <tex>45000</tex> итераций, чтобы получить точность более <tex>80\%</tex>.  
 
При использовании пакетной нормализации получилось достичь точность более <tex>90\%</tex> примерно за <tex>1000</tex> итераций.
 
При использовании пакетной нормализации получилось достичь точность более <tex>90\%</tex> примерно за <tex>1000</tex> итераций.
  
Строка 284: Строка 188:
 
Существует несколько модификаций и вариаций метода пакетной нормализации:
 
Существует несколько модификаций и вариаций метода пакетной нормализации:
 
# Тим Койманс<ref>[https://arxiv.org/pdf/1603.09025.pdf Cooijmans T. {{---}} Recurrent batch normalization, 2016]</ref> в 2016 г. предложил способ применения пакетной нормализации к [[Рекуррентные нейронные сети|рекуррентным нейронным сетям]];
 
# Тим Койманс<ref>[https://arxiv.org/pdf/1603.09025.pdf Cooijmans T. {{---}} Recurrent batch normalization, 2016]</ref> в 2016 г. предложил способ применения пакетной нормализации к [[Рекуррентные нейронные сети|рекуррентным нейронным сетям]];
# Расширение метода пакетной нормализации было предложено Ликси Хуангом<ref>[https://arxiv.org/pdf/1804.08450.pdf Huang L. {{---}} Decorrelated Batch Normalization, 2018]</ref> в 2018 г. Метод получил название декоррелированная пакетная нормализация (англ. Decorrelated Batch Normalization). В данном методе кроме операций масштабирования и сдвига была предложено использование специальной функции затирания данных;
+
# Расширение метода пакетной нормализации было предложено Ликси Хуангом<ref>[https://arxiv.org/pdf/1804.08450.pdf Huang L. {{---}} Decorrelated Batch Normalization, 2018]</ref> в 2018 г. Метод получил название декоррелированная пакетная нормализация (англ. Decorrelated Batch Normalization). В данном методе кроме операций масштабирования и сдвига была предложено использование специальной функции затирания данных;  
 
# Джимми Лей Ба<ref>[https://arxiv.org/pdf/1607.06450.pdf Ba J. L., Kiros J. R., Hinton G. E. {{---}} Layer normalization, 2016]</ref> в 2016 г. предложил метод нормализации слоев (англ. Layer Normalization), который решает проблему выбора размера пакета;
 
# Джимми Лей Ба<ref>[https://arxiv.org/pdf/1607.06450.pdf Ba J. L., Kiros J. R., Hinton G. E. {{---}} Layer normalization, 2016]</ref> в 2016 г. предложил метод нормализации слоев (англ. Layer Normalization), который решает проблему выбора размера пакета;
 
# В работе Сергея Иоффе<ref>[https://arxiv.org/pdf/1702.03275.pdf Ioffe S. {{---}} Batch renormalization: Towards reducing minibatch dependence in batch-normalized models, 2017]</ref> в 2017 г. было представлено расширение метода пакетной нормализации: пакетная ренормализация (англ. Batch Renormalization). Данный метод улучшает пакетную нормализацию, когда размер пакетов мал и не состоит из независимых данных;
 
# В работе Сергея Иоффе<ref>[https://arxiv.org/pdf/1702.03275.pdf Ioffe S. {{---}} Batch renormalization: Towards reducing minibatch dependence in batch-normalized models, 2017]</ref> в 2017 г. было представлено расширение метода пакетной нормализации: пакетная ренормализация (англ. Batch Renormalization). Данный метод улучшает пакетную нормализацию, когда размер пакетов мал и не состоит из независимых данных;
Строка 304: Строка 208:
 
* [https://www.learnopencv.com/batch-normalization-in-deep-networks/ Batch Normalization in Deep Networks]
 
* [https://www.learnopencv.com/batch-normalization-in-deep-networks/ Batch Normalization in Deep Networks]
 
* [https://github.com/udacity/deep-learning/blob/master/batch-norm/Batch_Normalization_Lesson.ipynb Batch Normalization {{---}} Lesson]
 
* [https://github.com/udacity/deep-learning/blob/master/batch-norm/Batch_Normalization_Lesson.ipynb Batch Normalization {{---}} Lesson]
* [https://arxiv.org/pdf/1610.07629.pdf A Learned Representation for Artistic Style]
 
 
[[Категория: Машинное обучение]]
 
[[Категория: Машинное обучение]]
[[Категория: Глубокое обучение]]
 
[[Категория: Нейронные сети]]
 

Пожалуйста, учтите, что любой ваш вклад в проект «Викиконспекты» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Викиконспекты:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Чтобы изменить эту страницу, пожалуйста, ответьте на приведённый ниже вопрос (подробнее):

Отменить | Справка по редактированию (в новом окне)

Шаблон, используемый на этой странице: