Каков размер пакета в нейронной сети?

176

Я использую Python Keras packageдля нейронной сети. Это ссылка . Is batch_sizeравно числу тестовых образцов? Из Википедии у нас есть эта информация:

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

Выше информация описывает тестовые данные? Это то же самое, что и batch_sizeв керасах (количество выборок на обновление градиента)?

user2991243
источник
3
Приятно видеть курс class.coursera.org/ml-005/lecture/preview , специально для вас неделя 4-6 + 10. Википедия может быть не таким ценным ресурсом для изучения нейронных сетей.
404pio

Ответы:

230

Размер пакета определяет количество выборок, которые будут распространяться по сети.

Например, допустим, у вас есть 1050 обучающих выборок, и вы хотите установить значение, batch_sizeравное 100. Алгоритм берет первые 100 выборок (с 1-го по 100-й) из набора обучающих данных и обучает сеть. Затем он берет вторые 100 выборок (с 101-го по 200-й) и снова обучает сеть. Мы можем продолжать делать эту процедуру, пока мы не распространим все образцы через сеть. Проблема может возникнуть с последним набором образцов. В нашем примере мы использовали 1050, который не делится на 100 без остатка. Самое простое решение - просто получить последние 50 образцов и обучить сеть.

Преимущества использования размера партии <количество всех образцов:

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

  • Обычно сети тренируются быстрее с мини-пакетами. Это потому, что мы обновляем вес после каждого распространения. В нашем примере мы распространили 11 пакетов (10 из них имели 100 выборок и 1 имел 50 выборок), и после каждой из них мы обновляли параметры нашей сети. Если бы мы использовали все образцы во время распространения, мы сделали бы только 1 обновление для параметра сети.

Недостатки использования размера партии <количество всех образцов:

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

Градиентные направления для разных серийных установок

Стохастик - это просто мини-пакет с batch_sizeравным 1. В этом случае градиент меняет свое направление даже чаще, чем мини-пакетный градиент.

itdxer
источник
3
Нет, я не Это популярный метод в нейронных сетях, и эту терминологию вы можете увидеть в разных библиотеках, книгах и статьях. Вы хотите проверять ошибки тестовых данных в каждую эпоху или просто проверять модель после тренировки?
Itdxer
1
Сеть также сходится быстрее, так как количество обновлений значительно выше. Настройка размера мини-пакета - это своего рода искусство, слишком маленькое, и вы рискуете сделать свое обучение слишком стохастическим, более быстрым, но оно превратится в ненадежные модели, слишком большие, и это не уместится в памяти и все еще займет много времени.
Рамалхо
2
Обычно, когда люди говорят онлайн-обучение, они имеют в виду batch_size=1. Идея онлайн-обучения заключается в том, что вы обновляете свою модель, как только видите пример. С большим размером пакета это означает, что сначала вы просматриваете несколько образцов перед обновлением. В РНН размер партии может иметь разные значения. Обычно принято разделять обучающую последовательность на окно фиксированного размера (например, 10 слов). В этом случае включение 100 из этих окон во время обучения будет означать, что у вас есть batch_size=100.
itdxer
1
@ Олег Мельников, если ваша последняя партия имеет значительно меньший размер (скажем, 1 вместо 50), тогда оценка для градиента будет менее точной, и это может немного испортить ваши веса. На изображении выше представьте, что вы делаете 10 обновлений с помощью мини-партии 100 (зеленые линии) и одного с мини-серией 1 (красная линия). Это означает, что в следующую эпоху несколько первых итераций могут начать решение проблемы с последним обновлением мини-пакета 1 из предыдущей эпохи.
itdxer
1
@OlegMelnikov Книга углубленного изучения MIT имеет хорошее объяснение, связанное с этой проблемой (глава 8.1.3): deeplearningbook.org/contents/optimization.html
itdxer
153

В терминологии нейронной сети:

  • одна эпоха = один проход вперед и один проход назад всех обучающих примеров
  • Размер партии = количество обучающих примеров за один проход вперед / назад. Чем больше размер пакета, тем больше места вам понадобится.
  • количество итераций = количество проходов, каждый проход с использованием [размера партии] количество примеров. Чтобы было ясно, один проход = один прямой проход + один обратный проход (мы не считаем прямой проход и обратный проход как два разных прохода).

Пример: если у вас есть 1000 обучающих примеров, а размер пакета равен 500, то для завершения 1 эпохи потребуется 2 итерации.

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

Франк Дернонкур
источник
Но в чем разница между использованием номеров примеров [размер партии] и обучением сети в каждом примере, и переходите к следующим примерам чисел [размер партии]. Поскольку вы пропускаете один пример через сеть и применяете SGD, а затем берете следующий пример и т. Д., Не будет никакой разницы, если размер пакета равен 10, или 1000, или 100000. После того, как число [примеров пакета] выполнено, будет сделан следующий пример следующая партия будет следовать. Это имеет значение только в том случае, если числа примеров [размер пакета] пройдут [количество итераций] раз по сети, а затем перейдут к следующим примерам [размер пакета].
Эрхард Динхобл
Важным отличием является то, что шаг обучения (один шаг) применяется один раз для каждой партии, в то время как вам нужно циклически проходить все партии, чтобы создать одну эпоху. Таким образом, разница также алгоритмична не только в памяти: большие партии означают, что вы усредняете градиент по большему количеству выборок.
Медуз
В чем разница между эпохой и итерациями?
Goldname
2
@Goldname 1 эпоха включает в себя все обучающие примеры, тогда как 1 итерация включает только [размер партии] количество обучающих примеров.
Франк Дернонкур
3

Решая с помощью ЦП задачу оптимизации, вы итеративно применяете алгоритм к некоторым входным данным. На каждой из этих итераций вы обычно обновляете метрику своей задачи, выполняя некоторые вычисления для данных. Теперь, когда размер ваших данных велик, может потребоваться значительное количество времени для завершения каждой итерации и может потребоваться много ресурсов. Поэтому иногда вы выбираете применение этих итеративных вычислений к части данных для экономии времени и вычислительных ресурсов. Эта часть представляет собой batch_size, и этот процесс называется (в Neural Network Lingo) пакетной обработкой данных. Когда вы применяете свои вычисления ко всем своим данным, вы выполняете онлайн-обработку данных. Я предполагаю, что терминология пришла из 60-х и даже раньше. Кто-нибудь помнит. Bat DOS файлы? Но, конечно, воплощенная концепция означает поток или часть данных, которые будут использоваться.

pebox11
источник
2

Документацию Kerasо размере партии можно найти под fitфункцией на странице Модели (функциональный API).

batch_size: Целое число или нет. Количество образцов на обновление градиента. Если не указано, batch_size по умолчанию будет 32.

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

otayeby
источник