Исследование влияния batch size на качество обучения нейронных сетей
Нейронные сети обучаются с использованием градиентного спуска, метода оптимизации при котором оценка ошибки, используемая для обновления весов модели нейросети, рассчитывается на основе подмножества обучающего набора данных. Количество примеров из набора обучающих данных, используемых для оценки градиента ошибки, называется размером пакета (batch size), он является важным гиперпараметром, влияющим на динамику алгоритма обучения. В статье приведён анализ влияния размера пакета обучения для нейросетей разного типов – нейросетей глубокого обучения, свёрточных, рекуррентных и больших языковых моделей на точность прогнозирования. Однако как выяснилось в процессе исследования неоднократное упоминание в источниках того, что размер batch size влияет на скорость обучения, на практике данное высказывание не было подтверждено экспериментальными значениями. С этой целью был проведён эксперимент проверки влияния размера пакета обучающей выборки не только на точность распознавания (accuracy) и величину потерь (loss – разница между полученным значением предсказания и реальным), но и на затраченное время на процесс обучения. Результаты исследования размера пакета выявили, что он оказывает решающее влияние на точность распознавания изображений свёрточных нейронных сетей, рекуррентных, нейросетей глубокого обучения и больших языковых моделей. Чем больше значение параметра, тем выше точность прогнозирования. С другой стороны, большое значение размера пакета приводит к увеличению требований к вычислительным ресурсам.
Сведения об авторах
Andrey Anatolyevich Lisov, Южно-Уральский государственный университет (национальный исследовательский университет)
аспирант кафедры электропривода, мехатроники и электромеханики
Alexander Grigoryevich Vozmilov, Южно-Уральский государственный университет (национальный исследовательский университет)
профессор кафедры электропривода, мехатроники и электромеханики, доктор технических наук
Vil Gubaevich Urmanov, Башкирский государственный аграрный университет
доцент кафедры прикладной механики и компьютерного инжиниринга, кандидат технических наук
Sergei Panishev, Южно-Уральский государственный университет (национальный исследовательский университет)
аспирант кафедры электропривода, мехатроники и электромеханики
Что такое batch? Эпоха, батч, итерация – в чем различия? Руководство
Если вы ищ е те, что такое batch, эпоха и итерация, тогда скорее всего вы наконец-то решились изучать нейронные сети, потому что все эти понятия тесно связаны с обучением нейронных сетей.
Обучение нейронных сетей — это та еще задача. Возьмем самый простой пример. Допустим у вас есть изображения домашних животных и вы хотите научить нейронную сеть распознавать кошку и собаку. Если бы вы обучали человека распознавать этих животных, то процесс обучения у вас занял бы всего несколько минут. Люди сразу «схватывают» комплексные различия между разными видами животных, не вдаваясь в подробности, как они их различают. С нейронной сетью так не работает.
Нейронные сети — это программы, которые состоят из множества алгоритмов. Алгоритмы отвечают за распознавание конкретных свойств входных данных. Причем все эти свойства конвертированы в цифровой мир. То есть нейронной сети нельзя просто показать две фотографии и сказать: «Вот это кошка, а вот это собака». Им нужно «объяснить», почему кошка — это кошка, а собака — это собака. Причем не просто «объяснить», а показать на конкретные свойства, которые отличают кошек от собак. Таких свойств может быть сотни и даже тысячи.
Мы не будем сегодня подробно расписывать работу нейронных сетей, но разберем термины батч, эпоха и итерация, которые тесно связаны с их обучением.
Что такое batch (батч), эпоха и итерация?
При обучении нейронных сетей постоянно используется поток обучающих входных данных. Нейросеть проводит вычисления с этими данными. Она это делает снова и снова, опираясь на предыдущие знания и выискивая новые свойства для самообучения. Например, на предыдущем потоке данных нейросеть выяснила, что кошки от собак очень часто отличаются по форме тела, поэтому теперь она понимает, что если на фото изображено большое животное, то скорее всего это не кошка. На нынешнем потоке входных данных нейросеть выяснила, что у собак чаще всего мордочка более продолговата, чем у кошек, поэтому если на изображении у животного продолговатая мордочка, то скорее всего это собака. Пока не будем разбирать исключения типа собак с приплюснутой мордочкой или размером с кошку. В этих случаях сработают другие признаки , по котор ы м нейросеть различит кошку от собаки.
Что такое эпоха?
- размеру и форме тела;
- форме мордочки;
- характерной окраске;
- форме хвоста.
- форме лап;
- форме ушей;
- форме глаз;
- форме усов на мордочке.
Что такое итерация?
Мы выяснили, что эпоха — это некий этап обучения, который состоит из большого объема данных. Например, в нашем случае в течение одной эпохи мы учим нейронную сеть различать кошек и собак по 4 признакам.
Однако, если разобрать процесс обучения нейросети в масштабе одной эпох и , то мы заметим, что мы не даем нейронной сети сразу весь пакет данных и пытаемся ее обучить сразу четырем признакам. Эпоха разбивается на несколько частей или этапов. В нашем случае логично эпоху разбить на 4 пакета по количеству признаков отличия кошек и собак.
Итерация — это «прохождение», этап, пакет, из которых состоит одна эпоха. То есть, в нашем случае, наша эпоха состоит из 4 итераций. В одной итерации мы обучаем нейронную сеть различать кошек и собак по одному признаку.
Что такое батч?
Батч — это составная часть итерации. Условно, мы имеем одну итерацию, в которой хотим обучить нейронную сеть отличать кошек и собак по размеру и форме тела. Для этого процесса мы подготовили 100 тысяч изображений. То есть, после того как нейронная сеть изучит эти изображения, закончится первая итерация первой эпохи.
Если рассмотреть этот вопрос подробнее, тогда мы увидим, что в процессе одной итерации мы не выгружаем сразу все 100 тысяч изображений в нейронную сеть, а разбиваем их н ел огические части. Например, в одной части итерации мы будем обучать нейросеть различать высоту тела животного, в другой части длину тела животного, в третьей — расположение головы и др. Все это относится к форме тела животного, но все же — это разные признаки. Таких признаков может быть очень много. Условно, в процессе этой итерации мы определили 10 таких признаков, и на каждый признак выделили по 10 тысяч изображений.
Батч — это небольшой пакет данных одной итерации. В нашем примере, одна итерация в 100 тысяч фотографий будет состоять из 10 батчей по 10 тысяч изображений.
Заключение
Изучение нейронных сетей — это очень обширная тема. Сегодня мы изучили только, что такое батч, итерация и эпоха. Эти три термина тесно связаны с процессом обучения нейронных сетей.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Batch-normalization
Пакетная нормализация (англ. batch-normalization) — метод, который позволяет повысить производительность и стабилизировать работу искусственных нейронных сетей. Суть данного метода заключается в том, что некоторым слоям нейронной сети на вход подаются данные, предварительно обработанные и имеющие нулевое математическое ожидание и единичную дисперсию. Впервые данный метод был представлен в [1] .
Идея
Нормализация входного слоя нейронной сети обычно выполняется путем масштабирования данных, подаваемых в функции активации. Например, когда есть признаки со значениями от [math]0[/math] до [math]1[/math] и некоторые признаки со значениями от [math]1[/math] до [math]1000[/math] , то их необходимо нормализовать, чтобы ускорить обучение. Нормализацию данных можно выполнить и в скрытых слоях нейронных сетей, что и делает метод пакетной нормализации.
Пакет
Предварительно, напомним, что такое пакет (англ. batch). Возможны два подхода к реализации алгоритма градиентного спуска для обучения нейросетевых моделей: стохастический и пакетный [2] .
- Стохастический градиентный спуск (англ. stochastic gradient descent) — реализация, в которой на каждой итерации алгоритма из обучающей выборки каким-то (случайным) образом выбирается только один объект;
- Пакетный (батч) (англ. batch gradient descent) — реализация градиентного спуска, когда на каждой итерации обучающая выборка просматривается целиком, и только после этого изменяются веса модели.
Также существует «золотая середина» между стохастическим градиентным спуском и пакетным градиентным спуском — когда просматривается только некоторое подмножество обучающей выборки фиксированного размера (англ. batch-size). В таком случае такие подмножества принято называть мини-пакетом (англ. mini-batch). Здесь и далее, мини-пакеты будем также называть пакетом.
Ковариантный сдвиг
Рисунок [math]1[/math] . Верхние две строки роз показывают первое подмножество данных, а нижние две строки показывают другое подмножество. Два подмножества имеют разные пропорции изображения роз. На графиках показано распределение двух классов в пространстве объектов с использованием красных и зеленых точек. Синяя линия показывает границу между двумя классами. Иллюстрация из статьи.
Пакетная нормализация уменьшает величину, на которую смещаются значения узлов в скрытых слоях (т.н. ковариантный сдвиг (англ. covariance shift)).
Ковариантный сдвиг — это ситуация, когда распределения значений признаков в обучающей и тестовой выборке имеют разные параметры (математическое ожидание, дисперсия и т.д.). Ковариантность в данном случае относится к значениям признаков.
Проиллюстрируем ковариантный сдвиг примером. Пусть есть глубокая нейронная сеть, которая обучена определять находится ли на изображении роза. И нейронная сеть была обучена на изображениях только красных роз. Теперь, если попытаться использовать обученную модель для обнаружения роз различных цветов, то, очевидно, точность работы модели будет неудовлетворительной. Это происходит из-за того, что обучающая и тестовая выборки содержат изображения красных роз и роз различных цветов в разных пропорциях. Другими словами, если модель обучена отображению из множества [math]X[/math] в множество [math]Y[/math] и если пропорция элементов в [math]X[/math] изменяется, то появляется необходимость обучить модель заново, чтобы «выровнять» пропорции элементов в [math]X[/math] и [math]Y[/math] . Когда пакеты содержат изображения разных классов, распределенные в одинаковой пропорции на всем множестве, то ковариантный сдвиг незначителен. Однако, когда пакеты выбираются только из одного или двух подмножеств (в данном случае, красные розы и розы различных цветов), то ковариантный сдвиг возрастает. Это довольно сильно замедляет процесс обучения модели. На Рисунке [math]1[/math] изображена разница в пропорциях.
Простой способ решить проблему ковариантного сдвига для входного слоя — это случайным образом перемешать данные перед созданием пакетов. Но для скрытых слоев нейронной сети такой метод не подходит, так как распределение входных данных для каждого узла скрытых слоев изменяется каждый раз, когда происходит обновление параметров в предыдущем слое. Эта проблема называется внутренним ковариантным сдвигом (англ. internal covariate shift). Для решения данной проблемы часто приходится использовать низкий темп обучения (англ. learning rate) и методы регуляризации при обучении модели. Другим способом устранения внутреннего ковариантного сдвига является метод пакетной нормализации.
Свойства пакетной нормализации
Кроме того, использование пакетной нормализации обладает еще несколькими дополнительными полезными свойствами:
- достигается более быстрая сходимость моделей, несмотря на выполнение дополнительных вычислений;
- пакетная нормализация позволяет каждому слою сети обучаться более независимо от других слоев;
- становится возможным использование более высокого темпа обучения, так как пакетная нормализация гарантирует, что выходы узлов нейронной сети не будут иметь слишком больших или малых значений;
- пакетная нормализация в каком-то смысле также является механизмом регуляризации: данный метод привносит в выходы узлов скрытых слоев некоторый шум, аналогично методу dropout;
- модели становятся менее чувствительны к начальной инициализации весов.
Описание метода
Опишем устройство метода пакетной нормализации. Пусть на вход некоторому слою нейронной сети поступает вектор размерности [math]d[/math] : [math]x = (x^, \ldots, x^)[/math] . Нормализуем данный вектор по каждой размерности [math]k[/math] :
где математическое ожидание и дисперсия считаются по всей обучающей выборке. Такая нормализация входа слоя нейронной сети может изменить представление данных в слое. Чтобы избежать данной проблемы, вводятся два параметра сжатия и сдвига нормализованной величины для каждого [math]x^[/math] : [math]\gamma^[/math] , [math]\beta^[/math] — которые действуют следующим образом:
Данные параметры настраиваются в процессе обучения вместе с остальными параметрами модели.
Пусть обучение модели производится с помощью пакетов [math]B[/math] размера [math]m[/math] : [math]B = \,\ldots, x_\>[/math] . Здесь нормализация применяется к каждому элементу входа с номером [math]k[/math] отдельно, поэтому в [math]x^[/math] индекс опускается для ясности изложения. Пусть были получены нормализованные значения пакета [math]\hat_,\ldots, \hat_[/math] . После применения операций сжатия и сдвига были получены [math]y_,\ldots, y_[/math] . Обозначим данную функцию пакетной нормализации следующим образом:
Тогда алгоритм пакетной нормализации можно представить так:
Вход: значенияиз пакета ; настраиваемые параметры ; константа для вычислительной устойчивости. Выход: // математическое ожидание пакета // дисперсия пакета // нормализация // сжатие и сдвиг
Заметим, что если [math]\beta=\mu_[/math] и [math]\gamma=\sqrt<\sigma_^ + \epsilon>[/math] , то [math]y_[/math] равен [math]x_[/math] , то есть [math]BN_<\gamma, \beta>(\cdot)[/math] является тождественным отображением. Таким образом, использование пакетной нормализации не может привести к снижению точности, поскольку оптимизатор просто может использовать нормализацию как тождественное отображение.
Обучение нейронных сетей с пакетной нормализацией
Рисунок [math]2[/math] . Граф вычислений слоя пакетной нормализации алгоритмом обратного распространения ошибки. Слева-направо черными стрелками показана работа алгоритма в прямом направлении. А справа-налево красными стрелками — в обратном направлении, где вычисляется градиент функции потерь. Здесь [math]N=m[/math] и [math]D=d[/math] . Иллюстрация из статьи.
Для обучения нейронных сетей необходимо вычислять градиент функции потерь [math]l[/math] . В случае использования метода пакетной нормализации градиент вычисляется следующим образом:
На Рисунке [math]2[/math] изображен граф вычислений слоя пакетной нормализации алгоритмом обратного распространения ошибки.
В прямом направлении, как и описано в алгоритме метода, из входа [math]x[/math] вычисляется среднее значение по каждой размерности признакового пространства. Затем полученный вектор средних значение вычитается из каждого элемента обучающей выборки. Далее вычисляется дисперсия, и с помощью нее вычисляется знаменатель для нормализации. Затем полученное значение инвертируется и умножается на разницу входа [math]x[/math] и средних значений. В конце применяются параметры [math]\gamma[/math] и [math]\beta[/math] .
В обратном направлении вычисляются производные необходимых функций. В следующей таблице подробнее изображены шаги вычисления градиента функции потерь (иллюстрации из статьи, здесь [math]N=m[/math] и [math]D=d[/math] ):
Шаг | Изображение | Описание |
---|---|---|
1 | Сначала вычисляется производная по параметру [math]\beta[/math] , как в уравнении [math](6)[/math] , так как к нему применяется только операции суммирования. И значение градиента выхода передается без изменений. | |
2 | Далее, пользуясь правилом вычисления производной при умножении, как в уравнении [math](5)[/math] , вычисляется градиент по параметру [math]\gamma[/math] . Градиент выхода умножается на данную константу, получая уравнение [math](1)[/math] , и передается в следующий узел. | |
3 | Данный шаг вычисляется аналогично предыдущему, применяя правило вычисления производной при умножении. | |
4 | Пользуясь производной обратной величины, вычисляем следующий узел графа. | |
5 | Вычисляем производную квадратного корня с добавлением [math]\epsilon[/math] . | |
6 | Вычисляем производную суммы по всем компонентам входного вектора, получая матрицу. | |
7 | Получаем производную квадрата входящей функции. | |
8 | На данном шаге в одном узле сходятся ветки, поэтому полученные производные просто складываются, получая уравнение [math](2)[/math] для производной по дисперсии. | |
9 | Аналогично шагу 6 вычисляем матрицу по сумме для производной по математическому ожиданию, получая формулу [math](3)[/math] . | |
10 | В начальной вершине получаем уравнение [math](4)[/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]BN[/math] применяется отдельно к каждой размерности [math]x=Wu[/math] с отдельной парой параметров [math]\gamma^[/math] и [math]\beta^[/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^[/math] и [math]\beta^[/math] настраиваются для каждой карты признаков отдельно.
Индивидуальная нормализация
Рисунок [math]3[/math] . Типы нормализации. Ось N — по объектам в пакете, ось C — по картам признаков (channels), оставшаяся ось — по пространственным измерениям объектов, например, ширине и высоте картинки. Иллюстрация из статьи.
При пакетной нормализации происходит усреднение параметров по всему пакету. Например, в случае задачи переноса стилей картин, это вносит много шума. При усреднении теряются индивидуальные характеристики объектов. Поэтому используется более тонкая нормализация — индивидуальная нормализация (англ. instance normalization). Разница заключается в том, что нормализация происходит по каждому отдельному объекту, а не по всему пакету. Для примера, усреднение происходит по пикселям картины, но не по всем картинам в пакете, как видно на Рисунке [math]3[/math] .
Условная пакетная нормализация
Условная пакетная нормализация (англ. conditional batch normalization, CBN) — метод, который позволяет «выбирать» параметры пакетной нормализации ( [math]\beta[/math] и [math]\gamma[/math] ) в зависимости от какого-то состояния сети, например метки класса. Впервые данный метод был представлен для индивидуальной нормализации в A Learned Representation for Artistic Style [3] . Позднее он был использован для пакетной нормализации в Modulating early visual processing by language [4] .
Зачем нужно делать параметры нормализации зависимостью? На практике было выяснено [3] , что иногда нейронные сети, натренированные решать разные задачи из одного класса, имеют схожие веса и достаточно лишь слегка поменять параметры сжатия и сдвига после каждого слоя. Таким образом, добавив условную нормализацию, мы научимся решать сразу несколько задач используя одну сеть.
Описание метода
Самая важная часть метода — выбрать для входа [math]x[/math] параметры [math]\beta_c[/math] и [math]\gamma_c[/math] . Возможные способы сделать это описаны ниже. Единожды параметры выбраны, формула не отличается от приведённой в параграфе c описанием метода пакетной нормализации:
[math]y = \gamma_c \cdot \hat + \beta_c \;\; (1)[/math] .
Выбор параметров нормализации
Есть несколько способов выбрать параметры. Самой простой из них — разделить предметную область на [math]C[/math] частей. Для каждого слоя надо добавить соответствующие параметры [math]\beta_c, \gamma_c \; , c \in 1..C[/math] и настраивать их вместе с остальными параметрами модели. Когда мы тренируем на данных из [math]i[/math] -ой части, мы явно указываем, что в формуле [math](1)[/math] [math]c = i[/math] . Когда мы хотим осуществить предсказание, мы снова явно указываем желаемый [math]c[/math] и в вычислениях используются соответствующие параметры.
Есть другой способ: можно вместе с настройкой сети обучать алгоритм выбора параметров [math]PARAMS[/math] сжатия и сдвига по заданному входу: [math](\beta_c, \gamma_c) = PARAMS(x)[/math] . К примеру, в работе Modulating early visual processing by language в качестве [math]PARAMS[/math] используется многослойный перцептрон по Румельхарту с одним скрытым слоем. Таким образом, характеристики [math]x[/math] могут изменить выход целого слоя. Это бывает полезно, если верна гипотеза, что структура входных векторов связана с желаемым результатом работы.
В применении к переносу стиля
Рисунок [math]4[/math] . Перенесения стиля с картины Клода Моне «Рыбацкие лодки» (слева) на изображение человека (справа) [3] .
Популярной задачей является отрисовка данного изображения в стиле какой-то заданной картины, как на Рисунке [math]4[/math] . Эта задача называется «перенос стиля«. Одно из популярных и достаточно быстрых решений этой задачи использует простые нейронные сети прямого распространения. Это решение имеет недостаток: каждая сеть может переносить лишь один стиль. Если мы хотим научиться переносить [math]N[/math] стилей, то надо обучать [math]N[/math] различных сетей. Однако лишь небольшое количество параметров этих сетей отвечает за индивидуальные особенности стиля. Хотелось бы уметь переиспользовать остальные параметры.
Добавление условности
В статье A Learned Representation for Artistic Style был получен удивительный результат: для моделирования какого-то стиля, достаточно специализировать параметры сжатия и сдвига нормализации для каждого конкретного стиля. Таким образом, давайте для каждого изображения стиля [math]s[/math] будем учитывать свои [math]\gamma_c[/math] и [math]\beta_c[/math] . Получается, у нас будет лишь два вектора параметров, специфичных для каждого стиля, а все остальные — общие.
Такой подход имеет много преимуществ по сравнению с наивным:
- Это быстрее.
- Это требует меньше памяти.
- Легче добавить новый стиль: достаточно взять текущие веса, добавить новые параметры сжатия и сдвига и дообучить. Веса, скорее всего, уже были близки к оптимальным и дообучение не будет долгим.
- Можно комбинировать новые стили за счёт выпуклой комбинации существующих коэффициентов сжатия и сдвига.
Когда использовать условную нормализацию?
Во-первых, на условную нормализацию стоит обратить внимание, если вы настраиваете много сетей, решающих похожие задачи. Возможно, в этом случае вы можете использовать одну сеть с условными параметрами нормализации, зависящими от конкретной задачи. Например, при переносе стилей вместо [math]S[/math] сетей вы настраиваете одну сеть с [math]S[/math] наборами параметров нормализации.
Во-вторых, если вы подозреваете, что информация о структуре входных векторов имеет значение для выхода. Например, имеет смысл «слить» лингвистическую информацию и характеристики изображения для задачи ответа на визуальные вопросы (англ. Visual Question Answering, VQA).
Однако во всех случаях надо помнить, что полученные алгоритмы для разных задач будут различаться лишь параметрами свёртки и сжатия. Иначе говоря, если ваши задачи нельзя выразить аффинной комбинацией параметров сети после нормализации, условная нормализация не поможет.
Пример
Рисунок [math]5[/math] . Точность распознавания в зависимости от итерации обучения. Оранжевая кривая изображает результаты для модели с использованием пакетной нормализации, синяя кривая — без. Иллюстрация из статьи.
Рисунок [math]6[/math] . Точность распознавания в зависимости от итерации обучения c использованием сигмоиды в качетсве функции активации. Иллюстрация из статьи.
Приведем пример демонстрирующий работу пакетной нормализации. Рассмотрим задачу распознавания рукописных цифр на известном датасете MNIST [5] . Для решения задачи будет использоваться обычная нейронная сеть с [math]3[/math] скрытыми полносвязными слоями по [math]100[/math] узлов в каждом. Функция активации — ReLU. Выходной слой содержит [math]10[/math] узлов. Размер пакета равен [math]60[/math] . Сравниваются две одинаковые модели, но в первой перед каждым скрытым слоем используется пакетная нормализация, а во второй — нет. Темп обучения равен [math]0.01[/math] . Веса инициализированы значениями с малой дисперсией.
На Рисунке [math]5[/math] изображены два графика, показывающие разницу между моделями. Как видно, обе модели достигли высокой точности, но модель с использованием пакетной нормализации достигла точности более [math]90\%[/math] быстрее, почти сразу, и достигла максимума, примерно, уже на [math]10000[/math] итераций. Однако, модель без пакетной нормализации достигла скорости обучения примерно [math]510[/math] пакетов в секунду, а модель с использованием пакетной нормализации — [math]270[/math] . Однако, как можно видеть, пакетная нормализация позволяет выполнить меньшее количество итераций и, в итоге, сойтись за меньшее время.
На Рисунке [math]6[/math] изображен график, сравнивающий точно такие же модели, но с использованием сигмоиды в качестве функции активации. Такая конфигурация моделей требует большего времени, чтобы начать обучение. В итоге, модель обучается, но на это потребовалось более [math]45000[/math] итераций, чтобы получить точность более [math]80\%[/math] . При использовании пакетной нормализации получилось достичь точность более [math]90\%[/math] примерно за [math]1000[/math] итераций.
Реализации
Механизм пакетной нормализации реализован практически во всех современных инструментариях для машинного обучения, таких как: TensorFlow [6] , Keras [7] , CNTK [8] , Theano [9] , PyTorch [10] и т.д.
Приведем пример [11] применения пакетной нормализации с использованием библиотеки TensorFlow на языке программирования Python [12] :
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)
Модификации
Существует несколько модификаций и вариаций метода пакетной нормализации:
- Тим Койманс [13] в 2016 г. предложил способ применения пакетной нормализации к рекуррентным нейронным сетям;
- Расширение метода пакетной нормализации было предложено Ликси Хуангом [14] в 2018 г. Метод получил название декоррелированная пакетная нормализация (англ. Decorrelated Batch Normalization). В данном методе кроме операций масштабирования и сдвига была предложено использование специальной функции затирания данных;
- Джимми Лей Ба [15] в 2016 г. предложил метод нормализации слоев (англ. Layer Normalization), который решает проблему выбора размера пакета;
- В работе Сергея Иоффе [16] в 2017 г. было представлено расширение метода пакетной нормализации: пакетная ренормализация (англ. Batch Renormalization). Данный метод улучшает пакетную нормализацию, когда размер пакетов мал и не состоит из независимых данных;
- Метод потоковой нормализации (англ. Streaming Normalization) был предложен Кифэном Ляо [17] в 2016 г. Данный метод убирает два ограничения пакетной нормализации: использование при online-обучении и использование в рекуррентных нейронных сетях.
См. также
- Глубокое обучение
- Практики реализации нейронных сетей
- Настройка глубокой сети
Примечания
- ↑Ioffe S., Szegedy C. — Batch normalization: Accelerating deep network training by reducing internal covariate shift, 2016
- ↑Метод стохастического градиента
- ↑ 3,03,13,2A Learned Representation for Artistic Style
- ↑Modulating early visual processing by language
- ↑Датасет MNIST
- ↑TensorFlow
- ↑Keras
- ↑CNTK
- ↑Theano
- ↑PyTorch
- ↑Batch normalization: theory and how to use it with Tensorflow
- ↑Язык программирования Python
- ↑Cooijmans T. — Recurrent batch normalization, 2016
- ↑Huang L. — Decorrelated Batch Normalization, 2018
- ↑Ba J. L., Kiros J. R., Hinton G. E. — Layer normalization, 2016
- ↑Ioffe S. — Batch renormalization: Towards reducing minibatch dependence in batch-normalized models, 2017
- ↑Liao Q., Kawaguchi K., Poggio T. — Streaming normalization: Towards simpler and more biologically-plausible normalizations for online and recurrent learning, 2016
Источники информации
- Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
- Glossary of Deep Learning: Batch Normalisation
- Understanding the backward pass through Batch Normalization Layer
- Deeper Understanding of Batch Normalization with Interactive Code in Tensorflow
- Batch Normalization in Deep Networks
- Batch Normalization — Lesson
- A Learned Representation for Artistic Style
Эпохи
Одна эпоха — это когда ВЕСЬ набор данных передается вперед и назад через нейронную сеть только ОДИН РАЗ.
Поскольку одна эпоха слишком велика для одновременной подачи на компьютер, мы делим ее на несколько меньших партий.
Почему мы используем более одной эпохи?
Я знаю, что не имеет смысла начинать с этого — передачи всего набора данных через нейронную сеть недостаточно. И нам нужно передать полный набор данных несколько раз в одну и ту же нейронную сеть. Но имейте в виду, что мы используем ограниченный набор данных и для оптимизации обучения и графика, который мы используемГрадиентный спусккоторый являетсяитеративныйпроцесс. Так,Обновление весов за один проход или за одну эпоху недостаточно.
Одна эпоха приводит к недооценке кривой на графике (ниже).
По мере того как количество эпох увеличивается, все большее количество раз изменяется вес в нейронной сети, и кривая идет отunderfittingвоптимальныйвпереобучениякривая.
Итак, каковы правильные числа эпох?
К сожалению, нет правильного ответа на этот вопрос. Ответ различен для разных наборов данных, но вы можете сказать, что количество эпох связано с тем, насколько разнообразны ваши данные . просто пример — у вас есть только черные кошки в вашем наборе данных или это намного более разнообразный набор данных?
Размер партии
Общее количество обучающих примеров, представленных в одной партии.
Заметка:Размер партии и количество партий — это две разные вещи.
Но что такое партия?
Как я уже сказал, вы не можете сразу передать весь набор данных в нейронную сеть. Так что выразделите набор данных на количество партий или наборов или частей.
Точно так же, как вы делите большую статью на несколько наборов / партий / частей, таких как «Введение», «Градиентный спуск», «Эпоха», «Размер партии» и «Итерации», что позволяет легко прочитать всю статью для читателя и понять ее.
Итерации
Чтобы получить итерации, вам просто нужно знать таблицы умножения или иметь калькулятор.
Итерации — это количество пакетов, необходимое для завершения одной эпохи.
Заметка:Количество пакетов равно количеству итераций за одну эпоху.
Допустим, у нас есть 2000 учебных примеров, которые мы собираемся использовать.
Мы можем разделить набор данных 2000 примеров на пакеты по 500, тогда для завершения 1 эпохи потребуется 4 итерации.
Где Размер партии равен 500, а число итераций равно 4, для 1 полной эпохи.
Следуй за мной по средний чтобы получить аналогичные сообщения.
Любые комментарии или если у вас есть какие-либо вопросы,напишите это в комментарии.
Хлопай! Поделиться этим! Подписывайтесь на меня !
Рад быть полезным. престижность . ..