Размер пакета в зависимости от количества итераций для обучения нейронной сети

222

При обучении нейронной сети, какое значение это имеет для установки:

  • размер партии до и количество итераций доab
  • От размера пакета до и количества итераций доcd

где ?ab=cd

Иными словами, предположим, что мы обучаем нейронную сеть с одинаковым количеством обучающих примеров, как установить оптимальный размер пакета и количество итераций? (где размер пакета * количество итераций = количество обучающих примеров, показанных в нейронной сети, причем один и тот же обучающий пример может быть показан несколько раз)

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

Франк Дернонкур
источник
1
Посмотрите этот блог, в котором описано, как выбрать правильный размер партии, сравнивая влияние разных размеров партии на точность набора данных Cifar-10.
Теджа Сринивас

Ответы:

208

Из Нитиш Шириш Кескар, Дхиватса Мудигере, Хорхе Носедал, Михаила Смелянского, Пинг Так Питер Танг. О крупномасштабном обучении для глубокого обучения: разрыв обобщения и острые минимумы. https://arxiv.org/abs/1609.04836 :

Метод стохастического градиентного спуска и его варианты являются алгоритмами выбора для многих задач глубокого обучения. Эти методы работают в режиме малой партии, когда часть обучающих данных, обычно 32-512 точек данных, отбирается для вычисления приближения к градиенту. На практике наблюдалось, что при использовании более крупной партии качество модели значительно ухудшается, если судить по ее способности обобщать.Было предпринято несколько попыток выяснить причину такого обобщения в режиме больших партий, однако точный ответ для этого явления до сих пор неизвестен. В этой статье мы представляем достаточно числовых доказательств, подтверждающих мнение о том, что методы больших партий имеют тенденцию сходиться к точным минимизаторам функций обучения и тестирования - и что острые минимумы приводят к худшему обобщению. Напротив, мелкосерийные методы постоянно сходятся к плоским минимизаторам, и наши эксперименты подтверждают распространенное мнение о том, что это связано с собственным шумом при оценке градиента. Мы также обсуждаем несколько эмпирических стратегий, которые помогают методам больших партий устранить пробел в обобщении и завершить с набором будущих идей исследования и открытых вопросов.

[...]

Отсутствие способности к обобщению связано с тем, что методы больших партий имеют тенденцию сходиться к резким минимизаторам обучающей функции . Эти минимизаторы характеризуются большими положительными собственными значениями в и имеют тенденцию обобщать менее хорошо. Напротив, мелкосерийные методы сходятся к плоским минимизаторам, характеризующимся небольшими положительными собственными значениями . Мы наблюдали, что ландшафт функции потерь в глубоких нейронных сетях таков, что методы с большими партиями почти неизменно притягиваются к областям с резкими минимумами, и что, в отличие от методов с небольшими партиями, не могут покинуть бассейны этих минимизаторов.2f(x)2f(x)

[...]

введите описание изображения здесь

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

Размер скорости обучения ограничен в основном такими факторами, как изгиб функции стоимости. Вы можете думать о градиентном спуске как о линейном приближении к функции стоимости, а затем о движении вниз по этой приблизительной стоимости. Если функция стоимости сильно нелинейна (сильно изогнута), то приближение не будет очень хорошим для очень большого расстояния, поэтому безопасны только небольшие размеры шагов. Вы можете прочитать больше об этом в главе 4 учебника по углубленному обучению по численным вычислениям: http://www.deeplearningbook.org/contents/numeric.html.

Когда вы помещаете m примеров в мини-пакет, вам нужно выполнить O (m) вычисления и использовать O (m) память, но вы уменьшаете количество неопределенности в градиенте только в O (sqrt (m)). Другими словами, снижается предельная отдача от размещения большего количества примеров в мини-пакете. Подробнее об этом вы можете прочитать в главе 8 учебника по углубленному обучению об алгоритмах оптимизации для глубокого обучения: http://www.deeplearningbook.org/contents/optimization.html.

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

Связанный: Пакетный градиентный спуск против стохастического градиентного спуска

Франк Дернонкур
источник
Поскольку batch_size разделяет только набор обучающих данных на партии, имеет ли смысл переупорядочивать набор данных (не временный), чтобы иметь равномерную дисперсию по всем партиям? Это может снизить потребность в оптимизации размера партии, что полезно только для быстрой сходимости. если так, как это будет сделано? Я думал, что это не может обеспечить более плоские минимумы. Был бы признателен за подробное руководство.
user12348
@ user12348 Как вы будете переставлять набор данных? Как вы можете оценить, что данное измерение данных будет производить определенный вектор признаков после обучения?
Облако Чо
46

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

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

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

Конечно, вычисление градиента по всему набору данных стоит дорого. Итак, теперь мы идем в другую крайность. Размер партии всего 1 образец. В этом случае градиент этого образца может привести вас в совершенно неверном направлении. Но, эй, стоимость вычисления одного градиента была довольно тривиальной. Делая шаги в отношении только одного сэмпла, вы немного «бродите», но в среднем вы стремитесь к одинаково разумному локальному минимуму, как при спуске с полным градиентом.

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

С точки зрения вычислительной мощности, в то время как стохастический процесс GD с одной выборкой занимает намного больше итераций, вы в конечном итоге получите его с меньшими затратами, чем полный пакетный режим, «обычно». Вот как говорит Эндрю Нг.

Теперь давайте найдем середину, о которой вы спрашивали. Возможно, мы понимаем, что современные библиотеки BLAS делают вычислительную векторную математику достаточно эффективной, поэтому вычисление 10 или 100 выборок за раз, при условии, что вы правильно векторизовали свой код, будет едва ли более трудоемким, чем вычисление 1 выборки (вы получаете эффективность вызовов памяти и вычислительные приемы, встроенные в наиболее эффективные математические библиотеки). И усреднение по партии из 10, 100, 1000 выборок даст градиент, который является более разумным приближением к истинному, полному градиенту в пакетном режиме. Таким образом, наши шаги теперь более точны, а это означает, что нам нужно меньше из них, чтобы сходиться, и по цене, которая лишь незначительно выше, чем GD для одной выборки.

Оптимизация точного размера мини-партии, которую вы должны использовать, как правило, остается методом проб и ошибок. Запустите несколько тестов для образца набора данных с числами, скажем, от десятков до нескольких тысяч, и посмотрите, какие из них сходятся быстрее всего, а затем продолжайте. Размеры партий в этих диапазонах довольно распространены в литературе. И если ваши данные действительно являются IID, то центральная предельная теорема об изменении случайных процессов также предполагает, что эти диапазоны являются разумным приближением полного градиента.

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

Дэвид Паркс
источник
22

TL; DR: слишком большой размер мини-партии обычно приводит к снижению точности!

Для тех, кто заинтересован, вот объяснение.

Есть два понятия скорости:

  • Вычислительная скорость
  • Скорость сходимости алгоритма

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

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

Во-первых, что означает, что наш алгоритм сходится? Что ж, мы должны определить и решить, когда нас устраивает точность или ошибка, которую мы получаем, рассчитанная на основе набора проверки. Мы можем либо определить его заранее и подождать, пока алгоритм не достигнет этой точки, либо мы можем отслеживать процесс обучения и принять решение остановить его, когда ошибка проверки начинает значительно возрастать (модель начинает перебирать набор данных). Мы действительно не должны останавливать это сразу, в первый момент, когда ошибка начинает расти, если мы работаем с мини-пакетами, потому что мы используем Stochastic Gradient Descent, SGD. В случае (полного пакета) градиентного спуска после каждой эпохи алгоритм будет сводиться к минимуму, будь то локальный или глобальный. SGD никогда не останавливается на минимуме. Это продолжает колебаться вокруг этого. Это может продолжаться бесконечно,

Теперь, после всей этой теории, есть «ловушка», на которую мы должны обратить внимание. При использовании меньшего размера партии при расчете ошибки возникает больше шума, чем при использовании большего размера партии. Можно было бы сказать, что это плохо, не так ли? Дело в том, что шум может помочь алгоритму выйти из плохого локального минимума и иметь больше шансов найти либо лучший локальный минимум, либо, мы надеемся, глобальный минимум.

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

Я хочу сказать, что для данной точности (или ошибки) меньший размер партии может привести к сокращению общего времени обучения, а не к увеличению, как полагают многие.

Или, если мы решим сохранить то же время обучения, что и раньше, мы могли бы получить чуть более высокую точность при меньшем размере партии, и мы, скорее всего, получим, особенно если мы правильно выбрали скорость обучения.

Если у вас есть время, ознакомьтесь с этим документом. Систематическая оценка достижений CNN в ImageNet. В частности, проверьте «3.7. Размер партии и скорость обучения», а также рисунок 8. Вы увидите, что большие размеры мини-партий приводят к худшей точности даже если скорость обучения настраивается на эвристику.

В целом, размер пакета 32 является хорошей отправной точкой, и вам также следует попробовать использовать 64, 128 и 256. Другие значения (ниже или выше) могут подойти для некоторых наборов данных, но данный диапазон обычно лучше всего подходит для начать экспериментировать с. Хотя до 32 лет он может стать слишком медленным из-за значительно меньшей вычислительной скорости, из-за того, что не использует векторизацию в полной мере. Если вы получаете сообщение об ошибке «недостаточно памяти», попробуйте все равно уменьшить размер мини-пакета.

Таким образом, речь идет не просто об использовании максимально возможного размера мини-пакета, который умещается в памяти.

Чтобы сделать вывод и ответить на ваш вопрос, меньший размер мини-пакета (не слишком маленький) обычно приводит не только к меньшему количеству итераций обучающего алгоритма, чем к большому размеру пакета, но и к более высокой общей точности, т. Е. нейронная сеть, которая работает лучше, в то же время обучения или меньше.

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

ivanbgd
источник
14

Я добавляю еще один ответ на этот вопрос, чтобы сослаться на новый (2018) документ конференции ICLR от Google, который почти напрямую касается этого вопроса.

Название: Не снижайте скорость обучения, увеличьте размер партии

https://arxiv.org/abs/1711.00489

Резюме из вышеупомянутой статьи скопировано здесь:

Распространенной практикой является снижение скорости обучения. Здесь мы показываем, что обычно можно получить одинаковую кривую обучения как на тренировочном, так и на тестовом наборе, вместо этого увеличив размер партии во время обучения. Эта процедура успешна для стохастического градиентного спуска (SGD), SGD с импульсом, импульса Нестерова и Адама. Он достигает эквивалентной точности теста после того же количества тренировочных эпох, но с меньшим количеством обновлений параметров, что приводит к большему параллелизму и сокращению времени обучения. Мы можем дополнительно сократить количество обновлений параметров, увеличив скорость обучения ϵ и увеличив размер пакета B∝ϵ. Наконец, можно увеличить коэффициент импульса m и масштаб BÀ1 / (1 − m), хотя это немного снижает точность теста. Кардинально, Наши методы позволяют нам изменять существующие расписания тренировок для больших партий тренировок без настройки гиперпараметров. Мы обучаем ResNet-50 на ImageNet с точностью проверки 76,1% менее чем за 30 минут.

Дэвид Паркс
источник
1
Большее требование к памяти кажется плохим компромиссом для простого избегания уменьшения значения. ИМХО, учитывая, что объем памяти, растущий во время тренировок, делает алгоритм масштабирования менее, а не более.
P-Gn
3

Я показываю некоторые эмпирический опыт здесь . Я провел эксперимент с размером партии 4 и размером 4096. Размер 4096 делает в 1024 раза меньше обратного распространения. Таким образом, моя интуиция состоит в том, что большие партии делают меньше и более грубые шаги поиска для оптимального решения, и поэтому по построению будет меньше шансов сходиться к оптимальному решению.

Ларс Эриксон
источник