TL; DR: слишком большой размер мини-партии обычно приводит к снижению точности!
Для тех, кто заинтересован, вот объяснение.
Есть два понятия скорости:
- Вычислительная скорость
- Скорость сходимости алгоритма
Скорость вычислений - это просто скорость выполнения числовых вычислений в аппаратном обеспечении. Как вы сказали, это обычно выше с большим размером мини-партии. Это связано с тем, что библиотеки линейной алгебры используют векторизацию для векторных и матричных операций, чтобы ускорить их за счет использования большего количества памяти. Прибыль может быть значительным до определенного момента. Исходя из моего опыта, есть момент, после которого наблюдается лишь незначительный прирост скорости, если таковой имеется. Суть зависит от набора данных, аппаратного обеспечения и библиотеки, которая используется для численных расчетов (под капотом).
Но давайте не будем забывать, что есть и другое понятие скорости, которое говорит нам, насколько быстро наш алгоритм сходится.
Во-первых, что означает, что наш алгоритм сходится? Что ж, мы должны определить и решить, когда нас устраивает точность или ошибка, которую мы получаем, рассчитанная на основе набора проверки. Мы можем либо определить его заранее и подождать, пока алгоритм не достигнет этой точки, либо мы можем отслеживать процесс обучения и принять решение остановить его, когда ошибка проверки начинает значительно возрастать (модель начинает перебирать набор данных). Мы действительно не должны останавливать это сразу, в первый момент, когда ошибка начинает расти, если мы работаем с мини-пакетами, потому что мы используем Stochastic Gradient Descent, SGD. В случае (полного пакета) градиентного спуска после каждой эпохи алгоритм будет сводиться к минимуму, будь то локальный или глобальный. SGD никогда не останавливается на минимуме. Это продолжает колебаться вокруг этого. Это может продолжаться бесконечно,
Теперь, после всей этой теории, есть «ловушка», на которую мы должны обратить внимание. При использовании меньшего размера партии при расчете ошибки возникает больше шума, чем при использовании большего размера партии. Можно было бы сказать, что это плохо, не так ли? Дело в том, что шум может помочь алгоритму выйти из плохого локального минимума и иметь больше шансов найти либо лучший локальный минимум, либо, мы надеемся, глобальный минимум.
Таким образом, если мы сможем найти лучшее решение быстрее, используя меньший размер пакета вместо большего, просто с помощью «нежелательного» шума, мы можем настроить общее время, необходимое нашему алгоритму для нахождения удовлетворительного Решение и более высокая точность.
Я хочу сказать, что для данной точности (или ошибки) меньший размер партии может привести к сокращению общего времени обучения, а не к увеличению, как полагают многие.
Или, если мы решим сохранить то же время обучения, что и раньше, мы могли бы получить чуть более высокую точность при меньшем размере партии, и мы, скорее всего, получим, особенно если мы правильно выбрали скорость обучения.
Если у вас есть время, ознакомьтесь с этим документом.
Систематическая оценка достижений CNN в ImageNet. В
частности, проверьте «3.7. Размер партии и скорость обучения», а также рисунок 8. Вы увидите, что большие размеры мини-партий приводят к худшей точности даже если скорость обучения настраивается на эвристику.
В целом, размер пакета 32 является хорошей отправной точкой, и вам также следует попробовать использовать 64, 128 и 256. Другие значения (ниже или выше) могут подойти для некоторых наборов данных, но данный диапазон обычно лучше всего подходит для начать экспериментировать с. Хотя до 32 лет он может стать слишком медленным из-за значительно меньшей вычислительной скорости, из-за того, что не использует векторизацию в полной мере. Если вы получаете сообщение об ошибке «недостаточно памяти», попробуйте все равно уменьшить размер мини-пакета.
Таким образом, речь идет не просто об использовании максимально возможного размера мини-пакета, который умещается в памяти.
Чтобы сделать вывод и ответить на ваш вопрос, меньший размер мини-пакета (не слишком маленький) обычно приводит не только к меньшему количеству итераций обучающего алгоритма, чем к большому размеру пакета, но и к более высокой общей точности, т. Е. нейронная сеть, которая работает лучше, в то же время обучения или меньше.
Не забывайте, что более высокий шум может помочь ему выпрыгнуть из плохого локального минимума, а не оставить его застрявшим в нем.