Jak ustawić liczbę neuronów i warstw w sieciach neuronowych

26

Jestem początkującym w sieciach neuronowych i miałem problem z uchwyceniem dwóch koncepcji:

  1. Jak decyduje się o liczbie warstw środkowych w danej sieci neuronowej? 1 vs. 10 lub cokolwiek innego.
  2. Jak decyduje się liczba neuronów w każdej środkowej warstwie? Czy zaleca się posiadanie jednakowej liczby neuronów w każdej środkowej warstwie, czy też różni się w zależności od zastosowania?
Snaggletooth
źródło

Odpowiedzi:

19

Uwzględnienie liczby neuronów dla każdej warstwy i liczby warstw w w pełni połączonych sieciach zależy od przestrzeni cech problemu. Do zilustrowania tego, co dzieje się w dwuwymiarowych przypadkach w celu zobrazowania, używam przestrzeni 2-d. Użyłem zdjęć z prac naukowca . Aby zrozumieć inne sieci, takie jak CNNpolecam, zajrzyj tutaj .

Załóżmy, że masz tylko jeden neuron, w tym przypadku po poznaniu parametrów sieci będziesz miał liniową granicę decyzyjną, która może oddzielić przestrzeń na dwie indywidualne klasy.

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Załóżmy, że jesteś proszony o oddzielenie następujących danych. Będziesz potrzebował, d1która określa górną granicę decyzyjną i jakoś wykonuje ANDoperację, aby ustalić, czy dane wejściowe znajdują się po jej lewej czy po prawej stronie. Linia d2wykonuje kolejną ANDoperację, która sprawdza, czy dane wejściowe są wyższe, d2czy nie. W tym przypadku d1próbuje zrozumieć, czy dane wejściowe znajdują się po lewej stronie linii, aby sklasyfikować dane wejściowe jako koło , a także d2próbuje dowiedzieć się, czy dane wejściowe znajdują się po prawej stronie linii, aby sklasyfikować dane wejściowe jako koło . Teraz potrzebujemy innegoANDoperacja podsumowania wyników dwóch linii, które są konstruowane po treningu ich parametrów. Jeśli wejście znajduje się po lewej stronie d1i po prawej stronie d2, należy je zaklasyfikować jako koło .

wprowadź opis zdjęcia tutaj

Załóżmy teraz, że masz następujący problem i zostaniesz poproszony o rozdzielenie klas. W takim przypadku uzasadnienie jest dokładnie takie samo jak powyższe.

wprowadź opis zdjęcia tutaj

Dla następujących danych:

wprowadź opis zdjęcia tutaj

granica decyzji nie jest wypukła i jest bardziej złożona niż poprzednie granice. Najpierw musisz mieć podsieć, która znajduje wewnętrzne kręgi. Następnie musisz mieć inną podsieć, która znajdzie wewnętrzną prostokątną granicę decyzyjną, która decyduje, że dane wejściowe wewnątrz prostokąta nie są okręgami, a jeśli są na zewnątrz, są okręgami. Następnie należy zawinąć wyniki i powiedzieć, że jeśli dane wejściowe znajdują się wewnątrz większego prostokąta i poza wewnętrznym prostokątem, należy je zaklasyfikować jako okrąg . Potrzebujesz innegoAND tym celu operacji. Sieć wyglądałaby tak:

wprowadź opis zdjęcia tutaj


Załóżmy, że zostałeś poproszony o stwierdzenie, że następujące kółka są zaznaczone granicy decyzji.

wprowadź opis zdjęcia tutaj

W tym przypadku twoja sieć byłaby podobna do następującej sieci, o której mowa, ale z większą ilością neuronów w pierwszej ukrytej warstwie.

wprowadź opis zdjęcia tutaj

Głoska bezdźwięczna
źródło
11

Bardzo dobre pytanie, ponieważ nie ma jeszcze dokładnej odpowiedzi na to pytanie. To aktywna dziedzina badań.

Ostatecznie architektura sieci jest związana z wymiarami danych. Ponieważ sieci neuronowe są uniwersalnymi aproksymatorami, o ile twoja sieć jest wystarczająco duża, ma ona możliwość dopasowania twoich danych.

Jedynym sposobem, aby naprawdę wiedzieć, która architektura działa najlepiej, jest wypróbowanie wszystkich, a następnie wybranie najlepszej. Ale oczywiście w sieciach neuronowych jest to dość trudne, ponieważ każdy model zajmuje sporo czasu na szkolenie. To, co robią niektórzy ludzie, to najpierw wytrenowanie modelu, który celowo jest „zbyt duży”, a następnie przycinanie go poprzez usunięcie obciążników, które nie mają większego wpływu na sieć.

Co jeśli moja sieć jest „za duża”

Jeśli twoja sieć jest zbyt duża, może się przepełnić lub z trudem zbiegać. Intuicyjnie dzieje się tak, że twoja sieć próbuje wyjaśnić twoje dane w bardziej skomplikowany sposób niż powinna. To jak próba odpowiedzi na pytanie, na które można odpowiedzieć jednym zdaniem za pomocą 10-stronicowego eseju. Tak długa odpowiedź może być trudna do ustrukturyzowania, a może pojawić się wiele niepotrzebnych faktów. ( Zobacz to pytanie )

Co jeśli moja sieć jest „za mała”

Z drugiej strony, jeśli twoja sieć jest zbyt mała, to nie spełni twoich danych i dlatego. To tak, jakbyś odpowiedział jednym zdaniem, kiedy powinieneś napisać 10-stronicowy esej. Niezależnie od tego, jak dobra jest twoja odpowiedź, brakuje niektórych istotnych faktów.

Szacowanie wielkości sieci

Jeśli znasz wymiarowość swoich danych, możesz stwierdzić, czy Twoja sieć jest wystarczająco duża. Aby oszacować wymiarowość danych, możesz spróbować obliczyć ich rangę. Jest to podstawowa idea tego, jak ludzie próbują oszacować rozmiar sieci.

Nie jest to jednak takie proste. Rzeczywiście, jeśli twoja sieć musi być 64-wymiarowa, czy budujesz pojedynczą ukrytą warstwę o rozmiarze 64 lub dwie warstwy o rozmiarze 8? Tutaj dam wam intuicję, co by się stało w obu przypadkach.

Schodzę głębiej

Głębsze wchodzenie oznacza dodawanie kolejnych ukrytych warstw. Umożliwia sieci obliczanie bardziej złożonych funkcji. Na przykład w konwergentnych sieciach neuronowych często pokazywano, że pierwsze kilka warstw reprezentuje cechy „niskiego poziomu”, takie jak krawędzie, a ostatnie warstwy reprezentują cechy „niskiego poziomu”, takie jak ściany, części ciała itp.

Zazwyczaj musisz zagłębić się, jeśli Twoje dane są bardzo nieuporządkowane (jak obraz) i muszą zostać przetworzone dość długo, zanim można z nich wyciągnąć przydatne informacje.

Coraz szerszy

Pogłębianie oznacza tworzenie bardziej złożonych funkcji, a „szersze” oznacza po prostu tworzenie większej liczby tych funkcji. Być może Twój problem można wyjaśnić za pomocą bardzo prostych funkcji, ale musi być ich wiele. Zwykle warstwy stają się węższe pod koniec sieci z tego prostego powodu, że złożone funkcje niosą więcej informacji niż proste, a zatem nie potrzebujesz ich tak wiele.

Valentin Calomme
źródło
Możesz użyć koncepcji wymiaru wewnętrznego, aby znaleźć liczbę odpowiednich wymiarów dla twojego problemu. Wewnętrzne wymiary próbują odpowiedzieć, ile zmiennych jest potrzebnych do pełnego opisu sygnału, i jest to związane z liczbą zmiennych w losowym źródle tego sygnału.
Pedro Henrique Monforte
8

Krótka odpowiedź: Jest to bardzo związane z wymiarami twoich danych i rodzajem aplikacji.

Wybór odpowiedniej liczby warstw może być osiągnięty tylko poprzez praktykę. Nie ma jeszcze ogólnej odpowiedzi na to pytanie . Wybierając architekturę sieci, ograniczasz przestrzeń możliwości (przestrzeń hipotez) do określonej serii operacji tensorowych, mapując dane wejściowe na dane wyjściowe. W DeepNN każda warstwa może uzyskać dostęp tylko do informacji obecnych na wyjściu poprzedniej warstwy. Jeśli jedna warstwa upuści jakąś informację związaną z danym problemem, informacji tych nigdy nie można odzyskać przez kolejne warstwy. Jest to zwykle określane jako „ wąskie gardło informacyjne ”.

Informacja Wąskie gardło to miecz obosieczny:

1) Jeśli użyjesz kilku warstw / neuronów, model po prostu nauczy się kilku przydatnych reprezentacji / cech twoich danych i straci kilka ważnych, ponieważ pojemność środkowych warstw jest bardzo ograniczona ( niedopasowanie ).

2) Jeśli użyjesz dużej liczby warstw / neuronów, model nauczy się zbyt wielu reprezentacji / cech, które są specyficzne dla danych treningowych i nie uogólniają się na dane w świecie rzeczywistym i poza zestawem treningowym ( nadmierne dopasowanie ).

Przydatne linki do przykładów i więcej informacji:

[1] https: //livebook.manning.com#! / Book / deep-learning-with-python / Rozdział-3 / point-1130-232-232-0

[2] https://www.quantamagazine.org/new-theory-cracks-open-the-black-box-of-deep-learning-20170921/

moh
źródło
4

Pracując z sieciami neuronowymi od dwóch lat, jest to problem, który zawsze mam za każdym razem, gdy nie chcę modelować nowego systemu. Najlepsze podejście, jakie znalazłem, to:

  1. Poszukaj podobnych problemów, które zostały również wymodelowane przy pomocy sieci feed-forward i przestudiuj ich architektury.
  2. Rozpocznij od tej konfiguracji, wytrenuj zestaw danych i oceń zestaw testowy.
  3. Wykonaj przycinanie w swojej architekturze i porównaj wyniki w zestawie danych z poprzednimi wynikami. Jeśli nie wpłynie to na dokładność twojego modelu, możesz wywnioskować, że oryginalny model nie pasuje do danych.
  4. W przeciwnym razie spróbuj dodać więcej stopni swobody (tj. Więcej warstw).

Ogólne podejście polega na wypróbowaniu różnych architektur, porównaniu wyników i wybraniu najlepszej konfiguracji. Doświadczenie daje więcej intuicji w pierwszych przypuszczeniach dotyczących architektury.

Federico Caccia
źródło
1

Dodając do poprzednich odpowiedzi, istnieją podejścia, w których topologia sieci neuronowej pojawia się endogennie w ramach szkolenia. Najbardziej widoczne jest to, że masz Neuroewolucję rozszerzania topologii (NEAT), w której zaczynasz od podstawowej sieci bez ukrytych warstw, a następnie używasz algorytmu genetycznego do „skomplikowania” struktury sieci. NEAT jest implementowany w wielu ramach ML. Oto dość przystępny artykuł na temat implementacji do nauki Mario: CrAIg: Używanie sieci neuronowych do nauki Mario

Frederic Schneider
źródło