Kiedy zaczynałem od sztucznych sieci neuronowych (NN), pomyślałem, że będę musiał walczyć z nadmiernym dopasowaniem jako głównym problemem. Ale w praktyce nie mogę nawet sprawić, aby mój NN przekroczył barierę 20% poziomu błędu. Nie mogę nawet pobić mojego wyniku w losowym lesie!
Szukam bardzo ogólnych lub niezbyt ogólnych wskazówek, co należy zrobić, aby NN zaczął rejestrować trendy w danych.
Do implementacji NN używam Theano Stacked Auto Encoder z kodem z samouczka, który działa świetnie (poziom błędu poniżej 5%) do klasyfikacji zestawu danych MNIST. Jest to perceptron wielowarstwowy, z warstwą softmax na górze, a każdy ukryty później jest wstępnie trenowany jako autoencoder (w pełni opisany w samouczku , rozdział 8). Istnieje ~ 50 funkcji wejściowych i ~ 10 klas wyjściowych. NN ma neurony esicy i wszystkie dane są znormalizowane do [0,1]. Próbowałem wielu różnych konfiguracji: liczba ukrytych warstw i neuronów w nich (100-> 100-> 100, 60-> 60-> 60, 60-> 30-> 15 itd.), Różne uczenie się i szkolenie wstępne stawki itp.
A najlepsze, co mogę uzyskać, to 20% poziom błędu w zestawie sprawdzania poprawności i 40% poziom błędu w zestawie testowym.
Z drugiej strony, kiedy próbuję użyć Losowego lasu (od scikit-learn), łatwo uzyskuję 12% poziom błędu w zestawie sprawdzania poprawności i 25% (!) W zestawie testowym.
Jak to możliwe, że moje głębokie NN ze wstępnym treningiem zachowuje się tak źle? Co powinienem spróbować
Być może zainteresuje Cię następujący artykuł naukowców z Microsoft Research:
Mieli podobne problemy jak ty:
Aby rozwiązać problem, wykorzystali architekturę pominięcia. Dzięki temu przeszkolili bardzo głębokie sieci (1202 warstwy) i osiągnęli najlepszy wynik w konkursie ILSVRC 2015.
źródło