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

Материал из Викиконспекты
Перейти к: навигация, поиск
(Обучение нейронных сетей с нормализацией батчей)
Строка 29: Строка 29:
  
 
==Обучение нейронных сетей с нормализацией батчей==
 
==Обучение нейронных сетей с нормализацией батчей==
 +
 +
Для обучения нейронных сетей необходимо вычислять градиент функции потерь. В случае использования метода нормализации батчей градиент вычисляется следующим образом:
 +
 +
<tex>\displaystyle \frac{\partial l}{\partial \hat{x}_{i}} = \frac{\partial l}{\partial y_{i}} \cdot \gamma</tex>
 +
 +
<tex>\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}</tex>
 +
 +
<tex>\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}</tex>
 +
 +
<tex>\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}</tex>
 +
 +
<tex>\displaystyle \frac{\partial l}{\partial \gamma} = \sum_{i=1}^{m}\frac{\partial l}{\partial y_{i}} \cdot \hat{x}_{i}</tex>
 +
 +
<tex>\displaystyle \frac{\partial l}{\partial \beta} = \sum_{i=1}^{m}\frac{\partial l}{\partial y_{i}}</tex>
  
 
==Нормализация батчей в свёрточных сетях==
 
==Нормализация батчей в свёрточных сетях==

Версия 12:13, 8 января 2019

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

Идея

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

Опишем устройство метода нормализации батчей. Пусть, на вход некоторому слою нейронной сети поступает вектор размерности [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].

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

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

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

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

Вход: значения [math]x[/math] из батча [math]B = \{x_{1,\ldots, 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]\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]

Нормализация батчей в свёрточных сетях

Примеры

Реализации

Примечания