Мы определяем эпоху как пройденную через все доступные обучающие выборки, а размер мини-пакета как число выборок, по которым мы усредняем, чтобы найти обновления весов / смещений, необходимые для снижения градиента.
Мой вопрос заключается в том, следует ли нам рисовать без замены из набора обучающих примеров, чтобы генерировать каждую мини-серию в течение эпохи. Я чувствую, что нам следует избегать замены, чтобы гарантировать, что мы на самом деле "рисуем все образцы", чтобы соответствовать требованиям конца эпохи, но у меня возникают проблемы с поиском окончательного ответа, так или иначе.
Я пробовал гуглить и читать гл. 1 из нейронных сетей и глубокого обучения Нильсена, но не нашли четкого ответа. В этом тексте Нильсен не указывает, что случайная выборка должна быть сделана без замены, но, похоже, подразумевает, что это так.
При желании можно найти более четкую формализацию обучения в эпоху - /stats//a/141265/131630
Изменить: этот вопрос мне показался похожим, но было неясно, как применить тот факт, что линейность ожидания безразлична к независимости в этой ситуации - Если выборка произойдет с или без замены
Ответы:
Хороший теоретический анализ со схемами замены и без них в контексте итеративных алгоритмов, основанных на случайных ничьих (с которыми обучаются различающие глубокие нейронные сети (DNN)), можно найти здесь
Короче говоря, оказывается, что выборка без замены приводит к более быстрой сходимости, чем выборка с заменой.
Я приведу здесь краткий анализ на основе игрушечного примера, который они предоставляют: допустим, мы хотим оптимизировать следующую целевую функцию:
где цель . В этом примере мы пытаемся найти оптимальное значение x , учитывая N меток y i, очевидно.yi∼N(μ,σ2) x N yi
Итак, если бы мы должны были решить для оптимального в вышеупомянутом непосредственно, то мы взяли бы производную функции потерь здесь, установили бы ее в 0, и решили бы для x . Так что для нашего примера выше, потеряx x
и это первая производная будет:
Настройка до 0 и решение дляxдает:δLδx x
Другими словами, оптимальным решением является не что иное, как среднее значение выборки всех выборок y .N y
Теперь, если бы мы не смогли выполнить все вышеперечисленные вычисления одновременно, нам пришлось бы делать это рекурсивно, с помощью приведенного ниже уравнения обновления градиентного спуска:
и просто вставив наши термины здесь, получаем:
Если мы запустим выше для всех , тогда мы эффективно выполняем это обновление без замены. Тогда возникает вопрос, можем ли мы также получить оптимальное значение x таким образом? (Помните, что оптимальное значение x - это не что иное, как среднее значение выборки y ). Ответ - да, если вы позволите λ i = 1 / i . Чтобы увидеть, это мы расширяем:i∈1,2,...N x x y λi=1/i
Последнее уравнение, однако, не что иное, как формула для скользящего среднего! Таким образом, поскольку мы перебираем множество из , i = 2 и т. Д. Вплоть до i = N , мы выполняли бы наши обновления без замены, и наша формула обновления дает нам оптимальное решение x , которое является выборочное среднее!i=1 i=2 i=N x
В отличие от этого, однако, если бы мы на самом деле рисовали с заменой, тогда, хотя наши ничьи были бы тогда действительно независимыми, оптимизированное значение отличалось бы от (оптимального) среднего значения μ , и квадратная ошибка была бы задана как:xN μ
что будет положительным значением, и этот простой игрушечный пример может быть расширен до более высоких измерений. Это приводит к тому, что мы хотели бы выполнить выборку без замены в качестве более оптимального решения.
Надеюсь, это прояснит это еще немного!
источник
Согласно коду в репозитории Nielsen, мини-партии оформляются без замены:
Мы видим, что в эпоху замены тренировочных образцов не происходит. Интересно, что мы также видим, что Нильсен предпочитает не беспокоиться о корректировке
eta
(скорости обучения) последнего размера мини-партии, который может иметь не так много обучающих выборок, как предыдущие мини-партии. Предположительно, это продвинутая модификация, которую он оставляет для последующих глав. **** РЕДАКТИРОВАТЬ: На самом деле, это масштабирование происходит в
def update_mini_batch
функции. Например, с весами:Это необходимо, потому что последняя мини-партия может быть меньше, чем предыдущие мини-партии, если количество обучающих выборок в мини-партии не делится равномерно на общее количество доступных обучающих выборок.
Выход:
Меняется
mini_batch_size
на3
, который не делится поровну на наши 10 тренировочных образцов. Для вывода получаем:При оценке диапазона над индексами списка (что-то вроде формы,
[x:y]
гдеx
иy
есть некоторые индексы в списке), если наше правое значение превышает длину списка, python просто возвращает элементы из списка до тех пор, пока значение не выйдет из диапазона индекса ,Таким образом, последняя мини-партия может быть меньше, чем предыдущие мини-партии, но если она будет взвешена одинаково,
eta
то эти обучающие выборки будут вносить больший вклад в обучение, чем выборки в других, более крупных мини-пакетах. Поскольку это только последняя мини-партия, вероятно, о ней не стоит беспокоиться, но ее легко решить, масштабируяeta
по длине мини-партии.источник