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?
machine-learning
neural-network
użytkownik7677413
źródło
źródło
Odpowiedzi:
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.
źródło