Эпоха против итерации при обучении нейронных сетей - PullRequest
355 голосов
/ 21 января 2011

В чем разница между эпохой и итерацией при обучении многослойного персептрона?

Ответы [ 10 ]

522 голосов
/ 06 августа 2015

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

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

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

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


Термин «партия» неоднозначен: некоторые люди используют его для обозначения всего учебного набора, а некоторые люди используют его для обозначения количества примеров обучения за один проход вперед / назад (как я делал в этом ответе). Чтобы избежать этой двусмысленности и прояснить, что партия соответствует количеству обучающих примеров за один проход вперед / назад, можно использовать термин мини-партия .

125 голосов
/ 21 июля 2016

Эпоха и итерация описывают разные вещи.


Эпоха

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

итерация

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


Пример * * одна тысяча тридцать одна Пример может прояснить ситуацию. Скажем, у вас есть набор данных из 10 примеров (или образцов). У вас есть размер пакета 2, и вы указали, что хотите, чтобы алгоритм работал в течение 3 эпох. Следовательно, в каждую эпоху у вас есть 5 партий (10/2 = 5). Каждая партия проходит через алгоритм, поэтому у вас есть 5 итераций за эпоху. Поскольку вы указали 3 эпохи, у вас есть 15 итераций (5 * 3 = 15) для обучения.

23 голосов
/ 21 января 2011

Многие алгоритмы обучения нейронной сети включают создание нескольких представлений всего набора данных в нейронной сети.Часто одна презентация всего набора данных называется «эпохой».Напротив, некоторые алгоритмы представляют данные для нейронной сети по одному случаю за раз.

«Итерация» - гораздо более общий термин, но, поскольку вы спрашивали об этом вместе с «эпохой», я предполагаю, что вашИсточник ссылается на представление одного случая нейронной сети.

11 голосов
/ 06 сентября 2016

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

8 голосов
/ 27 октября 2012

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

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

7 голосов
/ 07 января 2012

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

7 голосов
/ 21 января 2011

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

6 голосов
/ 16 июня 2015

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

4 голосов
/ 09 апреля 2019

Чтобы понять разницу между ними, вы должны понимать алгоритм Градиентный спуск и его варианты .

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

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

Размер мини-пакета - это число примеров, которые алгоритм обучения обрабатывает за один проход (вперед и назад).

A Мини-пакет - это небольшая часть набора данных с указанным размером мини-пакета .

Итерации - это количество пакетов данных, просмотренных алгоритмом (или просто число проходов, выполненных алгоритмом в наборе данных).

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

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

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

Batch gradient descent vs Mini-batch gradient descent

Comparison of batch, stochastic and mini-batch gradient descents.

3 голосов
/ 20 ноября 2015

эпоха - это итерация подмножества выборок для обучения, например, алгоритм градиентного спуска в нейтральной сети.Хорошая ссылка: http://neuralnetworksanddeeplearning.com/chap1.html

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

def SGD(self, training_data, epochs, mini_batch_size, eta,
        test_data=None):
    """Train the neural network using mini-batch stochastic
    gradient descent.  The "training_data" is a list of tuples
    "(x, y)" representing the training inputs and the desired
    outputs.  The other non-optional parameters are
    self-explanatory.  If "test_data" is provided then the
    network will be evaluated against the test data after each
    epoch, and partial progress printed out.  This is useful for
    tracking progress, but slows things down substantially."""
    if test_data: n_test = len(test_data)
    n = len(training_data)
    for j in xrange(epochs):
        random.shuffle(training_data)
        mini_batches = [
            training_data[k:k+mini_batch_size]
            for k in xrange(0, n, mini_batch_size)]
        for mini_batch in mini_batches:
            self.update_mini_batch(mini_batch, eta)
        if test_data:
            print "Epoch {0}: {1} / {2}".format(
                j, self.evaluate(test_data), n_test)
        else:
            print "Epoch {0} complete".format(j)

Посмотрите на код.Для каждой эпохи мы случайным образом генерируем подмножество входных данных для алгоритма градиентного спуска.Почему эпоха эффективна, также объясняется на странице.Пожалуйста, посмотрите.

...