обучение по батчам преимущества

Batch Normalization для ускорения обучения нейронных сетей

В современном мире нейронные сети находят себе всё больше применений в различных областях науки и бизнеса. Причем чем сложнее задача, тем более сложной получается нейросеть.

Обучение сложных нейронных сетей иногда может занимать дни и недели только для одной конфигурации. А чтобы подобрать оптимальную конфигурацию для конкретной задачи, требуется запустить обучение несколько раз — это может занять месяцы вычислений даже на действительно мощной машине.

В какой-то момент, знакомясь с представленным в 2015 году методом Batch Normalization от компании Google мне, для решения задачи связанной с распознаванием лиц, удалось существенно улучшить скорость работы нейросети.

обучение по батчам преимущества. image loader. обучение по батчам преимущества фото. обучение по батчам преимущества-image loader. картинка обучение по батчам преимущества. картинка image loader.

За подробностями прошу под кат.

В данной статье я постараюсь совместить две актуальные на сегодняшний день задачи — это задача компьютерного зрения и машинного обучения. В качестве проектировки архитектуры нейронной сети, как я уже и указывал, будет использоваться Batch Normalization для ускорения обучения нейронной сети. Обучение же нейронной сети (написанной с использованием популярной в рамках computer vision библиотеки Caffe) проводилось на базе из 3 миллионов лиц 14 тысяч различных людей.

В моей задаче была необходима классификация на 14700 классов. База разбита на две части: тренировочная и тестовая выборки. Известна точность классификации на тестовой выборке: 94,5%. При этом для этого потребовалось 420 тысяч итераций обучения — а это почти 4 суток (95 часов) на видеокарте NVidia Titan X.

Изначально для данной нейросети использовались некоторые стандартные способы ускорения обучения:

Все эти методы были применены к данной сети но затем возможность их применять сошла на нет, т.к. стала уменьшаться точность классификации.

В этот момент я открыл для себя новый метод ускорения нейронных сетей — Batch Normalization. Авторы данного метода тестировали его на стандартной сети Inception на базе LSVRC2012 и получили хорошие результаты:

обучение по батчам преимущества. image loader. обучение по батчам преимущества фото. обучение по батчам преимущества-image loader. картинка обучение по батчам преимущества. картинка image loader.

Из графика и таблицы видно что сеть обучилась в 15 раз быстрее и даже достигла более высокой точности в конечном итоге.

Что же из себя представляет Batch Normalization?

Рассмотрим классическую нейронную сеть с несколькими слоями. Каждый слой имеет множество входов и множество выходов. Сеть обучается методом обратного распространения ошибки, по батчам, то есть ошибка считается по какому-то подмножестве обучающей выборки.

Стандартный способ нормировки — для каждого k рассмотрим распределение элементов батча. Вычтем среднее и поделим на дисперсию выборки, получив распределение с центром в 0 и дисперсией 1. Такое распределение позволит сети быстрее обучатся, т.к. все числа получатся одного порядка. Но ещё лучше ввести две переменные для каждого признака, обобщив нормализацию следующим образом:

обучение по батчам преимущества. image loader. обучение по батчам преимущества фото. обучение по батчам преимущества-image loader. картинка обучение по батчам преимущества. картинка image loader.

Получим среднее, дисперсию. Эти параметры будут входить в алгоритм обратного распространения ошибки.
Тем самым получаем batch normalization слой с 2*k параметрами, который и будем добавлять в архитектуру предложенной сети для распознавания лиц.

На вход в моей задаче подаётся черно-белое изображение лица человека размером 50×50 пикселей. На выходе имеем 14000 вероятностей классов. Класс с максимальной вероятностью считается результатом предсказания.

Оригинальная сеть при этом выглядит следующим образом:

Используется 8 свёрточных слоёв, каждый размером 3×3. После каждой свёртки, используется ReLU: max(x, 0). После блока из двух свёрток идёт max-pooling с размером ячейки 2×2 (без перекрытия ячеек). Последний pooling слой имеет размер ячейки 7×7, который усредняет значения, а не берёт максимум. В итоге получается массив 1x1x320, который и подаётся на полносвязный слой.

обучение по батчам преимущества. image loader. обучение по батчам преимущества фото. обучение по батчам преимущества-image loader. картинка обучение по батчам преимущества. картинка image loader.

Сеть же с Batch Normalization выглядит несколько сложнее:

В новой архитектуре каждый блок из двух свёрток содержит слой Batch Normalization между ними. Также пришлось удалить один свёрточный слой из второго блока, так как добавление новых слоёв увеличило расход памяти графической карты.

обучение по батчам преимущества. image loader. обучение по батчам преимущества фото. обучение по батчам преимущества-image loader. картинка обучение по батчам преимущества. картинка image loader.

При этом я убран Dropout в соответствии с рекомендациями по применению BN авторов оригинальной статьи.

Экспериментальная оценка

Основная метрика — точность, делим количество правильно классифицированных изображений на количество всех изображений в тестовой выборке.

Основная сложность в оптимизации нейросети с помощью слоя Batch Normalization — подобрать learning rate и правильно его изменять в процессе обучения сети. Чтобы сеть сходилась быстрее, начальный learning rate должен быть больше, а потом снижаться, чтобы результат был точнее.

Было протестированы несколько вариантов изменения learning rate:

ИмяФормула изменения learning rateИтераций до точности 80%Итераций до полной сходимостиМаксимальная точность
original0.01*0.1 [#iter/150000]6400042000094,5%
short step0.055*0.7 [#iter/11000]4500018000086,7%
multistep without dropout0.055*0.7 Nsteps4500023000091,3%

[x] — целая часть
#iter — номер итерации
Nsteps — шаги заданные вручную на итерациях: 14000, 28000, 42000, 120000(x4),160000(x4), 175000, 190000, 210000.

График, демонстрирующий процесс обучения: точность на тестовой выборке в зависимости от количества выполненных итераций обучения нейронной сети:

обучение по батчам преимущества. image loader. обучение по батчам преимущества фото. обучение по батчам преимущества-image loader. картинка обучение по батчам преимущества. картинка image loader.

Оригинальная сеть сходится за 420000 итераций, при этом learning rate за всё время изменяется только 2 раза на 150000-ой итерации и на 300000-ой. Такой подход был предложен автором оригинальной сети, и мои эксперименты с этой сетью показали, что этот подход оптимален.

Но если присутствует слой Batch Normalization, такой подход даёт плохие результаты — график long_step. Поэтому моей идеей было — на начальной стадии менять learning rate плавно, а потом сделать несколько скачков (график multistep_no_dropout). График short_step показывает, что просто плавное изменение learing rate работает хуже. По сути здесь я опираюсь на рекомендации статьи и пытаюсь их применить к оригинальному подходу.

В итоге экспериментов я пришёл к выводу, что ускорить обучение можно, но точность в любом случае будет немного хуже. Можно сравнить задачу распознавания лиц с задачей рассмотренной в статьях Inception (Inception-v3, Inception-v4): авторы статьи сравнивали результаты классификации для различных архитектур и выяснилось, что всё-таки Inception-BN уступает новым версиям Inception без использования Batch Normalization. В нашей задаче получается такая же проблема. Но всё-таки если стоит задача как можно быстрее получить приемлимую точность, то BN как раз может помочь: чтобы достичь точности 80% требуется в 1,4 раза меньше времени по сравнению с оригинальной сетью (45000 итераций против 64000). Это можно использовать, например, для проектирования новых сетей и подбора параметров.

Программная реализация

Как я уже писал, в моей работе используется Caffe — удобный инструмент для глубинного обучения. Всё реализовано на C++ и CUDA, что обеспечивает оптимальное использование ресурсов компьютера. Для данной задачи это особенно актуально, т.к. если бы программа была написана не оптимально не было бы смысла ускорять обучение с помощью изменения архитектуры сети.

Caffe обладает модульностью — есть возможность подключить любой нейросетевой слой. Для слоя Batch Normalization удалось найти 3 реализации:

Для быстрого сравнения этих реализаций я взял стандартную базу Cifar10 и тестировал всё под операционной системой Linux x64, используя видеокарту NVidia GeForce 740M (2GB), процессор(4 ядра) Intel® Core(TM) i5-4200U CPU @ 1.60GHz и 4GB RAM.

Реализацию от caffe windows встроил в стандартный caffe, т.к. тестировал под Linux.

обучение по батчам преимущества. image loader. обучение по батчам преимущества фото. обучение по батчам преимущества-image loader. картинка обучение по батчам преимущества. картинка image loader.

На графике видно, что 1-ая реализация уступает 2-ой и 3-ей по точности, кроме этого в 1-ом и 2-ом случаях точность предсказания изменяется скачками от итерации к итерации (в первом случае скачки намного сильнее). Поэтому для задачи распознавания лиц выбрана именно 3-я реализация (от NVidia) как более стабильная и более новая.

Данные модификации нейросети с помощью добавления слоев Batch Normalization показывают, что для достижения приемлемой точности (80%) потребуется в 1,4 раза меньше времени.

Источник

Batch Normalization (батч-нормализация) что это такое?

Вам что-нибудь говорит термин внутренний ковариационный сдвиг:

internal covariance shift

Звучит очень умно, не так ли? И не удивительно. Это понятие в 2015-м году ввели два сотрудника корпорации Google:

Sergey Ioffe и Christian Szegedy (Иоффе и Сегеди)

решая проблему ускорения процесса обучения НС. И мы сейчас посмотрим, что же они предложили, как это работает и, наконец, что же это за ковариационный сдвиг. Как раз с последнего я и начну.

Давайте предположим, что мы обучаем НС распознавать машины (неважно какие, главное чтобы сеть на выходе выдавала признак: машина или не машина). Но, при обучении мы используем автомобили только черного цвета. После этого, сеть переходит в режим эксплуатации и ей предъявляются машины уже разных цветов:

обучение по батчам преимущества. image001. обучение по батчам преимущества фото. обучение по батчам преимущества-image001. картинка обучение по батчам преимущества. картинка image001.

Как вы понимаете, это не лучшим образом скажется на качестве ее работы. Так вот, на языке математики этот эффект можно выразить так. Начальное распределение цветов (пусть это будут градации серого) обучающей выборки можно описать с помощью вот такой плотности распределения вероятностей (зеленый график):

обучение по батчам преимущества. image002. обучение по батчам преимущества фото. обучение по батчам преимущества-image002. картинка обучение по батчам преимущества. картинка image002.

А распределение всего множества цветов машин, встречающихся в тестовой выборке в виде синего графика. Как видите эти графики имеют различные МО и дисперсии. Эта разница статистических характеристик и приводит к ковариационному сдвигу. И теперь мы понимаем: если такой сдвиг имеет место быть, то это негативно сказывается на работе НС.

Но это пример внешнего ковариационного сдвига. Его легко исправить, поместив в обучающую выборку нужное количество машин с разными цветами. Есть еще внутренний ковариационный сдвиг – это когда статистическая картина меняется внутри сети от слоя к слою:

обучение по батчам преимущества. image003. обучение по батчам преимущества фото. обучение по батчам преимущества-image003. картинка обучение по батчам преимущества. картинка image003.

Само по себе такое изменение статистик не несет каких-либо проблем. Проблемы проявляются в процессе обучения, когда при изменении весов связей предыдущего слоя статистическое распределение выходных значений нейронов текущего слоя становится заметно другим. И этот измененный сигнал идет на вход следующего слоя. Это похоже на то, словно на вход скрытого слоя поступают то машины черного цвета, то машины красного цвета или какого другого. То есть, весовые коэффициенты в пределах мини-батча только адаптировались к черным автомобилям, как в следующем мини-батче им приходится адаптироваться к другому распределению – красным машинам и так постоянно. В ряде случаев это может существенно снижать скорость обучения и, кроме того, для адаптации в таких условиях приходится устанавливать малое значение шага сходимости, чтобы весовые коэффициенты имели возможность подстраиваться под разные статистические распределения.

Это описание проблемы, которую, как раз, и выявили сотрудники Гугла, изучая особенности обучения многослойных НС. Решение кажется здесь очевидным: если проблема в изменении статистических характеристик распределения на выходах нейронов, то давайте их стандартизировать, нормализовывать – приводить к единому виду. Именно это и делается при помощи предложенного алгоритма

Осталось выяснить: какие характеристики и как следует нормировать. Из теории вероятностей мы знаем, что самые значимые из них – первые две: МО и дисперсия. Так вот, в алгоритме batch normalization их приводят к значениям 0 и 1, то есть, формируют распределение с нулевым МО и единичной дисперсией. Чуть позже я подробнее поясню как это делается, а пока ответим на второй вопрос: для каких величин и в какой момент производится эта нормировка? Разработчики этого метода рекомендовали располагать нормировку для величин обучение по батчам преимущества. image004. обучение по батчам преимущества фото. обучение по батчам преимущества-image004. картинка обучение по батчам преимущества. картинка image004.перед функцией активации:

обучение по батчам преимущества. image005. обучение по батчам преимущества фото. обучение по батчам преимущества-image005. картинка обучение по батчам преимущества. картинка image005.

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

Что же из себя представляет batch normalization и где тут статистики? Давайте вспомним, что НС обучается пакетами наблюдений – батчами. И для каждого наблюдения из batch на входе каждого нейрона получается свое значение суммы:

обучение по батчам преимущества. image006. обучение по батчам преимущества фото. обучение по батчам преимущества-image006. картинка обучение по батчам преимущества. картинка image006.

Здесь m – это размер пакета, число наблюдений в батче. Так вот статистики вычисляются для величин V в пределах одного batch:

обучение по батчам преимущества. image007. обучение по батчам преимущества фото. обучение по батчам преимущества-image007. картинка обучение по батчам преимущества. картинка image007.

И, далее, чтобы вектор V имел нулевое среднее и единичную дисперсию, каждое значение преобразовывают по очевидной формуле:

обучение по батчам преимущества. image008. обучение по батчам преимущества фото. обучение по батчам преимущества-image008. картинка обучение по батчам преимущества. картинка image008.

здесь обучение по батчам преимущества. image009. обучение по батчам преимущества фото. обучение по батчам преимущества-image009. картинка обучение по батчам преимущества. картинка image009.— небольшое положительное число, исключающее деление на ноль, если дисперсия будет близка к нулевым значениям. В итоге, вектор

обучение по батчам преимущества. image010. обучение по батчам преимущества фото. обучение по батчам преимущества-image010. картинка обучение по батчам преимущества. картинка image010.

будет иметь нулевое МО и почти единичную дисперсию. Но этого недостаточно. Если оставить как есть, то будут теряться естественные статистические характеристики наблюдений между батчами: небольшие изменения в средних значениях и дисперсиях, т.е. будет уменьшена репрезентативность выборки:

обучение по батчам преимущества. image011. обучение по батчам преимущества фото. обучение по батчам преимущества-image011. картинка обучение по батчам преимущества. картинка image011.

Кроме того, сигмоидальная функция активации вблизи нуля имеет практически линейную зависимость, а значит, простая нормировка значений x лишит НС ее нелинейного характера, что приведет к ухудшению ее работы:

обучение по батчам преимущества. image012. обучение по батчам преимущества фото. обучение по батчам преимущества-image012. картинка обучение по батчам преимущества. картинка image012.

Поэтому нормированные величины обучение по батчам преимущества. image013. обучение по батчам преимущества фото. обучение по батчам преимущества-image013. картинка обучение по батчам преимущества. картинка image013.дополнительно масштабируются и смещаются в соответствии с формулой:

обучение по батчам преимущества. image014. обучение по батчам преимущества фото. обучение по батчам преимущества-image014. картинка обучение по батчам преимущества. картинка image014.

Параметры обучение по батчам преимущества. image015. обучение по батчам преимущества фото. обучение по батчам преимущества-image015. картинка обучение по батчам преимущества. картинка image015.с начальными значениями 1 и 0 также подбираются в процессе обучения НС с помощью того же алгоритма градиентного спуска. То есть, у сети появляются дополнительные настраиваемые переменные, помимо весовых коэффициентов.

Но это лишь возможные эффекты – они могут и не проявиться или даже, наоборот, применение этого алгоритма ухудшит обучаемость НС. Рекомендация здесь такая:

Изначально строить нейронные сети без batch normalization (или dropout) и если наблюдается медленное обучение или эффект переобучения, то можно попробовать добавить batch normalization или dropout, но не оба вместе.

Реализация batch normalization в Keras

Давайте теперь посмотрим как можно реализовать данный алгоритм в пакете Keras. Для этого существует класс специального слоя, который так и называется:

Он применяется к выходам предыдущего слоя, после которого указан в модели НС, например:

Здесь нормализация применяется к выходам скрытого слоя, состоящего из 300 нейронов. Правда в такой простой НС нормализация, скорее, негативно сказывается на обучении. Этот метод обычно помогает при большом числе слоев, то есть, при deep learning.

Видео по теме

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Нейронные сети: краткая история триумфа

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Структура и принцип работы полносвязных нейронных сетей | #1 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Ускорение обучения, начальные веса, стандартизация, подготовка выборки | #4 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Функции активации, критерии качества работы НС | #6 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Как нейронная сеть распознает цифры | #9 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Оптимизаторы в Keras, формирование выборки валидации | #10 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Batch Normalization (батч-нормализация) что это такое? | #12 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Как работают сверточные нейронные сети | #13 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Делаем сверточную нейронную сеть в Keras | #14 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Примеры архитектур сверточных сетей VGG-16 и VGG-19 | #15 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Теория стилизации изображений (Neural Style Transfer) | #16 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Делаем перенос стилей изображений с помощью Keras и Tensorflow | #17 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Как нейронная сеть раскрашивает изображения | #18 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Введение в рекуррентные нейронные сети | #19 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Как рекуррентная нейронная сеть прогнозирует символы | #20 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Делаем прогноз слов рекуррентной сетью Embedding слой | #21 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Как работают RNN. Глубокие рекуррентные нейросети | #22 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Как делать сентимент-анализ рекуррентной LSTM сетью | #24 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Рекуррентные блоки GRU. Пример их реализации в задаче сентимент-анализа | #25 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Двунаправленные (bidirectional) рекуррентные нейронные сети | #26 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Автоэнкодеры. Что это и как работают | #27 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Вариационные автоэнкодеры (VAE). Что это такое? | #28 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Делаем вариационный автоэнкодер (VAE) в Keras | #29 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Расширенный вариационный автоэнкодер (CVAE) | #30 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Что такое генеративно-состязательные сети (GAN) | #31 нейросети на Python

обучение по батчам преимущества. default. обучение по батчам преимущества фото. обучение по батчам преимущества-default. картинка обучение по батчам преимущества. картинка default.

Делаем генеративно-состязательную сеть в Keras и Tensorflow | #32 нейросети на Python

© 2021 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта

Источник

Записная книжка

Компьютерное зрение, машинное обучение, нейронные сети и т.п.

Batch Normalization. Основы.

Главные наблюдаемые достоинства batch normalization это ускорение тренировки (в смысле уменьшения количества итераций для получения нужного качества) и некая допускаемая вольность в подборе параметров: и инициализации весов сети, и learning rate и других метапараметров обучения. Таким образом ценность batch Normalization для нейронных сетей сложно преувеличить, а значит есть смысл разобраться: что это такое и откуда проистекает польза при применении.

И вот тут начинается самое интересное. Ответ на первый вопрос “что это такое?” в целом не вызывает особой сложности (если подойти к делу формально и определить какие же преобразования добавляются в сетку), а вот про “откуда проистекает польза?” идут жаркие споры. Объяснение, авторов методики подвергается серьёзной критике.

Мне понравилось как это сформулировано в [3]:

“The practical success of BatchNorm is indisputable. By now, it is used by default in most deep learning models, both in research (more than 6,000 citations) and real-world settings. Somewhat shockingly, however, despite its prominence, we still have a poor understanding of what the effectiveness of BatchNorm is stemming from. In fact, there are now a number of works that provide alternatives to BatchNorm, but none of them seem to bring us any closer to understanding this issue.”

Правда, стоит отметить, что у нас всё глубокое обучение и нейронные сети во многом можно описать теми же словами. Оно вроде работает и мы даже, в принципе, понимаем какие рычаги жать, чтобы ехало в примерно нужном направлении, но многие моменты так до конца и не объясняются.

Заканчивая лирику переходим к конкретике. Начнем разбираться с самого начала, а именно классической статьи [1] где методика BN и была впервые описана.

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

Авторы уже в заголовке статьи [1] анонсируют, что ускорение тренировки связано с тем, что применение BN позволяет уменьшить internal covariate shift. Следовательно, есть смысл разобраться, что такое covariate shift (отложив пока в сторону, что значит internal), а для этого надо обратиться к статье [2] на которую ссылаются авторы [1].

Covariate shift

Рассмотрим следующий пример (который взят из той же [2]).

Пример

Коэффициенты определим методом наименьших квадратов (МНК), т.е. решив задачу оптимизации:

обучение по батчам преимущества. bn covariate shift 1. обучение по батчам преимущества фото. обучение по батчам преимущества-bn covariate shift 1. картинка обучение по батчам преимущества. картинка bn covariate shift 1.

обучение по батчам преимущества. bn covariate shift 2. обучение по батчам преимущества фото. обучение по батчам преимущества-bn covariate shift 2. картинка обучение по батчам преимущества. картинка bn covariate shift 2.

Очевидно, раз красная и желтая линии существенно не совпадают, то модель “наученная” по тренировочному набору для проверочного набора даёт плохой результат. В [2] предлагается, для того, чтобы погасить влияние covariate shift вместо МНК использовать взвешенный МНК, и оптимизировать функцию:

обучение по батчам преимущества. bn covariate shift 3. обучение по батчам преимущества фото. обучение по батчам преимущества-bn covariate shift 3. картинка обучение по батчам преимущества. картинка bn covariate shift 3.

видно, что она практически совпадает с желтой, а значит мы действительно побороли covariate shift и улучшили предсказательную силу модели на проверочном наборе.

Batch Normalization. Определение.

Мы сейчас не будем углубляться в то, насколько действительно ICS оказывает влияние на скорость тренировки, и борется ли BN с ICS. Позже мы разберем статьи, которые к идеи с ICS относятся с большим скептицизмом и объясняют успех BN совсем другим. Но то, что BN отлично работает подтверждается на практике, поэтому переходим к его описанию

Если теоретическое обоснование BN выглядит “притянутым за уши” (во всяком случае в статье нет каких-то внятных экспериментов, которые бы указывали на то, что до добавления BN сеть страдала от ICS и вот вам статистика, а после перестала, и вот вам другая статистика), то какие практические соображения лежат в основе метода, авторы описывают весьма четко и понятно.

Пример.

Сегенерируем некоторое количество векторов, подчиняющихся этому распределению и отрисуем их на плоскости:

обучение по батчам преимущества. bn whitening 1. обучение по батчам преимущества фото. обучение по батчам преимущества-bn whitening 1. картинка обучение по батчам преимущества. картинка bn whitening 1.

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

$\lambda_2 = 0.2, e_2 = (e_<21>, e_<22>) = (0.5547002, 0.83205029)$

и определим линейное преобразование:

обучение по батчам преимущества. bn whitening 2. обучение по батчам преимущества фото. обучение по батчам преимущества-bn whitening 2. картинка обучение по батчам преимущества. картинка bn whitening 2.

Покончили с примером, смысл того, что предполагается сделать с данными понятен.

обучение по батчам преимущества. bn normalize 1. обучение по батчам преимущества фото. обучение по батчам преимущества-bn normalize 1. картинка обучение по батчам преимущества. картинка bn normalize 1.

Второе, когда сеть используется для вывода, обычно у нас нет ни батчей ни даже минибатчей, поэтому среднее и дисперсию мы сохраняем из тренировки, для этого для каждой компоненты вектора входа каждого слоя мы запоминаем аппроксимированые математическое ожидание и дисперсию, считая скользящую среднюю математического ожидания и дисперсии по минибатчам в процессе тренировки.

Batch Normalization. Практика.

Итак, что такое BN мы определили, разберёмся как её применять. Обычно и полносвязный, и свёрточный слой можно представить в виде:

\[z = g(\textrm(W \cdot x))\]

Чтобы получить максимальный эффект от использования BN в статье [1] предлагается еще несколько изменений в процессе тренировки сети:

Увеличить learning rate. Когда в сеть внедрена BN можно увеличить learning rate и таким образом ускорить процесс оптимизации нейронной сети, при этом избежать расходимости. В сетях без BN при применении больших learning rate за счет увеличения амплитуды градиентов возникает расходимость.

Ускорить убывание learning rate. Поскольку при добавлении в сеть BN скорость сходимости увеличивается, то можно уменьшать learning rate быстрее. (Обычно используется либо экспоненциальное уменьшение веса, либо ступенчатое, и то и другое регулируется двумя параметрами: во сколько раз и через сколько итераций уменьшить learning rate, при применении BN можно сократить число итераций)

Более тщательно перемешивать тренировочные данные, чтобы минибатчи не собирались из одних и тех же примеров.

Резюмируя. Авторы статьи [1] предложили методику ускорения сходимости нейронной сети. Эта методика доказала свою эффективность, кроме того она позволяет применять более широкий интервал метапараметров тренировки (например, больший learning rate) и с меньшей аккуратностью подходить к инициализации весов сети. Объяснение данной методики основывается на понятии ICS, однако, каких-то существенных подтверждений того, что данный метод действительно позволяет погасить ICS и именно за счет этого улучшить процесс тренировки в статье я не нашел (возможно плохо искал). Есть только некие теоретические рассуждения, которые не выглядят (на мой взгляд) достаточно убедительно.

Литература

S. Ioffe, Ch. Szegedy, “Batch Normali;zation: Accelerating Deep Network Training by Reducing Internal Covariate Shift”, arXiv:1502.03167v3, 2015

H. Shimodaira, “Improving predictive inference under covariate shift by weighting the log-likelihood function.”, Journal of Statistical Planning and Inference, 90(2):227–244, October 2000.

Sh. Santurkar, D. Tsipras, A. Ilyas, A. Madry, “How Does Batch Normalization Help Optimization? (No, It Is Not About Internal Covariate Shift)”, arXiv:1805.11604v5, 2019

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *