Епоха проти ітерації при навчанні нейронних мереж


Відповіді:


574

У термінології нейронної мережі:

  • одна епоха = один перехід вперед і один зворотний прохід з усіх прикладів тренувань
  • розмір партії = кількість навчальних прикладів в одному проході вперед / назад. Чим більший розмір партії, тим більше місця в пам'яті вам знадобиться.
  • кількість ітерацій = кількість проходів, кожен прохід, використовуючи [batch size] кількість прикладів. Щоб було зрозуміло, один прохід = один передній прохід + один зворотний прохід (ми не вважаємо прохідний і зворотний прохід як два різні проходи).

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

FYI: Розмір партії компромісу порівняно з кількістю ітерацій для тренування нейронної мережі


Термін "партія" неоднозначний: деякі люди використовують його для позначення всього навчального набору, а деякі використовують його для позначення кількості прикладів тренувань в одному проході вперед / назад (як я це робив у цій відповіді). Щоб уникнути цієї неоднозначності та уточнити, що партія відповідає кількості прикладів тренувань в одному проході вперед / назад, можна використовувати термін міні-пакет .


37
Я збентежений. Чому б ви тренувались не одну епоху - за всіма даними не один раз? Чи це не призвело б до надмірного оздоблення?
Субрікет

29
@Soubriquet Нейронні мережі, як правило, тренуються за допомогою ітеративного методу оптимізації (більшу частину часу, градієнтного спуску), якому часто потрібно виконати кілька проходів на тренувальному наборі, щоб отримати хороші результати.
Franck Dernoncourt

6
Але якщо навчальних зразків багато, скажімо, 1 мільйон доларів, буде достатньо лише однієї епохи? Що зазвичай роблять люди, якщо навчальний набір дуже великий? Просто розділіть навчальний набір на партії і просто виконайте одну епоху?
pikachuchameleon

5
@pikachuchameleon Це залежить від складності завдання: однієї епохи в деяких випадках справді може бути достатньо.
Франк Дернонкурт

9
@MaxPower - зазвичай цей крок робиться після кожної ітерації , як випливало з відповіді Франка Дернонкурта; це те, що ми робимо з інформацією із зворотного проходу. У міні-пакетному градієнті спуску з m ітераціями за епоху ми оновлюємо параметри m разів за епоху.
дан mackinlay

142

Епоха та ітерація описують різні речі.


Епоха

Епоха описує кількість разів алгоритм бачить весь набір даних. Отже, щоразу, коли алгоритм бачив усі вибірки в наборі даних, епоха завершується.

Ітерація

Ітерації описують кількість разів в партію даних , переданих через алгоритм. Що стосується нейронних мереж, то це означає прохід вперед і назад . Отже, кожного разу, коли ви передаєте пакет даних через мережу NN, ви виконуєте ітерацію .


Приклад

Приклад може зробити це зрозумілішим.

Скажімо, у вас є набір даних з 10 прикладів (або зразків). У вас розмір партії 2, і ви вказали, що хочете, щоб алгоритм працював протягом 3 епох.

Тому в кожну епоху у вас 5 партій (10/2 = 5). Кожна партія передається через алгоритм, тому у вас є 5 ітерацій за епоху. Оскільки ви вказали 3 епохи, у вас є 15 ітерацій (5 * 3 = 15) для тренувань.


15
Чи можете ви пояснити, чи ваги оновлюються після кожної епохи чи після кожної ітерації?
Успадкований Geek

7
@InheritedGeek ваги оновлюються після кожної партії не епохи чи ітерації.
thisisbhavin

2
@bhavindhedhi 1 партія = 1 ітерація, чи не так?
Бджола

2
@ Bee Ні, візьміть, наприклад, 10000 навчальних зразків і 1000 зразків на партію, тоді для завершення 1 епохи знадобиться 10 ітерацій.
thisisbhavin

4
@bhavindhedhi Я думаю, що бджола просила, що у вашому прикладі 10000 загальних зразків з 1000 на партію ви фактично маєте 10 загальних партій, що дорівнює 10 ітерацій. Я думаю, що це має сенс, але не впевнений, чи правильно це інтерпретувати.
Майкл Ду

24

Багато алгоритмів навчання нейронної мережі передбачають проведення декількох презентацій всього набору даних у нейронній мережі. Часто одиничне представлення всього набору даних називають "епохою". На відміну від цього, деякі алгоритми представляють дані нейронної мережі одночасно.

"Ітерація" - набагато більш загальний термін, але оскільки ви запитали про це разом з "епохою", я припускаю, що ваше джерело має на увазі представлення одного випадку в нейронній мережі.


3
чудово, ви можете звернутися до публікації, де це детально?
Олексій

17

Щоб зрозуміти різницю між ними, ви повинні зрозуміти алгоритм спуску градієнта та його варіанти .

Перш ніж розпочати з фактичної відповіді, я хотів би побудувати деякі передумови.

Партія повний набір даних. Її розмір - це загальна кількість прикладів тренувань у доступному наборі даних.

Міні-пакетний розмір - це кількість прикладів, які алгоритм навчання обробляє за один прохід (вперед і назад).

Міні-партія невелика частина набору даних даного міні-розміру партії .

Ітерації - це кількість партій даних, які бачив алгоритм (або просто кількість проходів, які алгоритм здійснив у наборі даних).

Епохи - це кількість разів, коли алгоритм навчання бачить повний набір даних. Тепер це може не дорівнювати кількості ітерацій , оскільки набір даних також може бути оброблений міні-партіями, по суті, один прохід може обробити лише частину набору даних. У таких випадках кількість ітерацій не дорівнює кількості епох .

У випадку спуску градієнта партії вся партія обробляється на кожному тренувальному проході. Тому оптимізатор градієнтного спуску призводить до більш плавної конвергенції, ніж міні-пакетний градієнт, але це потребує більше часу. Падіння градієнта партії гарантовано знайде оптимум, якщо він існує.

Стохастичний градієнтний спуск - це окремий випадок міні-пакетного градієнтного спуску, в якому розмір міні-партії дорівнює 1 .

Пакетний градієнт спуск проти міні-пакетного градієнта спуску

Порівняння партійних, стохастичних та міні-партійних градієнтних спусків.


12

У вас є дані про тренування, які ви переміщуєте та вибираєте з них міні-партії. Коли ви регулюєте ваги та ухили за допомогою однієї міні-партії, ви виконали одну ітерацію. Як тільки ви закінчите свої міні-партії, ви закінчили епоху. Потім ви знову перетасуєте свої дані тренувань, знову вибираєте міні-партії та повторіть повторення. Це була б ваша друга епоха.


Чи може це бути пов'язано з перехресною валідацією?
sk

8

Як правило, ви розділите свій тестовий набір на невеликі партії для того, щоб мережа вчилася, і змушувати навчання проходити крок за кроком через вашу кількість шарів, застосовуючи градієнтний спуск увесь вниз. Всі ці маленькі кроки можна назвати ітераціями .

An епоха відповідає всій підготовки пущений по всій мережі один раз. Це може бути корисним для обмеження цього, наприклад, для боротьби з надмірною обробкою.


7

Епоха містить кілька ітерацій. Це насправді така «епоха». Давайте визначимо «епоху» як кількість ітерацій над набором даних для тренування нейронної мережі.


4
епоха - це не число ... я думаю, це могло б зробити перефразовування.
Nikana Reklawyks

Зрозуміло, що це неправильно: епоха - це кількість епізодів або партій, така що модель бачила всі дані тренувань за один раз.
ДжонАллен

7

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


6

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


5

Я здогадуюсь у контексті термінології нейронної мережі:

  • Епоха: Коли ваша мережа закінчує весь навчальний набір (тобто один раз для кожного навчального екземпляра), вона завершує одну епоху .

Для того щоб визначити ітерацію (він же кроки ), спочатку потрібно знати про розмір партії :

  • Розмір партії: Ви, мабуть, не хотіли б обробляти цілі навчальні екземпляри за один перехід вперед, оскільки це неефективно і потребує величезної кількості пам'яті. Отже, що зазвичай робиться - це розділити навчальні екземпляри на підмножини (тобто партії), виконати один прохід по вибраному підмножині (тобто пакетному), а потім оптимізувати мережу за допомогою зворотного розповсюдження. Кількість навчальних екземплярів у підмножині (тобто пакетній) називається batch_size .

  • Ітерація: (інакше навчальні етапи) Ви знаєте, що ваша мережа повинна пройти всі навчальні екземпляри за один прохід, щоб завершити одну епоху. Але зачекайте! коли ви розбиваєте свої навчальні екземпляри на партії, це означає, що ви можете обробити лише одну партію (підмножину тренувальних екземплярів) за один перехід, тому що з іншими партіями? Тут грає термін Ітерація :

    • Визначення: Кількість переходів вперед (Кількість створених вами партій), які ваша мережа повинна зробити для завершення однієї епохи (тобто, переходу всіх навчальних екземплярів), називається Ітерацією .

Наприклад, якщо у вас є 1000 навчальних екземпляри , і ви хочете зробити дозування з розміром 10; вам потрібно зробити 10000/10 = 1000 ітерацій, щоб завершити одну епоху.

Сподіваюся, що це може відповісти на ваше запитання!


3

епоха - це ітерація підмножини зразків для навчання, наприклад, алгоритм спуску градієнта в нейтральній мережі. Хороша довідка: 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)

Подивіться на код. Для кожної епохи ми випадково генеруємо підмножину входів для алгоритму спуску градієнта. Чому епоха ефективна, також пояснено на сторінці. Будь ласка, подивіться.


1

епоха

Повний навчальний пропуск по всьому набору даних таким чином, щоб кожен приклад був бачений один раз. Таким чином, епоха представляє навчальні ітерації з розміром партії , де N - загальна кількість прикладів.

ітерація

Одночасне оновлення ваг моделі під час тренувань. Ітерація складається з обчислення градієнтів параметрів щодо втрат на одній партії даних.

як бонус:

партія

Сукупність прикладів, що використовуються в одній ітерації (тобто в одному оновленні градієнта ) навчальної моделі .

Дивіться також розмір партії .

джерело: https://developers.google.com/machine-learning/glossary/


0

1.Епоха - це 1 повний цикл, де Нейронна мережа бачила всі його дані.
2. Можна сказати 100 000 зображень для тренування моделі, однак простору пам’яті може бути недостатньо для опрацювання всіх зображень одночасно, отже, ми розділили навчання моделі на менші шматки даних, що називаються партіями. наприклад, розмір партії становить 100.
3. Нам потрібно охопити всі зображення за допомогою декількох партій. Тож нам знадобиться 1000 ітерацій, щоб охопити всі 100 000 зображень. (100 розмір партії * 1000 ітерацій)
4. Після того, як Нейромережа перегляне цілі дані, вона називається 1 Епоха (Точка 1). Можливо, для навчання моделі може знадобитися кілька епох. (скажемо 10 епох).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.