Dlaczego powinniśmy tasować dane podczas szkolenia sieci neuronowej?


15

Podczas mini-serii treningu sieci neuronowej usłyszałem, że ważną praktyką jest tasowanie danych treningowych przed każdą epoką. Czy ktoś może wyjaśnić, dlaczego pomieszanie w każdej epoce pomaga?

W wyszukiwarce Google znalazłem następujące odpowiedzi:

  • pomaga szybko zbiegać się treningowi
  • zapobiega to stronniczości podczas treningu
  • uniemożliwia modelowi nauczenie się kolejności szkolenia

Mam jednak problem ze zrozumieniem, dlaczego którykolwiek z tych efektów jest spowodowany losowym tasowaniem. Czy ktoś może podać intuicyjne wyjaśnienie?

Odpowiedzi:


8

Aby spróbować podać inne wyjaśnienie:

Jedną z najpotężniejszych rzeczy w sieciach neuronowych jest to, że mogą one być bardzo złożonymi funkcjami, umożliwiając poznanie bardzo złożonych zależności między danymi wejściowymi i wyjściowymi. Relacje te mogą obejmować rzeczy, których nigdy się nie spodziewałbyś, na przykład kolejność, w jakiej dane są podawane według epoki. Jeśli kolejność danych w każdej epoce jest taka sama, model może wykorzystać to jako sposób na zmniejszenie błędu szkolenia, co jest rodzajem przeregulowania.

W odniesieniu do prędkości: metody mini-wsadowe polegają na stochastycznym spadku gradientu (i ulepszeniach na nim), co oznacza, że ​​polegają na losowości w celu znalezienia minimum. Tasowanie mini-partii sprawia, że ​​gradienty są bardziej zmienne, co może pomóc w zbieżności, ponieważ zwiększa prawdopodobieństwo trafienia w dobrym kierunku (a przynajmniej tak to rozumiem).


1
W jaki sposób sieć neuronowa może nauczyć się kolejności, w jakiej dane są podawane w każdej epoce?
Kod Papież

1
Jednym słowem nie mogą. Jeśli używasz treningu mini-partii (tj. Więcej niż jednej partii na epokę), to kolejność danych może wpływać na szkolenie w tym sensie, że najpierw trenując jedną partię, solver może wejść do określonego regionu (być może zawierającego lokalne minimum ...) zamiast innego. Ale stwierdzenie, że sprzężenie zwrotne NN „uczy się” o porządkowaniu danych, nie jest tak naprawdę prawidłowe, ponieważ każda prognoza jest dokonywana niezależnie od każdej innej prognozy, a kolejność w mini-partiach oczywiście nie będzie miała żadnego wpływu.
Josh

6

Z bardzo uproszczonego punktu widzenia, dane wprowadza się kolejno, co sugeruje, że przynajmniej jest to możliwe na zamówienie Dane mieć wpływ na wyjście. Jeśli kolejność nie ma znaczenia, randomizacja z pewnością nie zaszkodzi. Jeśli kolejność ma znaczenie, randomizacja pomoże wygładzić te losowe efekty, aby nie stały się systematycznym uprzedzeniem. Krótko mówiąc, randomizacja jest tania i nigdy nie boli i często minimalizuje efekty porządkowania danych.


6

Uwaga: w tej odpowiedzi odnoszę się do minimalizacji utraty treningu i nie omawiam kryteriów zatrzymania, takich jak utrata potwierdzenia. Wybór kryteriów zatrzymania nie wpływa na proces / koncepcje opisane poniżej.

Proces uczenia sieci neuronowej polega na znalezieniu minimalnej wartości funkcji utraty , gdzie reprezentuje macierz (lub kilka macierzy) wag między neuronami, a reprezentuje zbiór danych treningowych. Używam indeksu dolnego dla aby wskazać, że nasze minimalizowanie występuje tylko powyżej wag (to znaczy szukamy tak, że jest zminimalizowane), gdy jest ustalony.X(W)WXXWWX

Teraz, jeśli założymy, że mamy elementów w (to znaczy, że wagami w sieci), jest powierzchnią w przestrzeni wymiarowej . Aby dać wizualny analog, wyobraź sobie, że mamy tylko dwie masy neuronów ( ). Zatem ma łatwą interpretację geometryczną: jest powierzchnią w przestrzeni trójwymiarowej. Wynika to z faktu, że dla dowolnej macierzy wag funkcję straty można oszacować na a wartość ta staje się rzędną powierzchni.PWPP+1P=2WX

Ale istnieje problem niewypukłości; opisana przeze mnie powierzchnia będzie miała wiele lokalnych minimów, a zatem algorytmy opadania gradientu są podatne na utknięcie w tych minimach, podczas gdy w pobliżu może znajdować się głębsze / niższe / lepsze rozwiązanie. Jest to prawdopodobne, jeśli pozostaje niezmieniony we wszystkich iteracjach treningowych, ponieważ powierzchnia jest ustalona dla danego ; wszystkie jego funkcje są statyczne, w tym różne minima.XX

Rozwiązaniem tego jest trening mini-partyjny połączony z tasowaniem. Przesuwając rzędy i trenując tylko ich podzbiór podczas danej iteracji, zmienia się z każdą iteracją i jest całkiem możliwe, że nie zostaną wykonane dwie iteracje w całej sekwencji iteracji treningowych i epok dokładnie na tym samym . W rezultacie solver może łatwo „odbić” się od lokalnego minimum. Wyobraź sobie, że solver utknął w lokalnym minimum podczas iteracji podczas szkolenia mini-partii . To lokalne minimum odpowiada ocenianemu przy określonej wartości wag; nazwiemy toXXiXiXi(Wi). W następnej iteracji kształt naszej powierzchni faktycznie się zmienia, ponieważ używamy , to znaczy, że może przyjąć inną wartość niż i jest całkiem możliwe, że nie odpowiada to lokalnemu minimum! Możemy teraz obliczyć aktualizację gradientu i kontynuować trening. Dla jasności: kształt będzie - ogólnie - różnił się od . Zauważ, że mam tu na myśli funkcję straty ocenianą na zestawie treningowym ; jest to kompletna powierzchnia zdefiniowana dla wszystkich możliwych wartościXi+1Xi+1(Wi)Xi(Wi)Xi+1XiXWZamiast oceny tej straty (która jest skalar) o wartości określonej w . Należy również zauważyć, że jeśli mini-partie są używane bez tasowania, nadal istnieje pewien stopień „dywersyfikacji” powierzchni strat, ale będzie ograniczona (i stosunkowo niewielka) liczba unikalnych powierzchni błędów widocznych przez solver (konkretnie, zobaczy to ten sam dokładny zestaw mini-partii - i dlatego straty powierzchni - podczas każdej epoki).W

Jedną rzeczą, której celowo unikałem, była dyskusja na temat wielkości mini-partii, ponieważ istnieje na ten temat milion opinii i ma to znaczące implikacje praktyczne (większą równoległość można osiągnąć przy większych partiach). Uważam jednak, że warto wspomnieć o następujących kwestiach. Ponieważ jest obliczane przez obliczenie wartości dla każdego wiersza (i zsumowanie lub pobranie średniej; tj. Operatora przemiennego) dla danego zestawu macierzy wag , układ rzędów nie ma wpływu przy zastosowaniu pełnego- opadanie gradientu partii (to znaczy, gdy każda partia ma pełny , a iteracje i epoki są takie same).XWX X


Dziękuję za to pomocne wyjaśnienie. Po głębokim przeczytaniu twojej odpowiedzi mam dwa pytania: 1. Wspomniałeś, że mini-partia zapewnia pewien stopień ograniczonej dywersyfikacji. Nie rozumiem, dlaczego to nie wystarczy, aby uniknąć utknięcia w lokalnym minimum. Jeśli solver znajduje się w lokalnych minimach powierzchni jednej partii, z dużym prawdopodobieństwem nie występuje w lokalnych minimach powierzchni następnej partii, a zatem nie powinien się zablokować. 2. W jaki sposób solver zbiega się na powierzchni funkcji utraty, podczas gdy powierzchnia zawsze zmienia się przy użyciu różnych partii?
Kod Papież

Korzyść z dywersyfikacji jest nadal dostępna bez tasowania, ale nie jest tak znacząca, jak w przypadku tasowania, ponieważ stale widzi tę samą sekwencję powierzchni strat, natomiast jeśli użyjemy tasowania, prawdopodobnie nigdy nie zobaczy tej samej dokładnej powierzchni straty więcej niż raz. Jeśli chodzi o kryteria zatrzymania, generalnie napisałem mój tak, że gdy średni procent redukcji strat w określonej liczbie iteracji jest mniejszy niż pewna tolerancja, trening kończy się.
Josh

2
Może tak naprawdę nie odpowiedziałem na twoje pytanie dotyczące minimów lokalnych. Teoretycznie wszystkie te powierzchnie strat powinny wykazywać pewien stopień podobieństwa, ponieważ zakłada się, że rozkład prawdopodobieństwa odpowiedzi (zależny od predyktorów modelu) jest stały w całym zbiorze danych szkoleniowych. Więc jeśli minimum jest wystarczająco głębokie, powinno pojawić się w wielu wielu mini-partiach, dlatego solver raczej się z niego nie odbije. Ale jeśli minimum to po prostu „hałas”, strategia ta powinna działać całkiem dobrze i pozwolić modelowi na kontynuowanie treningu.
Josh

Dzięki. Twoja druga odpowiedź sprawia, że ​​jest zrozumiałe, dlaczego NN zbiega się pomimo różnych powierzchni. Jeśli chodzi o moje pierwsze pytanie, czy słuszne jest stwierdzenie, że posiadanie tej samej sekwencji miałoby po prostu większą możliwość, że „szum” powtarza się na wielu powierzchniach strat partii niż w przypadku tasowania? To jedyne wyjaśnienie, które mogę podać, dlaczego nadal można utknąć w lokalnych minimach, używając mini partii bez tasowania.
Kod Papież

@CodePope Myślę, że to prawda. Ponadto, gdy strata zostanie znacznie zmniejszona od początku treningu, gradienty będą dość małe i może nawet być możliwe, że solver utknie w „pętli”, ponieważ wciąż widzi tę samą sekwencję powierzchni strat. Pamiętaj, że jest to wyjaśnienie spekulacyjne oparte na moim raczej ograniczonym doświadczeniu, więc jeśli masz poważne teoretyczne zainteresowanie tym, lepiej skonsultuj się z ekspertem.
Josh

4

Wyobraź sobie, że kilka ostatnich etykiet minibatchów rzeczywiście ma więcej hałasu. Następnie te partie pociągną ostateczne wyuczone ciężary w złym kierunku. Jeśli za każdym razem tasujesz, szanse na to, że kilka ostatnich partii będzie nieproporcjonalnie głośne, spada.


1

Gdy trenujesz swoją sieć przy użyciu stałego zestawu danych, co oznacza dane, których nigdy nie tasujesz podczas treningu. Jest bardzo prawdopodobne, że otrzymasz ciężarki, które są bardzo wysokie i bardzo niskie, takie jak 40,70, -101,200 ... itd. Oznacza to po prostu, że twoja sieć nie nauczyła się danych treningowych, ale nauczyła się szumu danych treningowych. Klasyczna obudowa modelu typu overfit. Dzięki takiej sieci zobaczysz prognozy dotyczące danych, które wykorzystałeś do treningu. Jeśli użyjesz innych danych do przetestowania, Twój model rozpadnie się. Teraz, kiedy tasujesz dane treningowe po każdej epoce (iteracja całego zestawu), po prostu dodajesz różne dane wejściowe do neuronów w każdej epoce, a to po prostu reguluje wagi, co oznacza, że ​​bardziej prawdopodobne jest uzyskanie „niższych” ciężarów, które są bliższe zeru , a to oznacza, że ​​Twoja sieć może dokonywać lepszych uogólnień.

Mam nadzieję, że to było jasne.


1

Oto bardziej intuicyjne wyjaśnienie:

Podczas korzystania z opadania gradientu chcemy, aby strata została zmniejszona w kierunku gradientu. Gradient oblicza się na podstawie danych z jednej mini-partii dla każdej rundy aktualizacji masy. Chcemy, aby ten mini-okresowy gradient był w przybliżeniu gradientem populacji, ponieważ oczekuje się, że spowoduje to szybszą konwergencję. (Wyobraź sobie, że podajesz do sieci 100 danych klasy 1 w jednej mini-partii, a 100 danych klasy 2 w innej, sieć będzie się unosić. Lepszym sposobem jest karmienie go 50 klasami 1 + 50 klasy 2 w każdej mini-partii.)

Jak to osiągnąć, skoro nie możemy wykorzystać danych o populacji w mini-partii? Sztuka statystyki mówi nam: przetasuj populację, a pierwsze fragmenty danych batch_size mogą reprezentować populację. Dlatego musimy przetasować ludność.

Muszę powiedzieć, że tasowanie nie jest konieczne, jeśli masz inną metodę próbkowania danych z populacji i upewnienia się, że próbki mogą generować rozsądny gradient.

To jest moje zrozumienie. Mam nadzieję, że to pomoże.

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.