Jeśli mamy 10 wektorów własnych, to możemy mieć 10 węzłów neuronowych w warstwie wejściowej. Jeśli mamy 5 klas wyjściowych, to możemy mieć 5 węzłów w warstwie wyjściowej, ale jakie są kryteria wyboru liczby ukrytych warstw w MLP i ile neuronów węzły w 1 ukrytej warstwie?
machine-learning
neural-network
deep-learning
perceptron
Abhishek kumar
źródło
źródło
Odpowiedzi:
ile ukrytych warstw ?
model bez ukrytych warstw rozwiąże dane, które można rozdzielić liniowo . Więc jeśli nie wiesz już, że twoje dane nie są rozdzielane liniowo, weryfikacja tego nie zaszkodzi - po co używać bardziej złożonego modelu niż wymaga tego zadanie? Jeśli da się je rozdzielić liniowo, wtedy zadziała prostsza technika, ale Perceptron również wykona zadanie.
Zakładając, że dane wymagają rozdzielenia metodą nieliniową, zawsze zaczynaj od jednej ukrytej warstwy . Prawie na pewno to wszystko, czego będziesz potrzebować. Jeśli twoje dane można rozdzielić za pomocą MLP, to MLP prawdopodobnie potrzebuje tylko jednej ukrytej warstwy. Jest to teoretyczne uzasadnienie, ale mój powód jest czysto empiryczny: wiele trudnych problemów klasyfikacyjnych / regresyjnych rozwiązuje się za pomocą jednowarstwowych MLP, ale nie przypominam sobie napotkania żadnych wielowarstwowych warstw ukrytych używanych do pomyślnego modelowania danych. -Czy na tablicach ogłoszeń ML, podręcznikach ML, artykułach naukowych itp. Oczywiście istnieją, ale okoliczności uzasadniające ich użycie są empirycznie dość rzadkie.
Ile węzłów w warstwie ukrytej?
Z literatury naukowej MLP. moje własne doświadczenie itp. zebrałem i często polegam na kilku praktycznych regułach ( RoT ), które również okazały się niezawodnymi przewodnikami (tj. wskazówki były dokładne, a nawet jeśli tak nie było, zwykle było jasne, co dalej):
RoT w oparciu o poprawę konwergencji:
Czemu? Po pierwsze, kilka dodatkowych węzłów w warstwie ukrytej prawdopodobnie nie wyrządzi żadnej szkody - twój MLP nadal będzie się zbieżny. Z drugiej strony zbyt mało węzłów w warstwie ukrytej może uniemożliwić konwergencję. Pomyśl o tym w ten sposób, dodatkowe węzły zapewniają pewną nadwyżkę przepustowości - dodatkowe obciążenia do przechowywania / uwalniania sygnału do sieci podczas iteracji (szkolenie lub budowanie modelu). Po drugie, jeśli zaczniesz od dodatkowych węzłów w swojej ukrytej warstwie, możesz je później łatwo przyciąć (w trakcie iteracji). Jest to powszechne i istnieją techniki diagnostyczne, które mogą Ci pomóc (np. Diagram Hintona, który jest tylko wizualnym przedstawieniem macierzy wagi, „mapą cieplną” wartości wagi).
RoTs na podstawie rozmiaru warstwy wejściowej i rozmiaru warstwy wyjściowej:
RoT w oparciu o główne komponenty:
A jednak autor NN FAQ nazywa te reguły „nonsensem” (dosłownie), ponieważ: ignorują one liczbę instancji uczących, szum w celach (wartości zmiennych odpowiedzi) i złożoność przestrzeni funkcji.
Jego zdaniem (i zawsze wydawało mi się, że wie, o czym mówi), wybierz liczbę neuronów w warstwie ukrytej w oparciu o to, czy twój MLP obejmuje jakąś formę regularyzacji, czy też wczesne zatrzymanie .
Jedyna ważna technika optymalizacji liczby neuronów w ukrytej warstwie:
Podczas tworzenia modelu testuj obsesyjnie; testowanie ujawni sygnatury „nieprawidłowej” architektury sieci. Na przykład, jeśli zaczynasz od MLP mającego ukrytą warstwę składającą się z niewielkiej liczby węzłów (którą będziesz stopniowo zwiększać w zależności od potrzeb, na podstawie wyników testów), twój błąd treningu i uogólnienia będzie wysoki, spowodowany uprzedzeniami i niedopasowaniem.
Następnie zwiększaj liczbę węzłów w warstwie ukrytej, jeden po drugim, aż błąd uogólnienia zacznie wzrastać, tym razem z powodu nadmiernego dopasowania i dużej wariancji.
W praktyce robię to w ten sposób:
warstwa wejściowa : rozmiar mojego vactor danych (liczba funkcji w moim modelu) + 1 dla węzła stronniczości i oczywiście bez zmiennej odpowiedzi
warstwa wyjściowa : wyłącznie określona przez mój model: regresja (jeden węzeł) a klasyfikacja (liczba węzłów równa liczbie klas, przy założeniu softmax)
ukryta warstwa : zacząć , jedną warstwę ukrytąz liczbą węzłów równą rozmiarowi warstwy wejściowej. „Idealny” rozmiar prawdopodobnie będzie mniejszy (tj. Pewna liczba węzłów między liczbą w warstwie wejściowej a liczbą w warstwie wyjściowej), a nie większy - znowu jest to tylko obserwacja empiryczna, a większość tej obserwacji jest moje własne doświadczenie. Jeśli projekt uzasadniał dodatkowy wymagany czas, zaczynam od pojedynczej warstwy ukrytej składającej się z niewielkiej liczby węzłów, a następnie (jak wyjaśniłem powyżej) dodam węzły do warstwy ukrytej, po jednym na raz, podczas obliczania uogólnienia błąd, błąd uczenia, odchylenie i wariancja. Kiedy zaniknie błąd uogólnienia i tuż przed tym, jak zacznie ponownie rosnąć, wybieram liczbę węzłów w tym momencie. Zobacz rysunek poniżej.
źródło
Bardzo trudno jest wybrać liczbę neuronów w ukrytej warstwie i liczbę ukrytych warstw w twojej sieci neuronowej.
Zwykle w przypadku większości aplikacji wystarczy jedna ukryta warstwa. Ponadto liczba neuronów w tej ukrytej warstwie powinna zawierać się między liczbą wejść (w twoim przykładzie 10) a liczbą wyjść (w twoim przykładzie 5).
Ale najlepszym sposobem doboru liczby neuronów i warstw ukrytych jest eksperymentowanie. Wytrenuj kilka sieci neuronowych z różną liczbą ukrytych warstw i ukrytych neuronów oraz mierz wydajność tych sieci za pomocą weryfikacji krzyżowej . Możesz trzymać się liczby zapewniającej najlepszą wydajność sieci.
źródło
Aby zautomatyzować wybór najlepszej liczby warstw i najlepszej liczby neuronów dla każdej z warstw, możesz użyć optymalizacji genetycznej .
Kluczowe elementy to:
Możesz również rozważyć:
źródło
Ostatnio trwają prace teoretyczne nad tym https://arxiv.org/abs/1809.09953 . Zakładając, że używasz RELU MLP, wszystkie ukryte warstwy mają taką samą liczbę węzłów, a funkcja utraty i prawdziwa funkcja, którą aproksymujesz za pomocą sieci neuronowej, są zgodne z pewnymi właściwościami technicznymi (w artykule), możesz wybrać głębokość zamów $ \ log (n) $ i szerokość ukrytych warstw, aby były w porządku $ n ^ {d / (2 (\ beta + d))} \ log ^ 2 (n) $. Tutaj $ n $ to rozmiar twojej próbki, $ d $ to wymiar twojego wektora wejściowego, a $ \ beta $ to parametr gładkości dla twojej prawdziwej funkcji. Ponieważ $ \ beta $ jest nieznane, prawdopodobnie będziesz chciał traktować go jako hiperparametr.
Robiąc to, możesz zagwarantować, że przy prawdopodobieństwie zbieżności do 1 $ w funkcji wielkości próbki twój błąd przybliżenia zbiegnie się do 0 $ w funkcji wielkości próby. Podają stawkę. Zwróć uwagę, że nie jest to gwarantowana „najlepsza” architektura, ale może przynajmniej zapewnić dobre miejsce na rozpoczęcie. Co więcej, moje własne doświadczenie sugeruje, że rzeczy takie jak rezygnacja z nauki mogą nadal pomóc w praktyce.
źródło