210
правок
Изменения
Нет описания правки
'''Нормализация батчей''' (англ. batch-normalization) {{---}} это метод, который позволяет повысить производительность и стабилизировать работу [[Нейронные сети, перцептрон | искусственных нейронных сетей]]. Суть данного метода заключается в том, что некоторым слоям нейронной сети на вход подаются данные, предварительно обработанные и имеющие нулевое [[Математическое ожидание случайной величины|математическое ожидание]] и единичную [[Дисперсия случайной величины|дисперсию]]. Впервые данный метод был представлен в <ref>[https://arxiv.org/pdf/1502.03167.pdfBatch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift]</ref>.
==Идея==
[[File:bn_exp_2.png|300px|thumb|Рисунок 4. Точность распознавания в зависимости от итерации обучения c использованием сигмоиды в качетсве функции активации.]]
Приведем пример демонстрирующий работу нормализации батчей. Рассмотрим задачу распознавания рукописных цифр на известном датасете MNIST <ref>[http://yann.lecun.com/exdb/mnist/Датасет MNIST]</ref>. Для решения задачи будет использоваться обычная нейронная сеть с <tex>3</tex> скрытыми полносвязными слоями по <tex>100</tex> узлов в каждом. Функция активации {{---}} ReLU. Выходной слой содержит <tex>10</tex> узлов. Размер батча равен <tex>60</tex>. Сравнивается две одинаковые модели, но в первой перед каждым скрытым слоем используется нормализация батчей, а во второй {{---}} нет. Коэффициент скорости обучения равен <tex>0.01</tex>. Веса инициализированы значениями с малой дисперсией.
На Рисунке 3 изображены два графика, показывающий разницу между моделями. Как видно, обе модели достигли высокой точности, но модель с использованием нормализации батчей достигла точности более <tex>90\%</tex> быстрее, почти сразу, и достигла максимума, примерно, уже на <tex>10000</tex> итераций. Однако, модель без нормализации батчей достигла скорости обучения примерно <tex>510</tex> батчей в секунда, а модель с использованием нормализации батчей {{---}} <tex>270</tex>. Однако, как можно видеть, нормализация батчей позволяет выполнить меньшее количество итераций и, в итоге, сойтись за меньшее время.
==Реализации==
Механизм нормализации батчей реализован практически во всех современных инструментариях для машинного обучения, таких как: TensorFlow <ref>[https://www.tensorflow.org/api_docs/python/tf/layers/batch_normalizationTensorFlow]</ref>, Keras <ref>[https://keras.io/layers/normalization/Keras]</ref>, CNTK <ref>[https://docs.microsoft.com/en-us/cognitive-toolkit/BatchNormalizationCNTK]</ref>, Theano <ref>[http://deeplearning.net/software/theano/library/tensor/nnet/bn.htmlTheano]</ref>, PyTorch <ref>[https://pytorch.org/docs/stable/_modules/torch/nn/modules/batchnorm.htmlPyTorch]</ref> и т.д.
Приведем пример применения нормализации батчей с использованием библиотеки TensorFlow на языке программирования Python <ref>[https://www.python.org/Язык программирования Python]</ref>:
import tensorflow as tf
==Модификации==
Существует несколько модификаций и вариаций метода нормализации батчей:
# В работе <ref>[https://arxiv.org/pdf/1603.09025.pdfRecurrent Batch Normalization]</ref> был предложен способ применения нормализации батчей к [[Рекуррентные нейронные сети|рекуррентным нейронным сетям]].# Расширение метода нормализации батчей было предложено в <ref>[https://arxiv.org/pdf/1804.08450.pdfDecorrelated Batch Normalization]</ref>. Метод получил название декоррелированная нормализация батчей (англ. Decorrelated Batch Normalization). В данном методе кроме операций масштабирования и сдвига была предложено использование специальной функции затирания данных. # В <ref>[https://arxiv.org/pdf/1607.06450.pdfLayer Normalization]</ref> был предложен метод нормализации слоев (англ. Layer Normalization), который решает проблему выбора размера батча.# В работе <ref>[https://arxiv.org/pdf/1702.03275.pdfBatch Renormalization: Towards Reducing Minibatch Dependence in Batch-Normalized Models]</ref> было представлено расширение метода нормализации батчей: ренормализация батчей (англ. Batch Renormalization). Данный метод улучшает нормализацию батчей, когда размер батчей мал и не состоит из независимых данных.# Метод потоковой нормализации (англ. Streaming Normalization) был предложен в <ref>[https://arxiv.org/pdf/1610.06160.pdfStreaming Normalization: Towards Simpler and More Biologically-plausible Normalizations for Online and Recurrent Learning]</ref>. Данные метод убирает два ограничения нормализации батчей: использование при online-обучении и использование в рекуррентных нейронных сетях.
== Примечания ==