При обучении нейронной сети, какое значение это имеет для установки:
- размер партии до и количество итераций до
- От размера пакета до и количества итераций до
где ?
Иными словами, предположим, что мы обучаем нейронную сеть с одинаковым количеством обучающих примеров, как установить оптимальный размер пакета и количество итераций? (где размер пакета * количество итераций = количество обучающих примеров, показанных в нейронной сети, причем один и тот же обучающий пример может быть показан несколько раз)
Я осознаю, что чем больше размер пакета, тем больше памяти требуется, и это часто ускоряет вычисления. Но с точки зрения производительности обученной сети, какая разница?
neural-networks
train
Франк Дернонкур
источник
источник
Ответы:
Из Нитиш Шириш Кескар, Дхиватса Мудигере, Хорхе Носедал, Михаила Смелянского, Пинг Так Питер Танг. О крупномасштабном обучении для глубокого обучения: разрыв обобщения и острые минимумы. https://arxiv.org/abs/1609.04836 :
Кроме того, некоторые хорошие идеи от Иана Гудфеллоу, отвечающие на вопрос, почему не используют весь тренировочный набор для вычисления градиента? на кворе:
Связанный: Пакетный градиентный спуск против стохастического градиентного спуска
источник
Я предполагаю, что вы говорите об уменьшении размера партии в алгоритме мини-пакетного стохастического градиентного спуска и сравнении его с большими размерами партии, требующими меньше итераций.
Андрей Нг. обеспечивает хорошее обсуждение этого и некоторых визуальных эффектов в своем онлайн-классе Coursera по ML и нейронным сетям. Таким образом, остальная часть этого поста - это в основном регургитация его учений из этого класса.
Давайте возьмем две крайности, с одной стороны каждый шаг градиентного спуска использует весь набор данных. Вы вычисляете градиенты для каждого образца. В этом случае вы точно знаете лучшее непосредственно к локальному минимуму. Вы не тратите время на неверное направление. Таким образом, с точки зрения шагов градиентного спуска чисел, вы получите там в наименьшем количестве.
Конечно, вычисление градиента по всему набору данных стоит дорого. Итак, теперь мы идем в другую крайность. Размер партии всего 1 образец. В этом случае градиент этого образца может привести вас в совершенно неверном направлении. Но, эй, стоимость вычисления одного градиента была довольно тривиальной. Делая шаги в отношении только одного сэмпла, вы немного «бродите», но в среднем вы стремитесь к одинаково разумному локальному минимуму, как при спуске с полным градиентом.
Это может быть момент, чтобы указать на то, что я видел некоторые данные литературы позволяют предположить, что, возможно, это подпрыгивая, что 1-образец стохастического градиентного спуска делает может помочь вам отскакивают из локальных минимумов, что полный пакетный режим не избежать, но это спорно. Некоторые другие хорошие ответы здесь решают этот вопрос более прямо, чем я.
С точки зрения вычислительной мощности, в то время как стохастический процесс GD с одной выборкой занимает намного больше итераций, вы в конечном итоге получите его с меньшими затратами, чем полный пакетный режим, «обычно». Вот как говорит Эндрю Нг.
Теперь давайте найдем середину, о которой вы спрашивали. Возможно, мы понимаем, что современные библиотеки BLAS делают вычислительную векторную математику достаточно эффективной, поэтому вычисление 10 или 100 выборок за раз, при условии, что вы правильно векторизовали свой код, будет едва ли более трудоемким, чем вычисление 1 выборки (вы получаете эффективность вызовов памяти и вычислительные приемы, встроенные в наиболее эффективные математические библиотеки). И усреднение по партии из 10, 100, 1000 выборок даст градиент, который является более разумным приближением к истинному, полному градиенту в пакетном режиме. Таким образом, наши шаги теперь более точны, а это означает, что нам нужно меньше из них, чтобы сходиться, и по цене, которая лишь незначительно выше, чем GD для одной выборки.
Оптимизация точного размера мини-партии, которую вы должны использовать, как правило, остается методом проб и ошибок. Запустите несколько тестов для образца набора данных с числами, скажем, от десятков до нескольких тысяч, и посмотрите, какие из них сходятся быстрее всего, а затем продолжайте. Размеры партий в этих диапазонах довольно распространены в литературе. И если ваши данные действительно являются IID, то центральная предельная теорема об изменении случайных процессов также предполагает, что эти диапазоны являются разумным приближением полного градиента.
Точное решение о том, когда прекратить итерации, обычно выполняется путем отслеживания ошибки обобщения по отношению к необученному набору проверки и выбора точки, в которой ошибка проверки находится в своей самой низкой точке. Обучение слишком большому количеству итераций в конечном итоге приведет к переобучению, после чего ваша ошибка в вашем наборе проверки начнет расти. Когда вы видите, что это происходит, поднимитесь и остановитесь в оптимальной точке.
источник
TL; DR: слишком большой размер мини-партии обычно приводит к снижению точности!
Для тех, кто заинтересован, вот объяснение.
Есть два понятия скорости:
Скорость вычислений - это просто скорость выполнения числовых вычислений в аппаратном обеспечении. Как вы сказали, это обычно выше с большим размером мини-партии. Это связано с тем, что библиотеки линейной алгебры используют векторизацию для векторных и матричных операций, чтобы ускорить их за счет использования большего количества памяти. Прибыль может быть значительным до определенного момента. Исходя из моего опыта, есть момент, после которого наблюдается лишь незначительный прирост скорости, если таковой имеется. Суть зависит от набора данных, аппаратного обеспечения и библиотеки, которая используется для численных расчетов (под капотом).
Но давайте не будем забывать, что есть и другое понятие скорости, которое говорит нам, насколько быстро наш алгоритм сходится.
Во-первых, что означает, что наш алгоритм сходится? Что ж, мы должны определить и решить, когда нас устраивает точность или ошибка, которую мы получаем, рассчитанная на основе набора проверки. Мы можем либо определить его заранее и подождать, пока алгоритм не достигнет этой точки, либо мы можем отслеживать процесс обучения и принять решение остановить его, когда ошибка проверки начинает значительно возрастать (модель начинает перебирать набор данных). Мы действительно не должны останавливать это сразу, в первый момент, когда ошибка начинает расти, если мы работаем с мини-пакетами, потому что мы используем Stochastic Gradient Descent, SGD. В случае (полного пакета) градиентного спуска после каждой эпохи алгоритм будет сводиться к минимуму, будь то локальный или глобальный. SGD никогда не останавливается на минимуме. Это продолжает колебаться вокруг этого. Это может продолжаться бесконечно,
Теперь, после всей этой теории, есть «ловушка», на которую мы должны обратить внимание. При использовании меньшего размера партии при расчете ошибки возникает больше шума, чем при использовании большего размера партии. Можно было бы сказать, что это плохо, не так ли? Дело в том, что шум может помочь алгоритму выйти из плохого локального минимума и иметь больше шансов найти либо лучший локальный минимум, либо, мы надеемся, глобальный минимум.
Таким образом, если мы сможем найти лучшее решение быстрее, используя меньший размер пакета вместо большего, просто с помощью «нежелательного» шума, мы можем настроить общее время, необходимое нашему алгоритму для нахождения удовлетворительного Решение и более высокая точность.
Я хочу сказать, что для данной точности (или ошибки) меньший размер партии может привести к сокращению общего времени обучения, а не к увеличению, как полагают многие.
Или, если мы решим сохранить то же время обучения, что и раньше, мы могли бы получить чуть более высокую точность при меньшем размере партии, и мы, скорее всего, получим, особенно если мы правильно выбрали скорость обучения.
Если у вас есть время, ознакомьтесь с этим документом. Систематическая оценка достижений CNN в ImageNet. В частности, проверьте «3.7. Размер партии и скорость обучения», а также рисунок 8. Вы увидите, что большие размеры мини-партий приводят к худшей точности даже если скорость обучения настраивается на эвристику.
В целом, размер пакета 32 является хорошей отправной точкой, и вам также следует попробовать использовать 64, 128 и 256. Другие значения (ниже или выше) могут подойти для некоторых наборов данных, но данный диапазон обычно лучше всего подходит для начать экспериментировать с. Хотя до 32 лет он может стать слишком медленным из-за значительно меньшей вычислительной скорости, из-за того, что не использует векторизацию в полной мере. Если вы получаете сообщение об ошибке «недостаточно памяти», попробуйте все равно уменьшить размер мини-пакета.
Таким образом, речь идет не просто об использовании максимально возможного размера мини-пакета, который умещается в памяти.
Чтобы сделать вывод и ответить на ваш вопрос, меньший размер мини-пакета (не слишком маленький) обычно приводит не только к меньшему количеству итераций обучающего алгоритма, чем к большому размеру пакета, но и к более высокой общей точности, т. Е. нейронная сеть, которая работает лучше, в то же время обучения или меньше.
Не забывайте, что более высокий шум может помочь ему выпрыгнуть из плохого локального минимума, а не оставить его застрявшим в нем.
источник
Я добавляю еще один ответ на этот вопрос, чтобы сослаться на новый (2018) документ конференции ICLR от Google, который почти напрямую касается этого вопроса.
Название: Не снижайте скорость обучения, увеличьте размер партии
https://arxiv.org/abs/1711.00489
Резюме из вышеупомянутой статьи скопировано здесь:
источник
Я показываю некоторые эмпирический опыт здесь . Я провел эксперимент с размером партии 4 и размером 4096. Размер 4096 делает в 1024 раза меньше обратного распространения. Таким образом, моя интуиция состоит в том, что большие партии делают меньше и более грубые шаги поиска для оптимального решения, и поэтому по построению будет меньше шансов сходиться к оптимальному решению.
источник