Batch-normalization — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Источники информации)
Строка 1: Строка 1:
'''Нормализация батчей''' (англ. batch-normalization) {{---}} это метод, который позволяет повысить производительность и стабилизировать работу [[Нейронные сети, перцептрон | искусственных нейронных сетей]]<sup>[на 10.01.18 не создан]</sup>. Суть данного метода заключается в том, что некоторым слоям нейронной сети на вход подаются данные, предварительно обработанные и имеющие нулевое [[Математическое ожидание случайной величины|математическое ожидание]] и единичную [[Дисперсия случайной величины|дисперсию]]. Впервые данный метод был представлен в <ref>[https://arxiv.org/pdf/1502.03167.pdf Ioffe S., Szegedy C. {{---}} Batch normalization: Accelerating deep network training by reducing internal covariate shift, 2016]</ref>.
+
'''Пакетная нормализация''' (англ. batch-normalization) {{---}} это метод, который позволяет повысить производительность и стабилизировать работу [[Нейронные сети, перцептрон | искусственных нейронных сетей]]. Суть данного метода заключается в том, что некоторым слоям нейронной сети на вход подаются данные, предварительно обработанные и имеющие нулевое [[Математическое ожидание случайной величины|математическое ожидание]] и единичную [[Дисперсия случайной величины|дисперсию]]. Впервые данный метод был представлен в <ref>[https://arxiv.org/pdf/1502.03167.pdf Ioffe S., Szegedy C. {{---}} Batch normalization: Accelerating deep network training by reducing internal covariate shift, 2016]</ref>.
  
 
==Идея==
 
==Идея==
 
[[Файл:covariate-shift1.png|600px|thumb|Рисунок 1. Верхние две строки роз показывают первое подмножество данных, а нижние две строки показывают другое подмножество. Два подмножества имеют довольно различные распределения. На графиках показано распределение двух классов в пространстве объектов с использованием красных и зеленых точек. Синяя линия показывает границу между двумя классами. Иллюстрация из [https://www.learnopencv.com/batch-normalization-in-deep-networks/ статьи].]]
 
[[Файл:covariate-shift1.png|600px|thumb|Рисунок 1. Верхние две строки роз показывают первое подмножество данных, а нижние две строки показывают другое подмножество. Два подмножества имеют довольно различные распределения. На графиках показано распределение двух классов в пространстве объектов с использованием красных и зеленых точек. Синяя линия показывает границу между двумя классами. Иллюстрация из [https://www.learnopencv.com/batch-normalization-in-deep-networks/ статьи].]]
Нормализация входного слоя нейронной сети обычно выполняется путем масштабирования данных, подаваемых в функции активации. Например, когда есть признаки со значениями от <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). Пакетный (батч) [[Стохастический градиентный спуск|градиентный спуск]]<sup>[на 10.01.18 не создано]</sup> {{---}} реализация градиентного спуска, когда на каждой итерации обучающая выборка просматривается целиком, и только после этого изменяются веса модели. Также существует "золотая середина" между стохастическим градиентном спуском и пакетным градиентном спуском {{---}} когда просматривается только некоторое подмножество обучающей выборки фиксированного размера (англ. batch-size). В таком случае такие подмножества принято называть мини-батчем (англ. mini-batch). Здесь и далее, мини-батчи будем также называть батчем.
+
Предварительно, напомним, что такое '''пакет''' (англ. batch). Пакетный (батч) [[Стохастический градиентный спуск|градиентный спуск]]<sup>[на 10.01.18 не создано]</sup> {{---}} реализация градиентного спуска, когда на каждой итерации обучающая выборка просматривается целиком, и только после этого изменяются веса модели. Также существует "золотая середина" между стохастическим градиентном спуском и пакетным градиентном спуском {{---}} когда просматривается только некоторое подмножество обучающей выборки фиксированного размера (англ. batch-size). В таком случае такие подмножества принято называть мини-пакетом (англ. mini-batch). Здесь и далее, мини-пакеты будем также называть пакетом.
  
Нормализация батчей уменьшает величину, на которую смещаются значения узлов в скрытых слоях (т.н. '''смещение [[Ковариация случайных величин|ковариации]]''' (англ. covariance shift)).  
+
Пакетная нормализация уменьшает величину, на которую смещаются значения узлов в скрытых слоях (т.н. '''смещение [[Ковариация случайных величин|ковариации]]''' (англ. covariance shift)).  
 
Проиллюстрируем смещение ковариации примером.  
 
Проиллюстрируем смещение ковариации примером.  
 
Пусть есть [[Глубокое обучение|глубокая нейронная сеть]], которая обучена определять находится ли на изображении роза.
 
Пусть есть [[Глубокое обучение|глубокая нейронная сеть]], которая обучена определять находится ли на изображении роза.
Строка 14: Строка 14:
 
Так как обучающая и тестовая выборки содержат изображения роз, но немного отличаются.  
 
Так как обучающая и тестовая выборки содержат изображения роз, но немного отличаются.  
 
Другими словами, если модель обучена отображению из множества <tex>X</tex> в множество <tex>Y</tex> и если [[wikipedia:ru:Распределение_вероятностей|распределение]] элементов в <tex>X</tex> изменяется, то появляется необходимость обучить модель заново, чтобы "выровнять" распределение элементов в <tex>X</tex> и <tex>Y</tex>.  
 
Другими словами, если модель обучена отображению из множества <tex>X</tex> в множество <tex>Y</tex> и если [[wikipedia:ru:Распределение_вероятностей|распределение]] элементов в <tex>X</tex> изменяется, то появляется необходимость обучить модель заново, чтобы "выровнять" распределение элементов в <tex>X</tex> и <tex>Y</tex>.  
Когда батчи содержат изображения, равномерно-распределенные на всем множестве, то смещение ковариации незначительно.  
+
Когда пакеты содержат изображения, равномерно-распределенные на всем множестве, то смещение ковариации незначительно.  
Однако, когда батчи выбираются только из одного из двух подмножеств (в данном случае, красные розы и цветные розы), то смещение ковариации возрастает.  
+
Однако, когда пакеты выбираются только из одного из двух подмножеств (в данном случае, красные розы и цветные розы), то смещение ковариации возрастает.  
 
Это довольно сильно замедляет процесс обучения модели. На Рисунке 1 изображена разница в распределениях.
 
Это довольно сильно замедляет процесс обучения модели. На Рисунке 1 изображена разница в распределениях.
  
Простой способ решить проблему смещения ковариации для входного слоя {{---}} это случайным образом перемешать данные перед созданием батчей.  
+
Простой способ решить проблему смещения ковариации для входного слоя {{---}} это случайным образом перемешать данные перед созданием пакетов.  
 
Но для скрытых слоев нейронной сети такой метод не подходит, так как распределение входных данных для каждого узла скрытых слоев изменяется каждый раз, когда происходит обновление параметров в предыдущем слое.  
 
Но для скрытых слоев нейронной сети такой метод не подходит, так как распределение входных данных для каждого узла скрытых слоев изменяется каждый раз, когда происходит обновление параметров в предыдущем слое.  
 
Эта проблема называется '''внутренним смещением ковариации''' (англ. internal covariate shift).  
 
Эта проблема называется '''внутренним смещением ковариации''' (англ. internal covariate shift).  
 
Для решения данной проблемы необходимо использовать маленький коэффициент скорости обучения и методы регуляризации при обучении модели.  
 
Для решения данной проблемы необходимо использовать маленький коэффициент скорости обучения и методы регуляризации при обучении модели.  
Другим способом устранения внутреннего смещения ковариации является метод нормализации батчей.
+
Другим способом устранения внутреннего смещения ковариации является метод пакетной нормализации.
  
Кроме того, использование нормализации батчей обладает еще несколькими дополнительными полезными свойствами:
+
Кроме того, использование пакетной нормализации обладает еще несколькими дополнительными полезными свойствами:
 
* достигается более быстрая сходимость моделей, несмотря на выполнение дополнительных вычислений;
 
* достигается более быстрая сходимость моделей, несмотря на выполнение дополнительных вычислений;
* нормализация батчей позволяет каждому слою сети обучатся более независимо от других слоев;
+
* пакетная нормализация позволяет каждому слою сети обучатся более независимо от других слоев;
* становится возможным использование более высокого коэффициента скорости обучения, так как нормализация батчей гарантирует, что выходы узлов нейронной сети не будут иметь слишком больших или малых значений;
+
* становится возможным использование более высокого коэффициента скорости обучения, так как пакетная нормализация гарантирует, что выходы узлов нейронной сети не будут иметь слишком больших или малых значений;
* нормализация батчей в каком-то смысле также является механизмом [[wikipedia:ru:Регуляризация_(математика)|регуляризации]]: данный метод привносит в выходы узлов скрытых слоев некоторый шум, аналогично методу [[Практики реализации нейронных сетей#Dropout|dropout]];
+
* пакетная нормализация в каком-то смысле также является механизмом [[wikipedia:ru:Регуляризация_(математика)|регуляризации]]: данный метод привносит в выходы узлов скрытых слоев некоторый шум, аналогично методу [[Практики реализации нейронных сетей#Dropout|dropout]];
 
* модели становятся менее чувствительны к начальной инициализации весов.
 
* модели становятся менее чувствительны к начальной инициализации весов.
  
 
==Описание метода==
 
==Описание метода==
Опишем устройство метода нормализации батчей. Пусть на вход некоторому слою нейронной сети поступает вектор размерности <tex>d</tex>: <tex>x = (x^{(1)}, \ldots, x^{(d)})</tex>. Нормализуем данный вектор по каждой размерности <tex>k</tex>:
+
Опишем устройство метода пакетной нормализации. Пусть на вход некоторому слою нейронной сети поступает вектор размерности <tex>d</tex>: <tex>x = (x^{(1)}, \ldots, x^{(d)})</tex>. Нормализуем данный вектор по каждой размерности <tex>k</tex>:
  
 
<tex>\hat{x}^{(k)} = \displaystyle \frac{x^{(k)} - E(x^{(k)})}{\sqrt{D(x^{(k)})}}</tex>,
 
<tex>\hat{x}^{(k)} = \displaystyle \frac{x^{(k)} - E(x^{(k)})}{\sqrt{D(x^{(k)})}}</tex>,
Строка 42: Строка 42:
 
Данные параметры настраиваются в процессе обучения вместе с остальными [[Настройка гиперпараметров|гиперпараметрами]]<sup>[на 10.01.18 не создан]</sup> модели.
 
Данные параметры настраиваются в процессе обучения вместе с остальными [[Настройка гиперпараметров|гиперпараметрами]]<sup>[на 10.01.18 не создан]</sup> модели.
  
Пусть обучение модели производится с помощью батчей <tex>B</tex> размера <tex>m</tex>: <tex>B = \{x_{1},\ldots, x_{m}\}</tex>. Здесь нормализация применяется к каждой компоненте входа с номером <tex>k</tex> отдельно, поэтому в <tex>x^{(k)}</tex> индекс опускается для ясности изложения. Пусть были получены нормализованные значения батча <tex>\hat{x}_{1},\ldots, \hat{x}_{m}</tex>. После применения операций сжатия и сдвига были получены <tex>y_{1},\ldots, y_{m}</tex>. Обозначим данную функцию нормализации батчей следующим образом:
+
Пусть обучение модели производится с помощью пакетов <tex>B</tex> размера <tex>m</tex>: <tex>B = \{x_{1},\ldots, x_{m}\}</tex>. Здесь нормализация применяется к каждой компоненте входа с номером <tex>k</tex> отдельно, поэтому в <tex>x^{(k)}</tex> индекс опускается для ясности изложения. Пусть были получены нормализованные значения пакета <tex>\hat{x}_{1},\ldots, \hat{x}_{m}</tex>. После применения операций сжатия и сдвига были получены <tex>y_{1},\ldots, y_{m}</tex>. Обозначим данную функцию пакетной нормализации следующим образом:
  
 
<tex>BN_{\gamma, \beta}: \{x_{1},\ldots, x_{m}\} \rightarrow \{y_{1},\ldots, y_{m}\}</tex>
 
<tex>BN_{\gamma, \beta}: \{x_{1},\ldots, x_{m}\} \rightarrow \{y_{1},\ldots, y_{m}\}</tex>
  
Тогда алгоритм нормализации батчей можно представить так:
+
Тогда алгоритм пакетной нормализации можно представить так:
  
  '''Вход''': значения <tex>x</tex> из батча <tex>B = \{x_{1},\ldots, x_{m}\}</tex>; настраиваемые параметры <tex>\gamma, \beta</tex>; константа <tex>\epsilon</tex> для вычислительной устойчивости.
+
  '''Вход''': значения <tex>x</tex> из пакета <tex>B = \{x_{1},\ldots, x_{m}\}</tex>; настраиваемые параметры <tex>\gamma, \beta</tex>; константа <tex>\epsilon</tex> для вычислительной устойчивости.
 
  '''Выход''': <tex>\{y_{i} = BN_{\gamma, \beta}(x_{i})\}</tex>
 
  '''Выход''': <tex>\{y_{i} = BN_{\gamma, \beta}(x_{i})\}</tex>
  <tex>\mu_{B} = \displaystyle \frac{1}{m} \sum_{i=1}^{m} x_{i}</tex> <font color="green">// математическое ожидание батча</font>
+
  <tex>\mu_{B} = \displaystyle \frac{1}{m} \sum_{i=1}^{m} x_{i}</tex> <font color="green">// математическое ожидание пакета</font>
  <tex>\sigma_{B}^{2} = \displaystyle \frac{1}{m} \sum_{i=1}^{m} (x_{i} - \mu_{B})^{2}</tex> <font color="green">// дисперсия батча</font>
+
  <tex>\sigma_{B}^{2} = \displaystyle \frac{1}{m} \sum_{i=1}^{m} (x_{i} - \mu_{B})^{2}</tex> <font color="green">// дисперсия пакета</font>
 
  <tex>\hat{x}_{i} = \displaystyle \frac{x_{i} - \mu_{B}}{\sqrt{\sigma_{B}^{2} + \epsilon}}</tex> <font color="green">// нормализация</font>
 
  <tex>\hat{x}_{i} = \displaystyle \frac{x_{i} - \mu_{B}}{\sqrt{\sigma_{B}^{2} + \epsilon}}</tex> <font color="green">// нормализация</font>
 
  <tex>y_{i} = \gamma \hat{x}_{i} + \beta \equiv BN_{\gamma, \beta}(x_{i}) </tex> <font color="green">// сжатие и сдвиг</font>
 
  <tex>y_{i} = \gamma \hat{x}_{i} + \beta \equiv BN_{\gamma, \beta}(x_{i}) </tex> <font color="green">// сжатие и сдвиг</font>
  
 
Заметим, что если <tex>\beta=\mu_{B}</tex> и <tex>\gamma=\sqrt{\sigma_{B}^{2} + \epsilon}</tex>, то <tex>y_{i}</tex> равен <tex>x_{i}</tex>, то есть <tex>BN_{\gamma, \beta}(\cdot)</tex> является тождественным отображением.
 
Заметим, что если <tex>\beta=\mu_{B}</tex> и <tex>\gamma=\sqrt{\sigma_{B}^{2} + \epsilon}</tex>, то <tex>y_{i}</tex> равен <tex>x_{i}</tex>, то есть <tex>BN_{\gamma, \beta}(\cdot)</tex> является тождественным отображением.
Таким образом, использование нормализации батчей не может привести к снижению точности, поскольку оптимизатор просто может использовать нормализацию как тождественное отображение.
+
Таким образом, использование пакетной нормализации не может привести к снижению точности, поскольку оптимизатор просто может использовать нормализацию как тождественное отображение.
  
==Обучение нейронных сетей с нормализацией батчей==
+
==Обучение нейронных сетей с пакетной нормализацией==
[[Файл: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 статьи].]]
+
[[Файл: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>. В случае использования метода пакетной нормализации градиент вычисляется следующим образом:
  
 
<tex>\displaystyle \frac{\partial l}{\partial \hat{x}_{i}} = \frac{\partial l}{\partial y_{i}} \cdot \gamma</tex>
 
<tex>\displaystyle \frac{\partial l}{\partial \hat{x}_{i}} = \frac{\partial l}{\partial y_{i}} \cdot \gamma</tex>
Строка 75: Строка 75:
 
<tex>\displaystyle \frac{\partial l}{\partial \beta} = \sum_{i=1}^{m}\frac{\partial l}{\partial y_{i}}</tex>
 
<tex>\displaystyle \frac{\partial l}{\partial \beta} = \sum_{i=1}^{m}\frac{\partial l}{\partial y_{i}}</tex>
  
==Нормализация батчей в [[Сверточные нейронные сети | свёрточных сетях]]==
+
==Пакетная нормализация в [[Сверточные нейронные сети | свёрточных сетях]]==
Нормализация батчей может быть применена к любой функции активации. Рассмотрим подробнее случай аффинного преобразования с некоторой нелинейной функцией:
+
Пакетная нормализация может быть применена к любой функции активации. Рассмотрим подробнее случай аффинного преобразования с некоторой нелинейной функцией:
  
 
<tex>z = g(Wu + b)</tex>,
 
<tex>z = g(Wu + b)</tex>,
  
где <tex>W</tex> и <tex>b</tex> {{---}} настраиваемые параметры модели, а <tex>g(\cdot)</tex> {{---}} некоторая нелинейная функция, например [[Практики реализации нейронных сетей#Sigmoid function|cигмоида]] или [[Практики реализации нейронных сетей#Rectified Linear Units (ReLU)|ReLU]]. Данной функцией можно описать как обычные, так и сверточные слои нейронных сетей. Нормализация батчей применяется сразу перед функцией <tex>g(\cdot)</tex> к <tex>x = Wu + b</tex>. Параметр <tex>b</tex> может быть опущен, так как в дальнейших вычислениях его роль будет играть параметр <tex>\beta</tex>. Поэтому <tex>z = g(Wu + b)</tex> может быть записано так:
+
где <tex>W</tex> и <tex>b</tex> {{---}} настраиваемые параметры модели, а <tex>g(\cdot)</tex> {{---}} некоторая нелинейная функция, например [[Практики реализации нейронных сетей#Sigmoid function|cигмоида]] или [[Практики реализации нейронных сетей#Rectified Linear Units (ReLU)|ReLU]]. Данной функцией можно описать как обычные, так и сверточные слои нейронных сетей. Пакетная нормализация применяется сразу перед функцией <tex>g(\cdot)</tex> к <tex>x = Wu + b</tex>. Параметр <tex>b</tex> может быть опущен, так как в дальнейших вычислениях его роль будет играть параметр <tex>\beta</tex>. Поэтому <tex>z = g(Wu + b)</tex> может быть записано так:
  
 
<tex>z = g(BN(Wu))</tex>,
 
<tex>z = g(BN(Wu))</tex>,
Строка 86: Строка 86:
 
где <tex>BN</tex> применяется отдельно к каждой размерности <tex>x=Wu</tex> с отдельной парой параметров <tex>\gamma^{(k)}</tex> и <tex>\beta^{(k)}</tex> для каждой размерности.
 
где <tex>BN</tex> применяется отдельно к каждой размерности <tex>x=Wu</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> настраиваются для каждой карты признаков отдельно.
+
В случае свёрточных сетей, дополнительно необходима нормализация, чтобы удовлетворить свойство свёрточных сетей, что различные элементы в разных местах одной карты признаков (образ операции свёртки, англ. 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:bn_exp_1.png|300px|thumb|Рисунок 3. Точность распознавания в зависимости от итерации обучения. Оранжевая кривая изображает результаты для модели с использованием нормализации батчей, синяя кривая {{---}} без. Иллюстрация из [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|Рисунок 4. Точность распознавания в зависимости от итерации обучения 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>.  
 
Веса инициализированы значениями с малой дисперсией.  
 
Веса инициализированы значениями с малой дисперсией.  
  
 
На Рисунке 3 изображены два графика, показывающие разницу между моделями.  
 
На Рисунке 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>.  
Однако, как можно видеть, нормализация батчей позволяет выполнить меньшее количество итераций и, в итоге, сойтись за меньшее время.
+
Однако, как можно видеть, пакетная нормализация позволяет выполнить меньшее количество итераций и, в итоге, сойтись за меньшее время.
  
 
На Рисунке 4 изображен график, сравнивающий точно такие же модели, но с использованием сигмоиды в качестве функции активации.  
 
На Рисунке 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> итераций.
  
 
==Реализации==
 
==Реализации==
Механизм нормализации батчей реализован практически во всех современных инструментариях для машинного обучения, таких как: TensorFlow <ref>[https://www.tensorflow.org/api_docs/python/tf/layers/batch_normalization TensorFlow]</ref>, Keras <ref>[https://keras.io/layers/normalization/ Keras]</ref>, CNTK <ref>[https://docs.microsoft.com/en-us/cognitive-toolkit/BatchNormalization CNTK]</ref>, Theano <ref>[http://deeplearning.net/software/theano/library/tensor/nnet/bn.html Theano]</ref>, PyTorch <ref>[https://pytorch.org/docs/stable/_modules/torch/nn/modules/batchnorm.html PyTorch]</ref> и т.д.
+
Механизм пакетной нормализации реализован практически во всех современных инструментариях для машинного обучения, таких как: TensorFlow <ref>[https://www.tensorflow.org/api_docs/python/tf/layers/batch_normalization TensorFlow]</ref>, Keras <ref>[https://keras.io/layers/normalization/ Keras]</ref>, CNTK <ref>[https://docs.microsoft.com/en-us/cognitive-toolkit/BatchNormalization CNTK]</ref>, Theano <ref>[http://deeplearning.net/software/theano/library/tensor/nnet/bn.html Theano]</ref>, PyTorch <ref>[https://pytorch.org/docs/stable/_modules/torch/nn/modules/batchnorm.html PyTorch]</ref> и т.д.
  
Приведем пример<ref>[https://towardsdatascience.com/batch-normalization-theory-and-how-to-use-it-with-tensorflow-1892ca0173ad Batch normalization: theory and how to use it with Tensorflow]</ref> применения нормализации батчей с использованием библиотеки TensorFlow на языке программирования Python <ref>[https://www.python.org/ Язык программирования Python]</ref>:
+
Приведем пример<ref>[https://towardsdatascience.com/batch-normalization-theory-and-how-to-use-it-with-tensorflow-1892ca0173ad Batch normalization: theory and how to use it with Tensorflow]</ref> применения пакетной нормализации с использованием библиотеки TensorFlow на языке программирования Python <ref>[https://www.python.org/ Язык программирования Python]</ref>:
  
 
   import tensorflow as tf
 
   import tensorflow as tf
Строка 127: Строка 127:
  
 
==Модификации==
 
==Модификации==
Существует несколько модификаций и вариаций метода нормализации батчей:
+
Существует несколько модификаций и вариаций метода пакетной нормализации:
# Тим Койманс<ref>[https://arxiv.org/pdf/1603.09025.pdf Cooijmans T. {{---}} Recurrent batch normalization, 2016]</ref> в 2016 г. предложил способ применения нормализации батчей к [[Рекуррентные нейронные сети|рекуррентным нейронным сетям]]<sup>[на 10.01.18 не создан]</sup>.
+
# Тим Койманс<ref>[https://arxiv.org/pdf/1603.09025.pdf Cooijmans T. {{---}} Recurrent batch normalization, 2016]</ref> в 2016 г. предложил способ применения пакетной нормализации к [[Рекуррентные нейронные сети|рекуррентным нейронным сетям]]<sup>[на 10.01.18 не создан]</sup>.
# Расширение метода нормализации батчей было предложено Ликси Хуангом<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). Данный метод улучшает пакетную нормализацию, когда размер пакетов мал и не состоит из независимых данных.
# Метод потоковой нормализации (англ. Streaming Normalization) был предложен Кифэном Ляо<ref>[https://arxiv.org/pdf/1610.06160.pdf Liao Q., Kawaguchi K., Poggio T. {{---}} Streaming normalization: Towards simpler and more biologically-plausible normalizations for online and recurrent learning, 2016]</ref> в 2016 г. Данный метод убирает два ограничения нормализации батчей: использование при [[wikipedia:ru:Онлайновое_обучение_машин|online-обучении]] и использование в рекуррентных нейронных сетях.
+
# Метод потоковой нормализации (англ. Streaming Normalization) был предложен Кифэном Ляо<ref>[https://arxiv.org/pdf/1610.06160.pdf Liao Q., Kawaguchi K., Poggio T. {{---}} Streaming normalization: Towards simpler and more biologically-plausible normalizations for online and recurrent learning, 2016]</ref> в 2016 г. Данный метод убирает два ограничения пакетной нормализации: использование при [[wikipedia:ru:Онлайновое_обучение_машин|online-обучении]] и использование в рекуррентных нейронных сетях.
  
 
==См. также==
 
==См. также==

Версия 09:07, 18 января 2019

Пакетная нормализация (англ. batch-normalization) — это метод, который позволяет повысить производительность и стабилизировать работу искусственных нейронных сетей. Суть данного метода заключается в том, что некоторым слоям нейронной сети на вход подаются данные, предварительно обработанные и имеющие нулевое математическое ожидание и единичную дисперсию. Впервые данный метод был представлен в [1].

Идея

Рисунок 1. Верхние две строки роз показывают первое подмножество данных, а нижние две строки показывают другое подмножество. Два подмножества имеют довольно различные распределения. На графиках показано распределение двух классов в пространстве объектов с использованием красных и зеленых точек. Синяя линия показывает границу между двумя классами. Иллюстрация из статьи.

Нормализация входного слоя нейронной сети обычно выполняется путем масштабирования данных, подаваемых в функции активации. Например, когда есть признаки со значениями от [math]0[/math] до [math]1[/math] и некоторые признаки со значениями от [math]1[/math] до [math]1000[/math], то их необходимо нормализовать, чтобы ускорить обучение. Нормализацию данных можно выполнить и в скрытых слоях нейронных сетей, что и делает метод пакетной нормализации.

Предварительно, напомним, что такое пакет (англ. batch). Пакетный (батч) градиентный спуск[на 10.01.18 не создано] — реализация градиентного спуска, когда на каждой итерации обучающая выборка просматривается целиком, и только после этого изменяются веса модели. Также существует "золотая середина" между стохастическим градиентном спуском и пакетным градиентном спуском — когда просматривается только некоторое подмножество обучающей выборки фиксированного размера (англ. batch-size). В таком случае такие подмножества принято называть мини-пакетом (англ. mini-batch). Здесь и далее, мини-пакеты будем также называть пакетом.

Пакетная нормализация уменьшает величину, на которую смещаются значения узлов в скрытых слоях (т.н. смещение ковариации (англ. covariance shift)). Проиллюстрируем смещение ковариации примером. Пусть есть глубокая нейронная сеть, которая обучена определять находится ли на изображении роза. И нейронная сеть была обучена на изображениях только красных роз. Теперь, если попытаться использовать обученную модель для обнаружения цветных роз, то, очевидно, результат будет неудовлетворительный. Так как обучающая и тестовая выборки содержат изображения роз, но немного отличаются. Другими словами, если модель обучена отображению из множества [math]X[/math] в множество [math]Y[/math] и если распределение элементов в [math]X[/math] изменяется, то появляется необходимость обучить модель заново, чтобы "выровнять" распределение элементов в [math]X[/math] и [math]Y[/math]. Когда пакеты содержат изображения, равномерно-распределенные на всем множестве, то смещение ковариации незначительно. Однако, когда пакеты выбираются только из одного из двух подмножеств (в данном случае, красные розы и цветные розы), то смещение ковариации возрастает. Это довольно сильно замедляет процесс обучения модели. На Рисунке 1 изображена разница в распределениях.

Простой способ решить проблему смещения ковариации для входного слоя — это случайным образом перемешать данные перед созданием пакетов. Но для скрытых слоев нейронной сети такой метод не подходит, так как распределение входных данных для каждого узла скрытых слоев изменяется каждый раз, когда происходит обновление параметров в предыдущем слое. Эта проблема называется внутренним смещением ковариации (англ. internal covariate shift). Для решения данной проблемы необходимо использовать маленький коэффициент скорости обучения и методы регуляризации при обучении модели. Другим способом устранения внутреннего смещения ковариации является метод пакетной нормализации.

Кроме того, использование пакетной нормализации обладает еще несколькими дополнительными полезными свойствами:

  • достигается более быстрая сходимость моделей, несмотря на выполнение дополнительных вычислений;
  • пакетная нормализация позволяет каждому слою сети обучатся более независимо от других слоев;
  • становится возможным использование более высокого коэффициента скорости обучения, так как пакетная нормализация гарантирует, что выходы узлов нейронной сети не будут иметь слишком больших или малых значений;
  • пакетная нормализация в каком-то смысле также является механизмом регуляризации: данный метод привносит в выходы узлов скрытых слоев некоторый шум, аналогично методу dropout;
  • модели становятся менее чувствительны к начальной инициализации весов.

Описание метода

Опишем устройство метода пакетной нормализации. Пусть на вход некоторому слою нейронной сети поступает вектор размерности [math]d[/math]: [math]x = (x^{(1)}, \ldots, x^{(d)})[/math]. Нормализуем данный вектор по каждой размерности [math]k[/math]:

[math]\hat{x}^{(k)} = \displaystyle \frac{x^{(k)} - E(x^{(k)})}{\sqrt{D(x^{(k)})}}[/math],

где математическое ожидание и дисперсия считаются по всей обучающей выборке. Такая нормализация входа слоя нейронной сети может изменить представление данных в слое. Чтобы избежать данной проблемы, вводятся два параметра сжатия и сдвига нормализованной величины для каждого [math]x_{k}[/math]: [math]\gamma_{k}[/math], [math]\beta_{k}[/math] — которые действуют следующим образом:

[math]y^{(k)} = \gamma^{(k)} \hat{x}^{(k)} + \beta^{(k)}[/math].

Данные параметры настраиваются в процессе обучения вместе с остальными гиперпараметрами[на 10.01.18 не создан] модели.

Пусть обучение модели производится с помощью пакетов [math]B[/math] размера [math]m[/math]: [math]B = \{x_{1},\ldots, x_{m}\}[/math]. Здесь нормализация применяется к каждой компоненте входа с номером [math]k[/math] отдельно, поэтому в [math]x^{(k)}[/math] индекс опускается для ясности изложения. Пусть были получены нормализованные значения пакета [math]\hat{x}_{1},\ldots, \hat{x}_{m}[/math]. После применения операций сжатия и сдвига были получены [math]y_{1},\ldots, y_{m}[/math]. Обозначим данную функцию пакетной нормализации следующим образом:

[math]BN_{\gamma, \beta}: \{x_{1},\ldots, x_{m}\} \rightarrow \{y_{1},\ldots, y_{m}\}[/math]

Тогда алгоритм пакетной нормализации можно представить так:

Вход: значения [math]x[/math] из пакета [math]B = \{x_{1},\ldots, x_{m}\}[/math]; настраиваемые параметры [math]\gamma, \beta[/math]; константа [math]\epsilon[/math] для вычислительной устойчивости.
Выход: [math]\{y_{i} = BN_{\gamma, \beta}(x_{i})\}[/math]
[math]\mu_{B} = \displaystyle \frac{1}{m} \sum_{i=1}^{m} x_{i}[/math] // математическое ожидание пакета
[math]\sigma_{B}^{2} = \displaystyle \frac{1}{m} \sum_{i=1}^{m} (x_{i} - \mu_{B})^{2}[/math] // дисперсия пакета
[math]\hat{x}_{i} = \displaystyle \frac{x_{i} - \mu_{B}}{\sqrt{\sigma_{B}^{2} + \epsilon}}[/math] // нормализация
[math]y_{i} = \gamma \hat{x}_{i} + \beta \equiv BN_{\gamma, \beta}(x_{i}) [/math] // сжатие и сдвиг

Заметим, что если [math]\beta=\mu_{B}[/math] и [math]\gamma=\sqrt{\sigma_{B}^{2} + \epsilon}[/math], то [math]y_{i}[/math] равен [math]x_{i}[/math], то есть [math]BN_{\gamma, \beta}(\cdot)[/math] является тождественным отображением. Таким образом, использование пакетной нормализации не может привести к снижению точности, поскольку оптимизатор просто может использовать нормализацию как тождественное отображение.

Обучение нейронных сетей с пакетной нормализацией

Рисунок 2. Граф вычислений слоя пакетной нормализации алгоритмом обратного распространения ошибки. Слева-направо черными стрелками показана работа алгоритма в прямом направлении. А справа-налево красными стрелками — в обратном направлении, где вычисляется градиент функции потерь. Здесь [math]N=m[/math] и [math]D=d[/math]. Иллюстрация из статьи.

Для обучения нейронных сетей необходимо вычислять градиент функции потерь [math]l[/math]. В случае использования метода пакетной нормализации градиент вычисляется следующим образом:

[math]\displaystyle \frac{\partial l}{\partial \hat{x}_{i}} = \frac{\partial l}{\partial y_{i}} \cdot \gamma[/math]

[math]\displaystyle \frac{\partial l}{\partial \sigma_{B}^{2}} = \sum_{i=1}^{m}\frac{\partial l}{\partial \hat{x}_{i}} \cdot (x_{i} - \mu_{B}) \cdot \frac{-1}{2}(\sigma_{B}^{2} + \epsilon)^{-3/2}[/math]

[math]\displaystyle \frac{\partial l}{\partial \mu_{B}} = \left(\sum_{i=1}^{m}\frac{\partial l}{\partial \hat{x}_{i}} \cdot \frac{-1}{\sqrt{\sigma_{B}^{2} + \epsilon}}\right) + \frac{\partial l}{\partial \sigma_{B}^{2}} \cdot \frac{\sum_{i=1}^{m}-2(x_{i}-\mu_{B})}{m}[/math]

[math]\displaystyle \frac{\partial l}{\partial x_{i}} = \frac{\partial l}{\partial \hat{x}_{i}} \cdot \frac{1}{\sqrt{\sigma_{B}^{2} + \epsilon}} + \frac{\partial l}{\partial \sigma_{B}^{2}} \cdot \frac{2(x_{i}-\mu_{B})}{m} + \frac{\partial l}{\partial \mu_{B}} \cdot \frac{1}{m}[/math]

[math]\displaystyle \frac{\partial l}{\partial \gamma} = \sum_{i=1}^{m}\frac{\partial l}{\partial y_{i}} \cdot \hat{x}_{i}[/math]

[math]\displaystyle \frac{\partial l}{\partial \beta} = \sum_{i=1}^{m}\frac{\partial l}{\partial y_{i}}[/math]

Пакетная нормализация в свёрточных сетях

Пакетная нормализация может быть применена к любой функции активации. Рассмотрим подробнее случай аффинного преобразования с некоторой нелинейной функцией:

[math]z = g(Wu + b)[/math],

где [math]W[/math] и [math]b[/math] — настраиваемые параметры модели, а [math]g(\cdot)[/math] — некоторая нелинейная функция, например cигмоида или ReLU. Данной функцией можно описать как обычные, так и сверточные слои нейронных сетей. Пакетная нормализация применяется сразу перед функцией [math]g(\cdot)[/math] к [math]x = Wu + b[/math]. Параметр [math]b[/math] может быть опущен, так как в дальнейших вычислениях его роль будет играть параметр [math]\beta[/math]. Поэтому [math]z = g(Wu + b)[/math] может быть записано так:

[math]z = g(BN(Wu))[/math],

где [math]BN[/math] применяется отдельно к каждой размерности [math]x=Wu[/math] с отдельной парой параметров [math]\gamma^{(k)}[/math] и [math]\beta^{(k)}[/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^{(k)}[/math] и [math]\beta^{(k)}[/math] настраиваются для каждой карты признаков отдельно.

Пример

Рисунок 3. Точность распознавания в зависимости от итерации обучения. Оранжевая кривая изображает результаты для модели с использованием пакетной нормализации, синяя кривая — без. Иллюстрация из статьи.
Рисунок 4. Точность распознавания в зависимости от итерации обучения c использованием сигмоиды в качетсве функции активации. Иллюстрация из статьи.

Приведем пример демонстрирующий работу пакетной нормализации. Рассмотрим задачу распознавания рукописных цифр на известном датасете MNIST [2]. Для решения задачи будет использоваться обычная нейронная сеть с [math]3[/math] скрытыми полносвязными слоями по [math]100[/math] узлов в каждом. Функция активации — ReLU. Выходной слой содержит [math]10[/math] узлов. Размер пакета равен [math]60[/math]. Сравниваются две одинаковые модели, но в первой перед каждым скрытым слоем используется пакетная нормализация, а во второй — нет. Коэффициент скорости обучения равен [math]0.01[/math]. Веса инициализированы значениями с малой дисперсией.

На Рисунке 3 изображены два графика, показывающие разницу между моделями. Как видно, обе модели достигли высокой точности, но модель с использованием пакетной нормализации достигла точности более [math]90\%[/math] быстрее, почти сразу, и достигла максимума, примерно, уже на [math]10000[/math] итераций. Однако, модель без пакетной нормализации достигла скорости обучения примерно [math]510[/math] пакетов в секунду, а модель с использованием пакетной нормализации — [math]270[/math]. Однако, как можно видеть, пакетная нормализация позволяет выполнить меньшее количество итераций и, в итоге, сойтись за меньшее время.

На Рисунке 4 изображен график, сравнивающий точно такие же модели, но с использованием сигмоиды в качестве функции активации. Такая конфигурация моделей требует большего времени, чтобы начать обучение. В итоге, модель обучается, но на это потребовалось более [math]45000[/math] итераций, чтобы получить точность более [math]80\%[/math]. При использовании пакетной нормализации получилось достичь точность более [math]90\%[/math] примерно за [math]1000[/math] итераций.

Реализации

Механизм пакетной нормализации реализован практически во всех современных инструментариях для машинного обучения, таких как: TensorFlow [3], Keras [4], CNTK [5], Theano [6], PyTorch [7] и т.д.

Приведем пример[8] применения пакетной нормализации с использованием библиотеки TensorFlow на языке программирования Python [9]:

 import tensorflow as tf
 # ...
 is_train = tf.placeholder(tf.bool, name="is_train");
 # ...
 x_norm = tf.layers.batch_normalization(x, training=is_train)
 # ...
 update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
 with tf.control_dependencies(update_ops):
     train_op = optimizer.minimize(loss)

Модификации

Существует несколько модификаций и вариаций метода пакетной нормализации:

  1. Тим Койманс[10] в 2016 г. предложил способ применения пакетной нормализации к рекуррентным нейронным сетям[на 10.01.18 не создан].
  2. Расширение метода пакетной нормализации было предложено Ликси Хуангом[11] в 2018 г. Метод получил название декоррелированная пакетная нормализация (англ. Decorrelated Batch Normalization). В данном методе кроме операций масштабирования и сдвига была предложено использование специальной функции затирания данных.
  3. Джимми Лей Ба[12] в 2016 г. предложил метод нормализации слоев (англ. Layer Normalization), который решает проблему выбора размера пакета.
  4. В работе Сергея Иоффе[13] в 2017 г. было представлено расширение метода пакетной нормализации: пакетная ренормализация (англ. Batch Renormalization). Данный метод улучшает пакетную нормализацию, когда размер пакетов мал и не состоит из независимых данных.
  5. Метод потоковой нормализации (англ. Streaming Normalization) был предложен Кифэном Ляо[14] в 2016 г. Данный метод убирает два ограничения пакетной нормализации: использование при online-обучении и использование в рекуррентных нейронных сетях.

См. также

Примечания

Источники информации