Jaka jest różnica między pociągiem, walidacją a zestawem testowym w sieciach neuronowych?

155

Używam tej biblioteki do implementacji agenta uczenia się.

Wygenerowałem przypadki szkoleniowe, ale nie wiem na pewno, jakie są zestawy walidacyjne i testowe.
Nauczyciel mówi:

70% powinno stanowić przypadki pociągów, 10% przypadków testowych, a pozostałe 20% powinny stanowić przypadki walidacyjne.

edytować

Mam ten kod do treningu, ale nie mam pojęcia, kiedy przestać trenować.

  def train(self, train, validation, N=0.3, M=0.1):
    # N: learning rate
    # M: momentum factor
    accuracy = list()
    while(True):
        error = 0.0
        for p in train:
            input, target = p
            self.update(input)
            error = error + self.backPropagate(target, N, M)
        print "validation"
        total = 0
        for p in validation:
            input, target = p
            output = self.update(input)
            total += sum([abs(target - output) for target, output in zip(target, output)]) #calculates sum of absolute diference between target and output

        accuracy.append(total)
        print min(accuracy)
        print sum(accuracy[-5:])/5
        #if i % 100 == 0:
        print 'error %-14f' % error
        if ? < ?:
            break

edytować

Mogę uzyskać średni błąd 0,2 z danymi walidacyjnymi, po może 20 iteracjach treningowych, który powinien wynosić 80%?

średni błąd = suma bezwzględnej różnicy między celem walidacji a wynikiem, przy danych wejściowych / wielkości danych walidacyjnych.

1
        avg error 0.520395 
        validation
        0.246937882684
2
        avg error 0.272367   
        validation
        0.228832420879
3
        avg error 0.249578    
        validation
        0.216253590304
        ...
22
        avg error 0.227753
        validation
        0.200239244714
23
        avg error 0.227905    
        validation
        0.199875013416
Daniel
źródło
1
„… to powinno być 80%?” Nie, średni błąd i procent poprawności to dwie różne rzeczy. Załóżmy, że twoją wartością docelową jest 5,0, a neuron zwrócił 4,8 (tj. Błąd 0,2). W zależności od danych dopuszczalny może być błąd 0,2, więc jeśli błąd jest wystarczająco mały, możesz uznać, że wystąpienie zostało poprawnie określone. Więc jeśli masz 10 celów i twój błąd klasyfikacji dla 7 z nich mieścił się w dopuszczalnym zakresie, to zaklasyfikowałbyś poprawnie 70% danych.
Kiril,
Jakie są kryteria zakończenia kursu wymagane przez Twojego nauczyciela?
Kiril,

Odpowiedzi:

292

Podczas treningu wykorzystywane są zestawy uczące i walidacyjne.

for each epoch
    for each training data instance
        propagate error through the network
        adjust the weights
        calculate the accuracy over training data
    for each validation data instance
        calculate the accuracy over the validation data
    if the threshold validation accuracy is met
        exit training
    else
        continue training

Po zakończeniu treningu biegniesz w kierunku zestawu testów i sprawdzasz, czy dokładność jest wystarczająca.

Zestaw szkoleniowy : ten zestaw danych jest używany do korygowania wag w sieci neuronowej.

Zestaw walidacyjny : ten zestaw danych jest używany w celu zminimalizowania nadmiernego dopasowania. Nie dostosowujesz wag sieci z tym zestawem danych, po prostu sprawdzasz, czy jakikolwiek wzrost dokładności w stosunku do zestawu danych szkoleniowych faktycznie daje wzrost dokładności w stosunku do zestawu danych, który nie był wcześniej pokazywany w sieci, lub przynajmniej sieć nie została w nim przeszkolona (tj. zestaw danych walidacyjnych). Jeśli dokładność zbioru danych uczących wzrasta, ale dokładność zbioru danych walidacyjnych pozostaje taka sama lub spada, oznacza to, że sieć neuronowa jest nadmiernie dopasowana i należy przerwać uczenie.

Zestaw testowy : ten zestaw danych jest używany tylko do testowania ostatecznego rozwiązania w celu potwierdzenia rzeczywistej mocy predykcyjnej sieci.

Kiril
źródło
jego python: xi po prostu nie mogę uzyskać kryteriów zatrzymania .. wartości są zbieżne .. ale zawsze z pewną flutacją ..
Daniel
@Daniel, czy dokładność szkolenia ulega wahaniom lub dokładność walidacji waha się? Możliwe, że Twoja dokładność walidacji waha się, ale jest mniej prawdopodobne, że dokładność treningu będzie się wahać. Kiedy mówisz „input, target = p”, czy to znaczy, że ustawiasz oba na p?
Kiril
Nie jestem zbyt dobry z Pythonem, więc kod wydaje mi się trochę zagmatwany ... generalnie chcesz przestać trenować, gdy dokładność walidacji osiągnie pewien próg, powiedzmy 70% lub 90%, cokolwiek ma sens dla domeny Twoich danych.
Kiril
5
Zbiór walidacyjny jest używany w procesie uczenia. Zestaw testowy nie jest. Zestaw testowy pozwala 1) sprawdzić, czy zestaw uczący był wystarczający i 2) czy zestaw walidacyjny wykonał zadanie zapobiegające nadmiernemu dopasowaniu. Jeśli użyjesz zestawu testowego w procesie uczenia, będzie to po prostu kolejny zestaw walidacyjny i nie pokaże, co się stanie, gdy nowe dane zostaną wprowadzone do sieci.
Anton Andreev
2
@AntonAndreev Nie rozumiem. Zgodnie z twoją odpowiedzią ani te, ani validation setnie test setsą używane do dostrojenia wag sieci neuronowej. Dlaczego nie możesz użyć tego samego zestawu danych, który nie jest używany do trenowania ciężarów, co validation seti test set? Co można zyskać, rozdzielając je?
Gili
77

Zbiór uczący: zbiór przykładów służących do nauki, czyli dopasowania parametrów [tj. Wag] klasyfikatora.

Zestaw walidacyjny : zbiór przykładów używanych do dostrojenia parametrów [tj. Architektury, a nie wag] klasyfikatora, na przykład w celu wybrania liczby ukrytych jednostek w sieci neuronowej.

Zestaw testowy : zestaw przykładów używanych wyłącznie do oceny wydajności [uogólnienia] w pełni określonego klasyfikatora.

Z sekcji ftp://ftp.sas.com/pub/neural/FAQ1.txtJaka jest populacja, próbka, zbiór uczący, zestaw projektowy, walidacja

Powierzchnia błędu będzie inna dla różnych zestawów danych ze zbioru danych (uczenie wsadowe). Dlatego jeśli znajdziesz bardzo dobre lokalne minima dla danych zestawu testowego, może to nie być zbyt dobry punkt, a może to być bardzo zły punkt na powierzchni wygenerowany przez inny zestaw danych dla tego samego problemu. Dlatego trzeba obliczyć taki model, który nie tylko znajdzie dobrą konfigurację wagi dla zbioru uczącego, ale także powinien być w stanie przewidzieć nowe dane (których nie ma w zbiorze uczącym) z dobrym błędem. Innymi słowy, sieć powinna być w stanie uogólniać przykłady, aby poznawać dane, a nie po prostu zapamiętywać lub ładować zestaw szkoleniowy przez nadmierne dopasowanie danych szkoleniowych.

Zestaw danych walidacyjnych to zestaw danych dotyczących funkcji, której chcesz się nauczyć, a których nie używasz bezpośrednio do uczenia sieci. Trenujesz sieć za pomocą zestawu danych, który nazywasz zestawem danych szkoleniowych. Jeśli do trenowania sieci używasz algorytmu opartego na gradiencie, wówczas powierzchnia błędu i gradient w pewnym momencie będą całkowicie zależały od zestawu danych szkoleniowych, a zatem zestaw danych szkoleniowych jest bezpośrednio używany do korygowania wag. Aby upewnić się, że nie przepełniasz sieci, musisz wprowadzić zestaw danych walidacyjnych do sieci i sprawdzić, czy błąd mieści się w jakimś zakresie. Ponieważ zestaw walidacyjny nie jest używany bezpośrednio do korygowania wag sieci, a zatem dobry błąd dla walidacji, a także zestaw testowy wskazuje, że sieć dobrze przewiduje dla przykładów zestawu pociągów,

Wczesne zatrzymanie jest sposobem na przerwanie treningu. Dostępne są różne warianty, główny zarys jest taki, że monitorowane są zarówno błędy zestawu, jak i zestawu walidacyjnego, błąd pociągu maleje z każdą iteracją (wsteczna podpórka i bracia) i początkowo maleje błąd walidacji. Uczenie jest zatrzymywane w momencie, gdy błąd walidacji zaczyna wzrastać. Konfiguracja wagi w tym miejscu wskazuje na model, który dobrze przewiduje dane uczące, a także dane, które nie są widoczne w sieci . Ale ponieważ faktycznie dane walidacyjnewpływa na konfigurację ciężarków pośrednio, aby wybrać konfigurację ciężarków. W tym miejscu pojawia się zestaw testowy. Ten zestaw danych nigdy nie jest używany w procesie uczenia. Po wybraniu modelu na podstawie zestawu walidacyjnego dane zestawu testowego są stosowane do modelu sieci i wykrywany jest błąd dla tego zestawu. Ten błąd jest reprezentatywny dla błędu, którego możemy się spodziewać po zupełnie nowych danych dotyczących tego samego problemu.

EDYTOWAĆ:

Ponadto w przypadku, gdy nie masz wystarczających danych do zestawu walidacyjnego, możesz użyć walidacji krzyżowej, aby dostroić parametry, a także oszacować błąd testu.

phoxis
źródło
11
Wiem, że nie powinienem publikować takich bezsensownych komentarzy, ale chciałem powiedzieć, że bardzo doceniam tę odpowiedź :)
Llamageddon
6

Zestaw do walidacji krzyżowej jest używany do wyboru modelu, na przykład wybiera model wielomianowy z najmniejszą ilością błędów dla danego zestawu parametrów. Zestaw testowy jest następnie używany do zgłaszania błędu uogólnienia w wybranym modelu. Stąd: https://www.coursera.org/learn/machine-learning/lecture/QGKbr/model-selection-and-train-validation-test-sets

user2410953
źródło
1
Ja też chodzę na zajęcia Andrew Ng i zgadzam się z tobą. Zestaw walidacyjny powinien być częścią treningu. Powinien być używany tylko do zmiany hiperparametrów.
Jack Peng
4

Tworzymy zestaw walidacyjny do

  • Zmierz, jak dobrze model uogólnia podczas treningu
  • Powiedz nam, kiedy przestać trenować model; Kiedy utrata walidacji przestaje maleć (a zwłaszcza gdy strata walidacji zaczyna rosnąć, a strata treningowa wciąż maleje)

Dlaczego użyto zestawu walidacyjnego :

Dlaczego użyto zestawu walidacyjnego

Nil Akash
źródło
2

Powiedzmy, że trenujesz model na zbiorze uczącym, a następnie mierzysz jego wydajność na zbiorze testowym. Myślisz, że wciąż jest miejsce na ulepszenia i próbujesz dostosować hiperparametry (jeśli model jest siecią neuronową - hiperparametry to liczba warstw lub węzłów w warstwach). Teraz uzyskasz nieco lepszą wydajność. Jednak gdy model zostanie poddany innym danym (nie w zestawie testowym i uczącym), możesz nie uzyskać tego samego poziomu dokładności. Dzieje się tak, ponieważ wprowadziłeś pewne odchylenie podczas dostosowywania hiperparametrów, aby uzyskać lepszą dokładność zestawu testowego. Zasadniczo dostosowałeś model i hiperparametry, aby stworzyć najlepszy model dla tego konkretnego zestawu treningowego.

Typowym rozwiązaniem jest dalsze dzielenie zestawu uczącego w celu utworzenia zestawu walidacyjnego . Teraz masz

  • zestaw treningowy
  • zestaw testowy
  • zestaw walidacyjny

Postępujesz jak poprzednio, ale tym razem używasz zestawu walidacyjnego do testowania wydajności i dostrajania hiperparametrów. Mówiąc dokładniej, trenujesz wiele modeli z różnymi hiperparametrami w zredukowanym zbiorze uczącym (tj. Pełnym zestawie uczącym minus zbiór walidacyjny) i wybierasz model, który działa najlepiej w zbiorze walidacyjnym.

Po wybraniu najlepszego modelu ze zbioru walidacyjnego trenujesz najlepszy model na pełnym zestawie uczącym (w tym zestawie walidacyjnym), co daje ostateczny model.

Na koniec oceniasz ten ostateczny model na zbiorze testowym, aby uzyskać oszacowanie błędu uogólnienia.

Aditya
źródło
0

Zestaw danych szkoleniowych : próbka danych użytych do dopasowania modelu.

Zestaw danych walidacyjnych : próbka danych użyta do zapewnienia obiektywnej oceny dopasowania modelu do zbioru danych uczących podczas dostrajania hiperparametrów modelu. Ocena staje się bardziej stronnicza, gdy umiejętności w zakresie zbioru danych walidacyjnych są włączone do konfiguracji modelu.

Testowy zestaw danych : próbka danych użyta do zapewnienia obiektywnej oceny ostatecznego dopasowania modelu do zestawu danych uczących.

Farzana Khan
źródło
-15

W prostych słowach zdefiniuj zbiór uczący, zbiór testowy, zbiór walidacyjny

Zestaw treningowy: służy do wyszukiwania najbliższych sąsiadów. Zbiór walidacyjny: służy do znalezienia innego k, które ma zastosowanie do zestawu pociągów. Zestaw testowy: służy do znajdowania maksymalnej dokładności i niewidocznych danych w przyszłości.

Gaurav Pal
źródło