Czy istnieje standardowa i akceptowana metoda wyboru liczby warstw i liczby węzłów w każdej warstwie w sieci neuronowej z przekazywaniem? Interesują mnie zautomatyzowane sposoby budowania sieci neuronowych.
model-selection
neural-networks
Rob Hyndman
źródło
źródło
Odpowiedzi:
Zdaję sobie sprawę, że na to pytanie udzielono odpowiedzi, ale nie sądzę, aby zachowana odpowiedź naprawdę angażowała pytanie poza wskazywaniem na link ogólnie związany z przedmiotem pytania. W szczególności łącze opisuje jedną technikę programowej konfiguracji sieci, ale nie jest to „ standardowa i akceptowana metoda ” konfiguracji sieci.
Przestrzegając niewielkiego zestawu jasnych reguł, można programowo ustawić kompetentną architekturę sieci (tj. Liczbę i rodzaj warstw neuronalnych oraz liczbę neuronów wchodzących w skład każdej warstwy). Zgodnie z tym schematem zapewni to kompetentną architekturę, ale prawdopodobnie nie optymalną.
Ale po zainicjowaniu tej sieci można iteracyjnie dostroić konfigurację podczas treningu, korzystając z szeregu pomocniczych algorytmów; jedna rodzina tych prac polega na przycinaniu węzłów w oparciu o (małe) wartości wektora ciężaru po określonej liczbie epok treningu - innymi słowy, eliminując niepotrzebne / zbędne węzły (więcej na ten temat poniżej).
Zatem każdy NN ma trzy typy warstw: wejściowy , ukryty i wyjściowy .
Utworzenie architektury NN oznacza zatem wymyślenie wartości dla liczby warstw każdego typu i liczby węzłów w każdej z tych warstw.
Warstwa wejściowa
Proste - każdy NN ma dokładnie jeden z nich - bez wyjątków, o których jestem świadomy.
W odniesieniu do liczby neuronów wchodzących w skład tej warstwy ten parametr jest całkowicie i jednoznacznie określony, gdy poznasz kształt danych treningowych. W szczególności liczba neuronów tworzących tę warstwę jest równa liczbie cech (kolumn) w danych . Niektóre konfiguracje NN dodają jeden dodatkowy węzeł dla terminu stronniczości.
Warstwa wyjściowa
Podobnie jak warstwa wejściowa, każda NN ma dokładnie jedną warstwę wyjściową. Określenie jego wielkości (liczby neuronów) jest proste; jest to całkowicie określone przez wybraną konfigurację modelu.
Czy Twój NN działa w trybie maszynowym lub w trybie regresji (konwencja ML dotycząca używania terminu, który jest również używany w statystykach, ale przypisywanie mu innego znaczenia jest bardzo mylące). Tryb maszynowy: zwraca etykietę klasy (np. „Konto premium” / „Konto podstawowe”). Tryb regresji zwraca wartość (np. Cenę).
Jeśli NN jest regresorem, wówczas warstwa wyjściowa ma pojedynczy węzeł.
Jeśli NN jest klasyfikatorem, to ma również pojedynczy węzeł, chyba że zostanie użyty softmax, w którym to przypadku warstwa wyjściowa ma jeden węzeł na etykietę klasy w twoim modelu.
Ukryte warstwy
Te kilka reguł określa liczbę warstw i rozmiar (neurony / warstwa) zarówno dla warstwy wejściowej, jak i wyjściowej. To pozostawia ukryte warstwy.
Ile ukrytych warstw? Cóż, jeśli Twoje dane można rozdzielić liniowo (co często znasz, zanim zaczniesz kodować NN), nie potrzebujesz żadnych ukrytych warstw. Oczywiście nie potrzebujesz też numeru NN, aby rozwiązać swoje dane, ale i tak będzie działać.
Poza tym, jak zapewne wiesz, istnieje mnóstwo komentarzy na temat konfiguracji ukrytej warstwy w NN (zobacz niezwykle dokładne i wnikliwe FAQ NN, aby uzyskać doskonałe podsumowanie tego komentarza). Jedną kwestią w tym temacie, co do której istnieje konsensus, jest różnica w wydajności wynikająca z dodawania dodatkowych ukrytych warstw: sytuacje, w których wydajność poprawia się z drugą (lub trzecią itd.) Ukrytą warstwą, jest bardzo nielicznych. Jedna ukryta warstwa wystarcza na większość problemów.
A co z rozmiarem ukrytych warstw - ile neuronów? Istnieje kilka empirycznie ustalonych reguł praktycznych, z których najczęściej się opiera się na tym, że „ optymalny rozmiar ukrytej warstwy jest zwykle między wielkością wejściową a wielkościową warstw wyjściowych ”. Jeff Heaton, autor wstępu do sieci neuronowych w Javie, oferuje kilka innych.
Podsumowując, w przypadku większości problemów prawdopodobnie można uzyskać przyzwoitą wydajność (nawet bez drugiego etapu optymalizacji), ustawiając konfigurację warstwy ukrytej przy użyciu tylko dwóch reguł: (i) liczba warstw ukrytych jest równa jednej; oraz (ii) liczba neuronów w tej warstwie jest średnią z neuronów w warstwach wejściowej i wyjściowej.
Optymalizacja konfiguracji sieci
Przycinanieopisuje zestaw technik przycinania rozmiaru sieci (według węzłów, a nie warstw) w celu poprawy wydajności obliczeniowej, a czasem wydajności rozdzielczości. Istotą tych technik jest usuwanie węzłów z sieci podczas szkolenia poprzez identyfikację tych węzłów, które, jeśli zostaną usunięte z sieci, nie wpłyną zauważalnie na wydajność sieci (tj. Rozdzielczość danych). (Nawet bez użycia formalnej techniki przycinania można z grubsza zorientować się, które węzły nie są ważne, patrząc na macierz masy po treningu; patrz wagi bardzo zbliżone do zera - to węzły na obu końcach tych ciężarów są często usunięte podczas przycinania.) Oczywiście, jeśli użyjesz algorytmu przycinania podczas treningu, zacznij od konfiguracji sieci, która bardziej prawdopodobne jest, że będzie miała nadmiarowe (tzn. „podatne”) węzły - innymi słowy,
Innymi słowy, stosując algorytm przycinania do sieci podczas treningu, możesz podejść do optymalnej konfiguracji sieci; czy możesz to zrobić w pojedynczym „z góry” (takim jak algorytm oparty na algorytmie genetycznym) nie wiem, choć wiem, że na razie ta dwustopniowa optymalizacja jest częstsza.
źródło
Odpowiedź @ douga zadziałała dla mnie. Istnieje jedna dodatkowa zasada, która pomaga w nadzorowanych problemach z nauką. Zazwyczaj można zapobiec nadmiernemu dopasowaniu, jeśli liczba neuronów jest poniżej:
W przypadku procedury automatycznej zacznij od wartości alfa 2 (dwa razy więcej stopni swobody w danych treningowych niż w modelu) i pracuj aż do 10, jeśli błąd (utrata) w zestawie danych treningowych jest znacznie mniejszy niż dla twój testowy zestaw danych.
źródło
N_h
(średnia liczba ukrytych neuronów na warstwę) rozwiązanie tego problemuN_s = (N_i + N_o) * N_h ^ N_hidden_layers
. Ale nadal nie użyłbym tej formuły. Dotyczy to tylko bardzo podstawowych problemów (problemów z zabawkami), gdy nie planujesz wdrożyć innych metod regularyzacji.Od wprowadzenia do sieci neuronowych dla Javy (drugie wydanie) autorstwa Jeffa Heatona - podgląd dostępny bezpłatnie w Google Books, a wcześniej na stronie autora :
Lubię również następujący fragment z odpowiedź znalazłem w researchgate.net , która niesie ze sobą wiele w kilku słowach:
źródło
W tej chwili pracuję nad empirycznym studium tego (przybliżając stulecie procesorów symulacji w naszym obiekcie HPC!). Moja rada byłaby taka, by użyć „dużej” sieci i regularyzacji, jeśli zastosujesz regularyzację, wówczas architektura sieci stanie się mniej ważna (pod warunkiem, że jest wystarczająco duża, aby reprezentować funkcję podstawową, którą chcemy przechwycić), ale musisz dostroić regularyzację parametr poprawnie.
Jednym z problemów związanych z wyborem architektury jest to, że jest to dyskretna, a nie ciągła kontrola złożoności modelu, a zatem może być nieco tępym instrumentem, szczególnie gdy idealna złożoność jest niska.
Wszystko to podlega jednak twierdzeniom „bez darmowego lunchu”, podczas gdy regularyzacja jest skuteczna w większości przypadków, zawsze będą przypadki, w których dobór architektury działa lepiej, i to jedyny sposób, aby dowiedzieć się, czy to prawda o danym problemie polega na wypróbowaniu obu podejść i weryfikacji krzyżowej.
Gdybym miał zbudować zautomatyzowanego konstruktora sieci neuronowej, zastosowałbym oparte na próbkowaniu podejście Bayesa oparte na Hybrid Monte Carlo (HMC) Radforda Neala, a także użyć dużej sieci i zintegrować ponad wagami, zamiast optymalizować wagi pojedynczej sieci. Jest to jednak kosztowne obliczeniowo i „czarna sztuka”, ale wyniki osiągnięte przez prof. Neala sugerują, że warto!
źródło
O ile mi wiadomo, nie ma możliwości automatycznego wyboru liczby warstw i neuronów w każdej warstwie. Istnieją jednak sieci, które mogą automatycznie budować swoją topologię, takie jak EANN (Evolutionary Artificial Neural Networks, które wykorzystują algorytmy genetyczne do ewolucji topologii).
Istnieje kilka podejść, mniej lub bardziej nowoczesne, które wydawało się dawać dobre wyniki, to NEAT (Neuro Evolution of Augmented Topologies) .
źródło
Ref:
1 Mistrzowie, Tymoteusz. Praktyczne przepisy dotyczące sieci neuronowych w języku C ++. Morgan Kaufmann, 1993.
[2] http://www.iitbhu.ac.in/faculty/min/rajesh-rai/NMEICT-Slope/lecture/c14/l1.html
źródło
Zautomatyzowane sposoby budowania sieci neuronowych za pomocą globalnego wyszukiwania hiperparametrów:
Warstwy wejściowe i wyjściowe mają stały rozmiar.
Co może się różnić:
W przypadku tego dyskretnego problemu z optymalizacją można zastosować wiele metod , w których błąd próbkowania sieci jest funkcją kosztu.
źródło
Niestety nie mogę jeszcze dodać komentarza, więc proszę o wyrozumiałość. W każdym razie wpadłem na wątek dyskusji, który przypomniał mi artykuł , który widziałem niedawno. Myślę, że może zainteresować ludzi uczestniczących tutaj:
źródło
Wymieniłem wiele sposobów uczenia się topologii w mojej pracy magisterskiej, rozdział 3 . Duże kategorie to:
źródło
Chciałbym zaproponować mniej powszechną, ale bardzo skuteczną metodę .
Zasadniczo możesz wykorzystać zestaw algorytmów zwanych „algorytmami genetycznymi”, które wypróbowują niewielki podzbiór potencjalnych opcji (losowa liczba warstw i węzłów na warstwę). Następnie traktuje tę populację opcji jako „rodziców”, którzy tworzą dzieci, łącząc / mutując jednego lub więcej rodziców, podobnie jak ewoluują organizmy. Najlepsze dzieci i niektóre losowe dzieci ok są trzymane w każdym pokoleniu i przez pokolenia, najlepiej przystosowane.
W przypadku ~ 100 lub mniej parametrów (takich jak wybór liczby warstw, rodzajów warstw i liczby neuronów na warstwę) ta metoda jest bardzo skuteczna. Użyj go, tworząc wiele potencjalnych architektur sieciowych dla każdego pokolenia i trenując je częściowo, aż do oszacowania krzywej uczenia się (100-10 000 mini-partii zwykle w zależności od wielu parametrów). Po kilku pokoleniach możesz rozważyć moment, w którym pociąg i walidacja zaczynają mieć znacznie inny poziom błędu (przeładowania) jako swoją funkcję celu przy wyborze dzieci. Dobrym pomysłem może być użycie bardzo małego podzbioru danych (10-20%), dopóki nie wybierzesz ostatecznego modelu, aby szybciej dojść do wniosku. Użyj również jednego zarodka do inicjalizacji sieci, aby poprawnie porównać wyniki.
10-50 pokoleń powinno przynieść świetne wyniki dla sieci o przyzwoitych rozmiarach.
źródło
Liczba ukrytych warstw i co można osiągnąć:
0 - Może reprezentować tylko funkcje lub decyzje rozdzielne liniowo.
1 - Potrafi przybliżyć dowolną funkcję, która zawiera ciągłe mapowanie z jednej skończonej przestrzeni na drugą.
2 - Może reprezentować dowolną granicę decyzji do dowolnej dokładności za pomocą racjonalnych funkcji aktywacyjnych i może przybliżać dowolne płynne mapowanie do dowolnej dokładności.
Więcej niż 2 - dodatkowe warstwy mogą nauczyć się złożonych reprezentacji (rodzaj automatycznej inżynierii cech) dla warstw warstw.
źródło