Jak zdecydować o architekturze sieci neuronowej?

20

Zastanawiałem się, jak musimy zdecydować, ile węzłów w ukrytych warstwach i ile ukrytych warstw umieścić, gdy budujemy architekturę sieci neuronowej.

Rozumiem, że warstwa wejściowa i wyjściowa zależy od posiadanego zestawu szkoleniowego, ale jak decydujemy o warstwie ukrytej i ogólnej architekturze w ogóle?

użytkownik7677413
źródło
Zazwyczaj eksperymentujemy, wykorzystując naszą intencję; traktuj to jako hiperparametr . Są sposoby uczenia się architektury, ale nie wiem, jak praktyczne są: blog.acolyer.org/2017/05/10/…
Emre
2
Szukałem duplikatu tego, ponieważ jestem pewien, że pojawił się już wiele razy na tej stronie. Nie można jednak znaleźć czystej wersji, która nie została dołączona do żadnego zestawu danych lub problemu. Może to może być ogólne pytanie, na które wskazujemy innym? Niestety, ogólnie nie ma doskonałej odpowiedzi na pytanie „jak”, ale jest to częste pytanie w przypadku tak dużego wyboru.
Neil Slater,
To jest bardzo interesujące pytanie, na które należy odpowiedzieć (Badacz rozpoczął pracę nad twoim pytaniem). Jaka byłaby optymalna architektura dla zestawu danych A i zestawu danych B. Przeczytaj poniżej artykuł, który próbował odpowiedzieć na twoje pytanie. Witamy w świecie wyszukiwania architektury neuronowej (NAS). arxiv.org/abs/1611.01578
iDeepVision

Odpowiedzi:

17

Niestety, nie ma ogólnego sposobu ustalenia z góry najlepszej liczby neuronów i liczby warstw dla sieci neuronowej, biorąc pod uwagę jedynie opis problemu. Nie ma nawet zbyt wielu wskazówek, jak ustalić dobre wartości jako punkt wyjścia.

Najczęstszym podejściem wydaje się zaczynać od wstępnych przypuszczeń opartych na wcześniejszych doświadczeniach dotyczących sieci wykorzystywanych w podobnych problemach. Może to być twoje własne doświadczenie lub doświadczenie z drugiej / trzeciej ręki, które wybrałeś ze szkolenia, bloga lub artykułu z badań. Następnie wypróbuj kilka odmian i dokładnie sprawdź wydajność, zanim wybierzesz najlepszą.

Rozmiar i głębokość sieci neuronowych oddziałują również z innymi hiperparamateriałami , więc zmiana jednej rzeczy w innym miejscu może wpłynąć na to, gdzie są najlepsze wartości. Dlatego nie można wyodrębnić „najlepszego” rozmiaru i głębokości dla sieci, a następnie kontynuować dostrajanie innych parametrów w izolacji. Na przykład, jeśli masz bardzo głęboką sieć, może ona działać skutecznie z funkcją aktywacji ReLU, ale nie tak dobrze z sigmoidem - jeśli znalazłeś najlepszy rozmiar / kształt sieci i wypróbowałeś eksperyment z różnymi funkcjami aktywacji, możesz przyjść do błędnego wniosku o tym, co działa najlepiej.

Czasami możesz przeczytać o „praktycznych zasadach”, których używają naukowcy, rozpoczynając projektowanie sieci neuronowej od zera. Te rzeczy mogą działać na twoje problemy lub nie, ale przynajmniej mają tę zaletę, że zaczynają od problemu. Odmiany, które widziałem to:

  • Utwórz sieć z ukrytymi warstwami o podobnej kolejności wielkości co dane wejściowe i o tym samym rozmiarze, ponieważ nie ma konkretnego powodu, aby zmieniać rozmiar (chyba że tworzysz autoencoder).

  • Zacznij od prostej i rozbuduj złożoność, aby zobaczyć, co poprawia prostą sieć.

  • Spróbuj różnych głębokości sieci, jeśli oczekujesz, że dane wyjściowe zostaną dobrze wyjaśnione danymi wejściowymi, ale ze złożoną relacją (w przeciwieństwie do po prostu z natury hałaśliwego).

  • Spróbuj dodać trochę rezygnacji, to najbliższa rzecz, jaką sieci neuronowe muszą wykonać, by magiczny czarodziejski pył uczynił wszystko lepszym (zastrzeżenie: dodanie rezygnacji może poprawić uogólnienie, ale może również zwiększyć wymagane rozmiary warstw i czas treningu).

Jeśli czytasz te lub coś podobnego w dowolnym tekście, weź je ze szczyptą soli. Jednak w najgorszym przypadku pomagają ominąć efekt pustej strony i napisać sieć, a także rozpocząć proces testowania i udoskonalania.


Nawiasem mówiąc, staraj się nie zgubić zbytnio w dostrajaniu sieci neuronowej, gdy inne podejście może być lepsze i zaoszczędzić mnóstwo czasu. Rozważ i zastosuj inne metody uczenia maszynowego i analizy danych. Przeglądaj dane, może zrób jakieś wykresy. Najpierw wypróbuj kilka prostych podejść liniowych, aby uzyskać testy porównawcze, regresję liniową, regresję logistyczną lub regresję softmax, w zależności od problemu. Rozważ zastosowanie innego algorytmu ML niż NN - podejścia oparte na drzewie decyzyjnym, takie jak XGBoost, mogą być szybsze i bardziej skuteczne niż głębokie uczenie się wielu problemów.

Neil Slater
źródło
To świetne wytłumaczenie. Dzięki. Zastanawiam się także, czy istnieje dobry sposób, aby zdecydować, które podejście ML zastosować? Wspomniałeś, że może istnieć lepszy sposób niż sieć neuronowa, ale jak to łatwo ustalić?
user7677413,
@ user7677413: To samo dotyczy. Musisz spróbować i zobaczyć, chociaż doświadczenie może dać ci przewodnik na temat znanych problemów.
Neil Slater
1
kiedy zatem potrzebna jest sieć neuronowa?
user7677413
1
Sieci neuronowe są rzadko potrzebne . Są jednak lepsi w niektórych problemach. Doskonale sprawdzają się w zadaniach przetwarzania sygnałów, takich jak rozpoznawanie dźwięku i obrazu, a także mają zdolność uczenia się subtelnych różnic z dużych ilości danych, w przypadku których prostsze algorytmy mogą osiągnąć granicę. Jednak niezależnie od tego, czy NN jest właściwym narzędziem dla Ciebie i bez względu na problem, którego napotkasz w danym dniu, nikt nie jest w stanie przewidzieć.
Neil Slater,
1
@ user7677413 Myślę, że zakładasz, że nie ma 40 lat głębokich i wnikliwych badań nad uczeniem maszynowym. Brzmi, jakbyś tylko drapał powierzchnię. Polecam znalezienie podręcznika i zobaczenie, jak to wszystko łączy się ze sobą, co pomogłoby zbudować intuicję dla wielu algorytmów uczenia maszynowego.
Alex L