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.
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.
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.
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.
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.
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.
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!
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) .
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.
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.
Wymieniłem wiele sposobów uczenia się topologii w mojej pracy magisterskiej, rozdział 3 . Duże kategorie to:
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.
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.