Ile danych potrzebujesz do splotowej sieci neuronowej?


15

Jeśli mam splotową sieć neuronową (CNN), która ma około 1 000 000 parametrów, ile danych treningowych jest potrzebnych (zakładam, że wykonuję stochastyczne obniżanie gradientu)? Czy jest jakaś reguła?

Dodatkowe uwagi: Kiedy wykonałem stochastyczne opadanie gradientu (np. 64 łaty na 1 iterację), po ~ 10000 iteracjach dokładność klasyfikatora może osiągnąć z grubsza stałą wartość. Czy to oznacza, że ​​niewiele danych jest potrzebnych? Jak dane od 100 do 1000 tysięcy.

Odpowiedzi:


12

Aby dowiedzieć się, czy więcej danych będzie pomocnych, powinieneś porównać wydajność swojego algorytmu na danych szkoleniowych (tj. Danych używanych do trenowania sieci neuronowej) z jego wydajnością na testowaniu danych (tj. Danych, które zrobiła sieć neuronowa nie „patrz” na treningu).

Dobrą rzeczą do sprawdzenia byłby błąd (lub dokładność) w każdym zestawie jako funkcja liczby iteracji. Istnieją dwie możliwości rozwiązania tego:

1) Błąd szkolenia zbiega się do wartości znacznie niższej niż błąd testu. W takim przypadku wydajność algorytmu prawie na pewno poprawi się wraz z większą liczbą danych.

2) Błąd treningowy i błąd testowy są zbieżne do mniej więcej tej samej wartości (przy czym błąd treningowy nadal prawdopodobnie jest nieco niższy niż błąd testowy). W takim przypadku dodatkowe dane same w sobie nie pomogą algorytmowi. Jeśli potrzebujesz lepszej wydajności niż w tym momencie, powinieneś spróbować dodać więcej neuronów do ukrytych warstw lub dodać więcej ukrytych warstw. Jeśli dodasz wystarczającą liczbę ukrytych jednostek, zauważysz, że błąd testowy stanie się zauważalnie wyższy niż błąd szkoleniowy, a więcej danych pomoże w tym momencie.

Aby uzyskać bardziej dokładne i pomocne wprowadzenie do podejmowania tych decyzji, gorąco polecam kurs Coursera Andrew Ng , w szczególności lekcje „Ocena algorytmu uczenia się” i „Odchylenie vs. odchylenie”.


3

Naiwną odpowiedzią jest to, że zawsze potrzeba więcej danych. Iteracja po tym samym zestawie danych, mówiącym o kolejnych epokach, pomaga „udoskonalić” wynik, ale nie poprawia się go tak bardzo, jak posiadanie większej ilości danych.

Jako przykład trenuję sieć do modelowania zdań i testowania, czy potrzebuję więcej danych, próbowałem podzielić mój zbiór danych szkoleniowych na mniejszy podzbiór i próbowałem go przetestować.

Korzystając z całego zestawu danych i szkolenia dla 10 iteracji uzyskałem 93% dokładności mojego testu porównawczego i ciągle się poprawiam. Zamiast tego, gdy iterowałem na 10% zbioru danych dla iteracji 100, uzyskałem 85%.

Dlatego zawsze staraj się mieć więcej danych, ale jeśli nie możesz, robienie więcej epok może być przyjemną kompromisem, ale ostatecznie twój model lepiej się zbiera, jeśli karmisz sieć zawsze nowymi danymi.


1
Dziękuję za odpowiedź! Tak, wiem, że im więcej danych masz, tym lepiej będziesz, ale nie jestem pewien, ile dokładnie potrzebujesz danych. Ponieważ nie zawsze możesz mieć więcej danych. Na przykład muszę zatrudnić kogoś, aby
napisał

Czy to oznacza, że ​​jeśli mam mały zestaw danych, mój model nie będzie się zbieżny?
samsamara,

3

Najważniejsze jest to, że próbki w twoich danych są dobrze rozłożone, ponieważ bez względu na to, ile masz danych, więcej danych zawsze będzie lepszych. W końcu, jeśli spróbujesz nauczyć się odróżniać zdjęcia kotów i psów, nie możesz oczekiwać, że Twój model będzie działał dobrze, jeśli tylko karmisz go obrazami kotów.

Jak sugeruje odpowiedź Kevin L. , warto rozważyć różnicę między błędem treningu a błędem testu. Jeśli dane testowe są niezależne od danych treningowych, daje to wskazówkę, jak dobrze twój model uogólnia dane niedostępne. Chciałbym dodać do tego fakt, że duża różnica między błędem treningu a błędem testowym mówi tylko, że twój model nie uogólnia się dobrze, tj. Przepełniasz dane treningowe. Więcej danych prawdopodobnie pomoże, ponieważ teraz sieć musi również modelować dodatkowe punkty danych, a zatem nie może już tak bardzo się do nich nadużywać. Warto jednak zmienić model, aby lepiej uogólniał. Ten rozdział doskonałej książki wyjaśnia, jakie rodzaje regularyzacji istnieją i jak można je stosować w sieciach, aby uzyskać lepszą generalizację.

Jeśli szukałeś bardziej ilościowej miary, niedawno znalazłem to pytanie na quora. Chodzi o auto-koder, ale myślę, że powinien on również dotyczyć twojego przykładu. Nie mam pojęcia, czy jest to poprawne (proszę dać mi znać), ale chciałbym uzasadnić, że na przykład w przypadku MNIST można argumentować, że próbujesz zmniejszyć obrazy maksymalnie o 28 * 28 * 8 * 10 000 = 62 720 000 bity entropia do dziesięciu klas w kodowaniu pojedynczym z 10 * 10 * 10 000 = 1 000 000 bitów entropii. Ponieważ interesuje nas tylko 1 000 000 bitów entropii na wyjściu, możemy powiedzieć, że przy 1 000 000 parametrów każdy parametr reprezentuje pojedynczy bit, który wynosi 1e-4 bity na próbkę. Oznacza to, że potrzebujesz więcej danych. Lub masz za dużo parametrów, ponieważ np. Przy 100 parametrach masz 10 000 bitów na parametr, a zatem 1 bit na próbkę. Jednak,


Dzięki za Twoją sugestię. Myślę, że w dzisiejszych czasach ludzie wymyślają inną strategię, aby zmniejszyć liczbę danych dla określonego zadania.
RockTheStar

0

Inną metodą ogólnie stosowaną do ustalenia, czy sieć nauczyła się wystarczającej liczby funkcji, jest wizualizacja początkowych filtrów. Jeśli sieć jest dobrze wyszkolona, ​​powinna wyświetlać filtr gładki. Filtr hałaśliwy ogólnie wskazuje, że sieć nie została wystarczająco przeszkolona lub że jest przeładowana. Aby uzyskać więcej informacji przeczytaj tę stronę .

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.