Jak wybrać liczbę ukrytych warstw i węzłów w sieci neuronowej z przekazywaniem danych?


540

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.


4
Spośród wszystkich świetnych odpowiedzi znalazłem ten artykuł jako pomocny dstath.users.uth.gr/papers/IJRS2009_Stathakis.pdf
Debpriya Seal

@DebpriyaSeal nie jest to jednak przydatne ...
DarkCygnus

Odpowiedzi:


467

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, żeoptymalny 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.


31
Stwierdzasz, że w przypadku większości problemów potrzebna jest tylko jedna ukryta warstwa. Być może lepiej powiedzieć, że NN z bardziej ukrytymi warstwami jest wyjątkowo trudny do wyszkolenia (jeśli chcesz wiedzieć, jak to zrobić, sprawdź publikacje grupy Hintona w Uof Toronto, „głębokie uczenie się”), a tym samym te problemy, które wymagają czegoś więcej niż ukrytego warstwy są uważane za „nierozwiązywalne” przez sieci neuronowe.
bayerj

13
Piszesz Jeśli NN jest regresorem, wówczas warstwa wyjściowa ma pojedynczy węzeł. . Dlaczego tylko jeden węzeł? Dlaczego nie mogę mieć wielu ciągłych wyników?
gerrit

5
@gerrit Zdecydowanie możesz mieć wiele ciągłych wyników, jeśli twój docelowy wynik ma wartość wektorową. Jednak zdefiniowanie odpowiedniej funkcji straty dla wyjść o wartościach wektorowych może być nieco trudniejsze niż w przypadku jednego wyjścia.
lmjohns3

5
Myślałem, że jest odwrotnie: jeśli NN jest klasyfikatorem, to ma również pojedynczy węzeł, chyba że użyty jest softmax, w którym to przypadku warstwa wyjściowa ma jeden węzeł na etykietę klasy w twoim modelu.
viyps

2
@doug Dziękujemy za tę cudowną odpowiedź. To pozwoliło mi zredukować mój ANN z 3 ukrytych warstw do 1 i osiągnąć tę samą dokładność klasyfikacji, ustawiając odpowiednią liczbę ukrytych neuronów ... Właśnie wykorzystałem średnią sumę danych wejściowych i wyjściowych zsumowanych. Dzięki!
rayryeng

129

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:

Nh=Ns(α(Ni+No))

Ni
No
Ns
α

alpha

Ns(Ni+No)α

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.


7
Ta formuła jest bardzo interesująca i pomocna. Czy istnieje jakieś odniesienie do tej formuły? Byłoby bardziej pomocne.
prashanth

2
@prashanth Połączyłem kilka twierdzeń i formuł w tekście projektu NN, o którym mowa powyżej. Ale nie sądzę, by zostało to wyraźnie przywołane w formie, którą pokazuję. Moja wersja jest bardzo przybliżonym przybliżeniem z wieloma uproszczonymi założeniami. Więc YMMV.
płyty grzewcze

1
Najpierw chciałem napisać zestaw treningowy zamiast zestawu testowego w poprzednim komentarzu. Może ta formuła ma sens, jeśli mamy ją odczytać jako „potrzebujesz przynajmniej tyle neuronów, aby nauczyć się wystarczającej liczby funkcji (DOF, o których wspomniałeś) z zestawu danych”. Jeśli cechy zestawu danych są reprezentatywne dla populacji i tego, jak dobrze model może uogólniać, może to inne pytanie (ale ważne).
kon psych

3
Nh(Ni+No)

2
@ Mateus, być może nieco lepsza zasada dla wielu warstw to N_h(średnia liczba ukrytych neuronów na warstwę) rozwiązanie tego problemu N_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.
płyty grzewcze

60

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 :

Liczba ukrytych warstw

Istnieją naprawdę dwie decyzje, które należy podjąć w odniesieniu do ukrytych warstw: ile ukrytych warstw faktycznie ma w sieci neuronowej i ile neuronów będzie w każdej z tych warstw. Najpierw sprawdzimy, jak określić liczbę ukrytych warstw do użycia z siecią neuronową.

Rzadko występują problemy wymagające dwóch ukrytych warstw. Jednak sieci neuronowe z dwiema ukrytymi warstwami mogą reprezentować funkcje o dowolnym kształcie. Obecnie nie ma teoretycznego powodu, aby używać sieci neuronowych z więcej niż dwiema ukrytymi warstwami. W rzeczywistości w przypadku wielu problemów praktycznych nie ma powodu, aby używać więcej niż jednej ukrytej warstwy. Tabela 5.1 podsumowuje możliwości architektur sieci neuronowych z różnymi ukrytymi warstwami.

Tabela 5.1: Określanie liczby ukrytych warstw

| Liczba ukrytych warstw | Wynik |

 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ć arbitralną granicę decyzji do arbitralnej dokładności
z racjonalnymi funkcjami aktywacji i może przybliżać dowolną płynność
mapowanie z dowolną dokładnością.

Decydowanie o liczbie ukrytych warstw neuronów to tylko niewielka część problemu. Musisz także określić, ile neuronów będzie w każdej z tych ukrytych warstw. Proces ten omówiono w następnej sekcji.

Liczba neuronów w ukrytych warstwach

Decydowanie o liczbie neuronów w ukrytych warstwach jest bardzo ważną częścią decydowania o ogólnej architekturze sieci neuronowej. Chociaż warstwy te nie oddziałują bezpośrednio ze środowiskiem zewnętrznym, mają ogromny wpływ na końcowy wynik. Zarówno liczba ukrytych warstw, jak i liczba neuronów w każdej z tych ukrytych warstw musi być dokładnie rozważona.

Używanie zbyt małej liczby neuronów w ukrytych warstwach spowoduje coś, co nazywa się niedopasowaniem. Niedopasowanie występuje, gdy w ukrytych warstwach jest za mało neuronów, aby odpowiednio wykryć sygnały w skomplikowanym zbiorze danych.

Używanie zbyt wielu neuronów w ukrytych warstwach może powodować kilka problemów. Po pierwsze, zbyt wiele neuronów w ukrytych warstwach może doprowadzić do nadmiernego dopasowania. Przeuczenie występuje, gdy sieć neuronowa ma tak dużą zdolność przetwarzania informacji, że ograniczona ilość informacji zawarta w zestawie treningowym nie wystarcza do wyszkolenia wszystkich neuronów w ukrytych warstwach. Drugi problem może wystąpić nawet wtedy, gdy dane treningowe są wystarczające. Niezwykle duża liczba neuronów w ukrytych warstwach może wydłużyć czas potrzebny na szkolenie sieci. Czas szkolenia może wzrosnąć do tego stopnia, że ​​niemożliwe jest odpowiednie wytrenowanie sieci neuronowej. Oczywiście trzeba dojść do kompromisu między zbyt dużą a zbyt małą liczbą neuronów w ukrytych warstwach.

Istnieje wiele praktycznych metod określania prawidłowej liczby neuronów do użycia w ukrytych warstwach, takie jak:

  • Liczba ukrytych neuronów powinna mieścić się między rozmiarem warstwy wejściowej a rozmiarem warstwy wyjściowej.
  • Liczba ukrytych neuronów powinna wynosić 2/3 rozmiaru warstwy wejściowej plus rozmiar warstwy wyjściowej.
  • Liczba ukrytych neuronów powinna być mniejsza niż dwukrotność wielkości warstwy wejściowej.

Te trzy zasady stanowią punkt wyjścia do rozważenia. Ostatecznie wybór architektury sieci neuronowej sprowadza się do prób i błędów. Ale co dokładnie oznacza próba i błąd? Nie chcesz rzucać losowymi liczbami warstw i neuronów w swojej sieci. Wykonanie tego byłoby bardzo czasochłonne. Rozdział 8, „Przycinanie sieci neuronowej” zbada różne sposoby określania optymalnej struktury dla sieci neuronowej.


Lubię również następujący fragment z odpowiedź znalazłem w researchgate.net , która niesie ze sobą wiele w kilku słowach:

Steffen B Petersen · Uniwersytet Aalborg

[...]

Aby zabezpieczyć zdolność sieci do uogólnienia, liczba węzłów musi być jak najniższa. Jeśli masz duży nadmiar węzłów, sieć staje się zestawem pamięci, który może przywołać zestaw treningowy do perfekcji, ale nie działa dobrze na próbkach, które nie były częścią zestawu treningowego.


Czy znasz źródło cytatu Steffena B. Petersena?
Sebastian Nielsen,

Przepraszam, że nie. Próbowałem go wyszukać, ale nie mogłem go znaleźć ... Myślę, że artykuł został usunięty z sieci. Może możesz skontaktować się z nim bezpośrednio?
jj_

Czy nie należy brać pod uwagę wielkości zestawu treningowego? Mam tabelaryczny zestaw danych z ~ 300 000 unikalnych próbek (ceny samochodów). Warstwa wejściowa ma 89 węzłów. Trenując sieć bez regularyzacji i tylko 89 węzłów w jednej ukrytej warstwie, tracę trening na płaskowyżu po kilku epokach. Płaski RMSE na poziomie ~ 1800 $ (pojedynczy węzeł wyjściowy jest ceną w tym problemie z regresją).
rodrigo-silveira

Myślę, że źródło cytatu Steffena B. Petersena było tutaj: researchgate.net/post/…
TripleAntigen

43

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!


„Obecnie pracuję nad empirycznym studium tego” - czy jest jakaś aktualizacja?
Martin Thoma,

2
nie, nie wiem, nadal zalecałbym dużą (ish) sieć i regularyzację, ale nie ma srebrnej kuli, niektóre problemy nie wymagają regularyzacji, ale niektóre zestawy danych wymagają dostrojenia rozmiaru ukrytej warstwy, jak również regularyzacji. Niestety recenzentom nie spodobał się artykuł :-(
Dikran Marsupial 24.04.17

17

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) .



6

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ć:

  • liczba warstw
  • liczba neuronów w każdej warstwie
  • rodzaj warstwy

W przypadku tego dyskretnego problemu z optymalizacją można zastosować wiele metod , w których błąd próbkowania sieci jest funkcją kosztu.

  • 1) Wyszukiwanie siatkowe / losowe w przestrzeni parametrów, aby rozpocząć od nieco lepszej pozycji
  • 2) Wiele metod, które można zastosować do znalezienia optymalnej architektury. (Tak, to wymaga czasu).
  • 3) Wykonaj regularyzację, spłucz, powtórz.

6

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:

AdaNet: Adaptacyjne uczenie strukturalne sztucznych sieci neuronowych

Corinna Cortes, Xavier Gonzalvo, Vitaly Kuznetsov, Mehryar Mohri, Scott Yang; Materiały z 34. międzynarodowej konferencji na temat uczenia maszynowego, PMLR 70: 874-883, 2017.

Streszczenie Prezentujemy nowe ramy do analizy i nauki sztucznych sieci neuronowych. Nasze podejście jednocześnie i adaptacyjnie uczy się zarówno struktury sieci, jak i jej wag. Metodologia oparta jest na silnych, teoretycznych gwarancjach uczenia się, którym towarzyszą dane, dzięki czemu ostateczna architektura sieci w sposób dostateczny dostosowuje się do złożoności danego problemu.



3

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.


Innym bardzo interesującym sposobem jest optymalizacja Bayesa, która jest również niezwykle skuteczną metodą optymalizacji czarnej skrzynki dla stosunkowo niewielkiej liczby parametrów. arxiv.org/pdf/1206.2944.pdf
Dan Erez

2

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.


8
Źródło (źródła) proszę. - Recenzent
Jim
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.