Размер партии влияет на регуляризацию. Тренировки на одном примере за раз довольно шумные, что затрудняет их переобучение. Тренировка в партиях сглаживает все, что облегчает переодевание. Перевод обратно на регуляризацию:
- Меньшие партии добавляют регуляризацию.
- Большие партии уменьшают регуляризацию.
Мне также интересно узнать о вашей скорости обучения. Каждый вызов loss.backward()
будет накапливать градиент. Если вы установили, что ваша скорость обучения рассчитана на один пример за раз, а не уменьшаете его для учета накопления партии, то произойдет одно из двух:
Скорость обучения будет быть слишком высоким для накопленного в настоящее время градиента, обучение будет расходиться, а ошибки обучения и проверки будут взрываться.
Скорость обучения не будет слишком высокой, и ничто не будет расходиться. Модель просто будет тренироваться быстрее и эффективнее. Если модель слишком велика для подгонки данных, то ошибка обучения изменится с go на 0, но ошибка проверки взорвется из-за переоснащения.
Обновление
Вот немного больше деталей относительно накопления градиента.
Каждый вызов loss.backward()
будет накапливать градиент, пока вы не сбросите его с помощью optimizer.zero_grad()
. Он будет действовать, когда вы звоните optimizer.step()
, исходя из того, что он накопил.
При написании кода вы вызываете loss.backward()
для каждого прохода через внутренний l oop, затем вы вызовите optimizer.step()
во внешнем l oop перед сбросом. Таким образом, градиент был накоплен, который суммируется по всем примерам в серии, а не только по одному примеру за раз.
При большинстве допущений это сделает градиент, накопленный в партии, больше, чем градиент для один пример. Если все градиенты выровнены, для партий B он будет больше в B раз. Если градиенты равны iid , то это будет больше в 1040 * раз больше.
Если вы не учитываете это, то вы эффективно увеличили скорость обучения на этот коэффициент. Часть этого будет смягчена эффектом сглаживания больших партий, которые затем могут выдержать более высокую скорость обучения. Большие партии уменьшают регуляризацию, более высокая скорость обучения добавляет это обратно. Но это не будет идеальным соответствием для компенсации, поэтому вы все равно захотите откорректировать соответствующим образом.
В общем, всякий раз, когда вы изменяете размер своей партии, вы также хотите перенастроить свою скорость обучения для компенсации.
Lesl ie N. Smith написал несколько отличных работ по методическому подходу к настройке гиперпараметров. Отличное место для начала - Дисциплинированный подход к гиперпараметрам нейронной сети: Часть 1 - скорость обучения, размер партии, импульс и снижение веса . Он рекомендует начать с чтения диаграмм, которые очень хорошо сделаны.