Epoka kontra iteracja podczas treningu sieci neuronowych


Odpowiedzi:


574

W terminologii sieci neuronowej:

  • jedna epoka = jedno przejście do przodu i jedno przejście do tyłu wszystkich przykładów treningu
  • wielkość partii = liczba przykładów treningu w jednym przejściu do przodu / do tyłu. Im większy rozmiar partii, tym więcej miejsca w pamięci potrzebujesz.
  • liczba iteracji = liczba przebiegów, każde przejście z wykorzystaniem [wielkości partii] liczby przykładów. Żeby było jasne, jedno przejście = jedno przejście do przodu + jedno przejście do tyłu (nie liczymy przejścia do przodu i do tyłu jako dwa różne przejścia).

Przykład: jeśli masz 1000 przykładów treningu, a twoja partia to 500, to zajmie 2 iteracje, aby ukończyć 1 epokę.

FYI: Kompromis między wielkością partii a liczbą iteracji w celu wyszkolenia sieci neuronowej


Termin „partia” jest niejednoznaczny: niektórzy używają go do oznaczania całego zestawu treningowego, a niektórzy odnoszą się do liczby przykładów treningowych w jednym przejściu do przodu / do tyłu (tak jak zrobiłem w tej odpowiedzi). Aby uniknąć tej dwuznaczności i wyjaśnić, że partia odpowiada liczbie przykładów treningu w jednym przejściu do przodu / do tyłu, można użyć terminu mini-partia .


37
Jestem zmieszany. Dlaczego miałbyś trenować przez więcej niż jedną epokę - na wszystkich danych więcej niż raz? Czy nie doprowadziłoby to do przeregulowania?
Soubriquet

29
@Soubriquet Sieci neuronowe są zwykle trenowane przy użyciu iteracyjnej metody optymalizacji (przez większość czasu, opadanie gradientu), która często musi wykonać kilka przejść na zestawie treningowym, aby uzyskać dobre wyniki.
Franck Dernoncourt

6
Ale jeśli istnieje wiele próbek treningowych, powiedzmy 1 milion dolarów, czy wystarczy tylko jedna epoka? Co ludzie zazwyczaj robią, jeśli zestaw treningowy jest bardzo duży? Po prostu podzielić zestaw treningowy na partie i po prostu wykonać jedną epokę?
pikachuchameleon

5
@pikachuchameleon Zależy to od złożoności zadania: w niektórych przypadkach wystarczy jedna epoka.
Franck Dernoncourt

9
@ MaxPower - zazwyczaj krok jest wykonywany po każdej iteracji , jak sugeruje odpowiedź Francka Dernoncourta; to właśnie robimy z informacjami z wstecznego przejścia. W mini-serii gradientu schodzenia z m iteracji na epoki, aktualizujemy parametry m razy na epoki.
dan mackinlay

142

Epoka i iteracja opisują różne rzeczy.


Epoka

Epoka opisuje liczbę razy algorytm widzi cały zestaw danych. Tak więc za każdym razem, gdy algorytm widział wszystkie próbki w zbiorze danych, epoka się kończyła.

Iteracja

Iteracja opisuje liczbę razy partię danych przekazywanych przez algorytm. W przypadku sieci neuronowych oznacza to przejście do przodu i przejście do tyłu . Tak więc, za każdym razem, gdy przesyłasz partię danych przez NN, przeprowadzałeś iterację .


Przykład

Przykład może to wyjaśnić.

Załóżmy, że masz zestaw danych zawierający 10 przykładów (lub próbek). Masz wielkość partii 2 i określiłeś, że chcesz, aby algorytm działał przez 3 epoki.

Dlatego w każdej epoce masz 5 partii (10/2 = 5). Każda partia przechodzi przez algorytm, dlatego masz 5 iteracji na epokę. Ponieważ określiłeś 3 epoki, masz w sumie 15 iteracji (5 * 3 = 15) na trening.


15
Czy możesz wyjaśnić, czy wagi są aktualizowane po każdej epoce czy po każdej iteracji?
Dziedziczony Geek

7
@InheritedGeek wagi są aktualizowane po każdej partii nie epoki lub iteracji.
thisisbhavin

2
@bhavindhedhi 1 partia = 1 iteracja, prawda?
Pszczoła

2
@Bee Nie, weź na przykład 10000 próbek szkoleniowych i 1000 próbek na partię, a następnie zajmie 10 iteracji, aby ukończyć 1 epokę.
thisisbhavin

4
@bhavindhedhi Myślę, że to, o co pytała Pszczoła, to to, że w twoim przykładzie 10000 próbek ogółem z 1000 na partię, masz skutecznie 10 całkowitych partii, co odpowiada 10 iteracjom. Myślę, że to ma sens, ale nie jestem pewien, czy to właściwy sposób interpretacji.
Michael Du

24

Wiele algorytmów uczących sieci neuronowej wymaga wykonywania wielu prezentacji całego zestawu danych w sieci neuronowej. Często pojedyncza prezentacja całego zestawu danych nazywana jest „epoką”. Natomiast niektóre algorytmy prezentują dane sieci neuronowej pojedynczo w jednym przypadku.

„Iteracja” jest terminem znacznie bardziej ogólnym, ale skoro pytasz o nią wraz z „epoką”, zakładam, że twoje źródło odnosi się do prezentacji pojedynczego przypadku sieci neuronowej.


3
świetnie, czy możesz odwołać się do publikacji, w której jest to szczegółowo opisane?
Alex,

17

Aby zrozumieć różnicę między nimi, musisz zrozumieć algorytm zniżania gradientu i jego warianty .

Zanim zacznę od właściwej odpowiedzi, chciałbym zbudować trochę tła.

Partia pełna zestawu danych. Jego rozmiar to łączna liczba przykładów szkoleń w dostępnym zestawie danych.

Rozmiar mini-partii to liczba przykładów, które algorytm uczący przetwarza w jednym przebiegu (do przodu i do tyłu).

Mini-partia jest mała część zbioru danych o danym rozmiarze mini-serii .

Iteracje to liczba partii danych, które widział algorytm (lub po prostu liczba przejść, które algorytm wykonał na zbiorze danych).

Epoki to liczba, gdy algorytm uczenia widzi pełny zestaw danych. Teraz może to nie być równe liczbie iteracji , ponieważ zestaw danych można również przetwarzać w mini-partiach, w zasadzie pojedyncze przejście może przetwarzać tylko część zbioru danych. W takich przypadkach liczba iteracji nie jest równa liczbie epok .

W przypadku opadania gradientu partii cała partia jest przetwarzana przy każdym przejściu szkoleniowym. Dlatego optymalizator opadania gradientu zapewnia płynniejszą zbieżność niż opadanie gradientu Mini-wsadowego, ale zajmuje więcej czasu. Opadanie gradientem partii jest gwarantowane, aby znaleźć optymalne, jeśli istnieje.

Stochastyczne zejście gradientowe jest specjalnym przypadkiem zejścia gradientowego w małych partiach, w którym wielkość mini-partii wynosi 1 .

Spadek gradientu wsadowego vs Spadek gradientu mini-okresowego

Porównanie spadków gradientów okresowych, stochastycznych i mini-okresowych.


12

Masz dane treningowe, które tasujesz i wybierasz z nich mini-partie. Kiedy dostosowujesz swoje wagi i odchylenia za pomocą jednej mini-partii, ukończyłeś jedną iterację. Gdy zabraknie ci mini-partii, ukończyłeś epokę. Następnie ponownie przetasujesz dane treningowe, ponownie wybierzesz swoje mini-partie i powtórzysz je wszystkie ponownie. To byłaby twoja druga epoka.


Czy można to powiązać z walidacją krzyżową?
sk

8

Zazwyczaj dzielisz zestaw testowy na małe partie, z których sieć może się uczyć, a trening przechodzi krok po kroku przez liczbę warstw, stosując obniżanie gradientu do samego końca. Wszystkie te małe kroki można nazwać iteracjami .

An epoki odpowiada cały zestaw przechodzi szkolenia w całej sieci jednocześnie. Przydatne może być ograniczenie tego, np. W walce z nadmiernym dopasowaniem.


7

Epoka zawiera kilka iteracji. Właśnie taka jest ta „epoka”. Zdefiniujmy „epokę” jako liczbę iteracji w zbiorze danych w celu wyszkolenia sieci neuronowej.


4
epoka nie jest liczbą ... myślę, że może to zrobić z przeredagowaniem.
Nikana Reklawyks

Przegłosowano, ponieważ jest to błędne: epoka to liczba odcinków lub partii, w wyniku których model widział wszystkie dane treningowe jeden raz.
JohnAllen,

7

W moim rozumieniu, kiedy trzeba trenować NN, potrzebujesz dużego zestawu danych obejmującego wiele elementów danych. podczas szkolenia NN elementy danych przechodzą kolejno do NN, co nazywa się iteracją; Gdy przechodzi cały zestaw danych, nazywa się to epoką.


6

Uważam, że iteracja jest równoważna pojedynczej partii do przodu + backprop w partii SGD. Epoka przegląda cały zestaw danych jeden raz (jak ktoś wspomniał).


5

Myślę, że w kontekście terminologii sieci neuronowej:

  • Epoka: kiedy sieć kończy przeglądanie całego zestawu treningowego (tj. Raz dla każdej instancji treningowej), kończy się jedna epoka .

Aby zdefiniować iterację (aka kroki ), najpierw musisz wiedzieć o wielkości partii :

  • Wielkość partii: Prawdopodobnie nie chciałbyś przetwarzać wszystkich instancji treningowych za jednym przejściem do przodu, ponieważ jest nieefektywna i wymaga dużej ilości pamięci. Często więc dzieli się instancje szkoleniowe na podzbiory (tj. Partie), wykonując jedno przejście przez wybrany podzbiór (tj. Partię), a następnie optymalizując sieć poprzez propagację wsteczną. Liczba instancji szkoleniowych w ramach podzbioru (tj. Partii ) jest nazywana wielkością partii .

  • Iteracja: (inaczej etapy szkolenia) Wiesz, że twoja sieć musi przejść wszystkie instancje szkolenia w jednym przejściu, aby ukończyć jedną epokę. Ale poczekaj! kiedy dzielisz instancje treningowe na partie, oznacza to, że możesz przetwarzać tylko jedną partię (podzbiór instancji treningowych) w jednym przebiegu do przodu, a co z innymi partiami? Tutaj pojawia się termin Iteracja :

    • Definicja: Liczba przejść do przodu (liczba utworzonych partii), które musi wykonać twoja sieć, aby ukończyć jedną epokę (tzn. Przejście przez wszystkie instancje treningowe) nazywa się iteracją .

Na przykład, jeśli masz 1000 instancji treningowych i chcesz wykonać partię o wielkości 10; musisz wykonać 10000/10 = 1000 iteracji, aby ukończyć jedną epokę.

Mam nadzieję, że to może odpowiedzieć na twoje pytanie!


3

epoka jest iteracją podzbioru próbek do treningu, na przykład algorytm spadku gradientu w sieci neutralnej. Dobrym źródłem informacji jest: http://neuralnetworksanddeeplearning.com/chap1.html

Zauważ, że strona ma kod algorytmu spadku gradientu, który używa epoki

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)

Spójrz na kod. Dla każdej epoki losowo generujemy podzbiór danych wejściowych dla algorytmu spadku gradientu. Dlaczego epoka jest skuteczna, wyjaśniono również na stronie. Proszę spojrzeć.


1

epoka

Pełne szkolenie przechodzi przez cały zestaw danych, dzięki czemu każdy przykład był widziany raz. Zatem epoka reprezentuje iteracje treningowe wielkości N / partii , gdzie N jest całkowitą liczbą przykładów.

iteracja

Pojedyncza aktualizacja ciężarów modelu podczas treningu. Iteracja polega na obliczeniu gradientów parametrów w odniesieniu do utraty na pojedynczej partii danych.

jako bonus:

partia

Zbiór przykładów użytych w jednej iteracji (to znaczy jednej aktualizacji gradientu ) szkolenia modelu .

Zobacz także wielkość partii .

źródło: https://developers.google.com/machine-learning/glossary/


0

1.Epoch to 1 pełny cykl, w którym sieć neuronowa widziała wszystkie dane.
2. Można by powiedzieć 100 000 obrazów do trenowania modelu, jednak przestrzeń pamięci może nie być wystarczająca do przetworzenia wszystkich obrazów jednocześnie, dlatego podzieliliśmy szkolenie modelu na mniejsze porcje danych zwane partiami. np. wielkość partii wynosi 100.
3. Musimy pokryć wszystkie obrazy przy użyciu wielu partii. Potrzebujemy więc 1000 iteracji, aby objąć wszystkie 100 000 zdjęć. (100 partii * 1000 iteracji)
4. Gdy sieć neuronowa spojrzy na całe dane, nazywa się to 1 epoką (punkt 1). Może być potrzebne wiele epok, aby wyszkolić model. (powiedzmy 10 epok).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.