Следует ли рисовать обучающие образцы, выбранные случайным образом для мини-пакетных нейронных сетей, без замены?

18

Мы определяем эпоху как пройденную через все доступные обучающие выборки, а размер мини-пакета как число выборок, по которым мы усредняем, чтобы найти обновления весов / смещений, необходимые для снижения градиента.

Мой вопрос заключается в том, следует ли нам рисовать без замены из набора обучающих примеров, чтобы генерировать каждую мини-серию в течение эпохи. Я чувствую, что нам следует избегать замены, чтобы гарантировать, что мы на самом деле "рисуем все образцы", чтобы соответствовать требованиям конца эпохи, но у меня возникают проблемы с поиском окончательного ответа, так или иначе.

Я пробовал гуглить и читать гл. 1 из нейронных сетей и глубокого обучения Нильсена, но не нашли четкого ответа. В этом тексте Нильсен не указывает, что случайная выборка должна быть сделана без замены, но, похоже, подразумевает, что это так.

При желании можно найти более четкую формализацию обучения в эпоху - /stats//a/141265/131630

Изменить: этот вопрос мне показался похожим, но было неясно, как применить тот факт, что линейность ожидания безразлична к независимости в этой ситуации - Если выборка произойдет с или без замены

бобо
источник
Если нет конкретной причины данных, мини-партия для обучения нейронной сети всегда рисуется без замены. Идея заключается в том, что вы хотите быть где-то посередине между пакетным режимом, который вычисляет градиент со всем набором данных и SGD, который использует только одну случайную величину.
ГорацийT
SGD не ограничивается использованием одной случайной выборки. Этот процесс называется онлайн-обучением. «Крайняя версия градиентного спуска - использовать мини-пакет размером всего 1 ... Эта процедура известна как онлайн, он-лайн или пошаговое обучение». А также: «Идея, называемая стохастическим градиентным спуском, может быть использована для ускорения обучения. Идея состоит в том, чтобы оценить градиент ∇C путем вычисления [it] для небольшой выборки случайно выбранных обучающих входов. Усреднение по этой небольшой выборке .. Мы можем быстро получить хорошую оценку истинного градиента ». Обе цитаты из Nielsen Ch. 1.
bobo

Ответы:

13

Хороший теоретический анализ со схемами замены и без них в контексте итеративных алгоритмов, основанных на случайных ничьих (с которыми обучаются различающие глубокие нейронные сети (DNN)), можно найти здесь

Короче говоря, оказывается, что выборка без замены приводит к более быстрой сходимости, чем выборка с заменой.

Я приведу здесь краткий анализ на основе игрушечного примера, который они предоставляют: допустим, мы хотим оптимизировать следующую целевую функцию:

xopt=argminx12i=1N(xyi)2

где цель . В этом примере мы пытаемся найти оптимальное значение x , учитывая N меток y i, очевидно.yiN(μ,σ2)xNyi

Итак, если бы мы должны были решить для оптимального в вышеупомянутом непосредственно, то мы взяли бы производную функции потерь здесь, установили бы ее в 0, и решили бы для x . Так что для нашего примера выше, потеряxx

L=12i=1N(xyi)2

и это первая производная будет:

δLδx=i=1N(xyi)

Настройка до 0 и решение дляxдает:δLδxx

xopt=1Ni=1Nyi

Другими словами, оптимальным решением является не что иное, как среднее значение выборки всех выборок y .Ny

Теперь, если бы мы не смогли выполнить все вышеперечисленные вычисления одновременно, нам пришлось бы делать это рекурсивно, с помощью приведенного ниже уравнения обновления градиентного спуска:

xi=xi1λi(f(xi1))

и просто вставив наши термины здесь, получаем:

xi=xi1λi(xi1yi)

Если мы запустим выше для всех , тогда мы эффективно выполняем это обновление без замены. Тогда возникает вопрос, можем ли мы также получить оптимальное значение x таким образом? (Помните, что оптимальное значение x - это не что иное, как среднее значение выборки y ). Ответ - да, если вы позволите λ i = 1 / i . Чтобы увидеть, это мы расширяем:i1,2,...Nxxyλi=1/i

xi=xi1λi(xi1yi) xi=xi11i(xi1yi) xi=ixi1(xi1yi)i xi=(i1)xi1+yii ixi=(i1)xi1+yi 

Последнее уравнение, однако, не что иное, как формула для скользящего среднего! Таким образом, поскольку мы перебираем множество из , i = 2 и т. Д. Вплоть до i = N , мы выполняли бы наши обновления без замены, и наша формула обновления дает нам оптимальное решение x , которое является выборочное среднее!i=1i=2i=Nx

NxN=(N1)xN1+yN==>xN=1Ni=1Nyi=μ

В отличие от этого, однако, если бы мы на самом деле рисовали с заменой, тогда, хотя наши ничьи были бы тогда действительно независимыми, оптимизированное значение отличалось бы от (оптимального) среднего значения μ , и квадратная ошибка была бы задана как:xNμ

E{(xNμ)2}

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

Надеюсь, это прояснит это еще немного!

Тарин Зияе
источник
Этот пример использует довольно много допущений, то есть использование квадрата ошибки и выпуклости ландшафта потерь. Сохраняется ли результат, когда эти предположения не выполняются?
Bayerj
@bayerj Это конкретный пример игрушки, да. Однако статья продолжает расширять его для некоторых других дальнейших теоретических случаев. Я полагаю, что другие источники [Boutou, я думаю] показывают эмпирическую поддержку превосходной выборки без замены.
Тарин Зияи
@TarinZiyaee Спасибо за этот ответ - вы можете уточнить λ_k = 1 / k? О каком k мы говорим здесь, k из приведенного выше уравнения? Я не следил за вами здесь, что затрудняло последующее суммирование и заключение. Благодарю.
Бобо
1
@bobo Я постараюсь прояснить пост сегодня вечером.
Тарин Зияи
1
@Bobo Я обновил свой ответ кучу. Пожалуйста, посмотрите и дайте мне знать, если это поможет.
Тарин Зияи
5

Согласно коду в репозитории Nielsen, мини-партии оформляются без замены:

    def SGD(self, training_data, epochs, mini_batch_size, eta, test_data=None):
    n = len(training_data)
    for j in range(epochs):
            random.shuffle(training_data)
            mini_batches = [
                training_data[k:k+mini_batch_size]
                for k in range(0, n, mini_batch_size)
            ]
            for mini_batch in mini_batches:
                self.update_mini_batch(mini_batch, eta)

Мы видим, что в эпоху замены тренировочных образцов не происходит. Интересно, что мы также видим, что Нильсен предпочитает не беспокоиться о корректировке eta(скорости обучения) последнего размера мини-партии, который может иметь не так много обучающих выборок, как предыдущие мини-партии. Предположительно, это продвинутая модификация, которую он оставляет для последующих глав. **

** РЕДАКТИРОВАТЬ: На самом деле, это масштабирование происходит в def update_mini_batchфункции. Например, с весами:

self.weights = [w-(eta/len(mini_batch))*nw for w, nw in zip(self.weights, nabla_w)]     

Это необходимо, потому что последняя мини-партия может быть меньше, чем предыдущие мини-партии, если количество обучающих выборок в мини-партии не делится равномерно на общее количество доступных обучающих выборок.

mylist = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
n = len(mylist)
mini_batch_size = 2
mini_batches = [
    mylist[k:k+mini_batch_size]
    for k in range(0, n, mini_batch_size)
    ]
for mini_batch in mini_batches:
    print(mini_batch)

Выход:

['1', '2']
['3', '4']
['5', '6']
['7', '8']
['9', '10']

Меняется mini_batch_sizeна 3, который не делится поровну на наши 10 тренировочных образцов. Для вывода получаем:

['1', '2', '3']
['4', '5', '6']
['7', '8', '9']
['10']

При оценке диапазона над индексами списка (что-то вроде формы, [x:y]где xи yесть некоторые индексы в списке), если наше правое значение превышает длину списка, python просто возвращает элементы из списка до тех пор, пока значение не выйдет из диапазона индекса ,

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

бобо
источник