Jak poprawić stabilność mojej sieci neuronowej?

11

Używam sieci neuronowej w R, aby zbudować NN z 14 wejściami i jednym wyjściem. Sieć buduję / trenuję kilka razy przy użyciu tych samych danych treningowych i tych samych architektury / ustawień sieciowych.

Po wytworzeniu każdej sieci używam jej do samodzielnego zestawu danych testowych do obliczania niektórych przewidywanych wartości. Zauważyłem, że istnieje duża wariancja w każdej iteracji przewidywanych danych, mimo że wszystkie dane wejściowe (zarówno dane szkoleniowe, jak i dane testowe) pozostają takie same za każdym razem, gdy buduję sieć.

Rozumiem, że za każdym razem będą występować różnice w wagach wytwarzanych w ramach NN i że żadne dwie sieci neuronowe nie będą identyczne, ale co mogę spróbować stworzyć sieci, które są bardziej spójne w każdym pociągu, biorąc pod uwagę identyczne dane?

tfb
źródło
Czy możesz podać nam trochę więcej szczegółów na temat algorytmu uczenia się i architektury, z której korzystałeś (lub pakiet R)? Ile warstw ma NN?
Lucas
Cześć Lucas, używam linku neuralnet pakietu R, który zawiera dobry link do artykułu wyjaśniającego . Używam jednej ukrytej warstwy 8 neuronów. Algorytm uczenia się jest odporny na propagację wsteczną z cofaniem wagi.
tfb

Odpowiedzi:

8

Zasadniczo można uzyskać większą stabilność, zwiększając liczbę ukrytych węzłów i stosując odpowiedni rozkład masy (zwany także karą kalenicową).

W szczególności zaleciłbym użycie tego caretpakietu, aby lepiej zrozumieć twoją dokładność (a nawet niepewność co do dokładności). Również ostrożnie jest to avNNet, że zespół uczy się z wielu sieci neuronowych, aby zmniejszyć efekt początkowych nasion. Osobiście nie widziałem ogromnej poprawy w użyciu, avNNetale może rozwiązać twoje pierwotne pytanie.

Dopilnuję również, aby wszystkie twoje dane były odpowiednio uwarunkowane. Czy ortogonalizowałeś je, a następnie ponownie przeskalowałeś? Caret może również wykonać to wstępne przetwarzanie za pośrednictwem swojej pcaNNetfunkcji.

Na koniec możesz rozważyć rzutowanie w niektórych połączeniach pomijania warstw. Musisz jednak upewnić się, że w danych nie ma żadnych wartości odstających / punktów dźwigni, aby wypaczyć te połączenia.

Shea Parkes
źródło
Co ciekawe, przestawiłem trening sieci na funkcję „nnet” (dostępną w pakiecie o tej samej nazwie), a wyniki w zestawie testowym danych stały się znacznie bardziej stabilne - być może ma to związek z innym sposobem, w jaki wagi są zainicjowany między dwoma pakietami?
tfb
W nnetpoczątkowych wagach wszystkie są inicjowane do jednolitej liczby losowej od -0,7 do 0,7, jeśli dobrze pamiętam. I możesz kontrolować wielkość w parametrze. Szczerze mówiąc, miałem nnetdużo szczęścia z pakietem i nigdy nie wypróbowałem żadnej innej opcji. Powodzenia!
Shea Parkes,
1

Nie pracowałem z R, więc mogę jedynie podać więcej ogólnych wskazówek.

Czy sprawdziłeś, czy algorytm jest zbieżny? Jednym z możliwych wyjaśnień może być to, że różne zestawy parametrów znajdują się gdzieś w połowie tej samej wartości optymalnej.

Jeśli algorytm zawsze jest zbieżny, ale z innym lokalnym optimum, istnieje wiele heurystyk, których można by uniknąć. Jedną prostą strategią przy użyciu stochastycznego spadku gradientu (SGD) byłoby użycie mniejszych partii i większego pędu . Mniejsze rozmiary partii skutecznie wprowadzają hałas do treningu, co może pomóc uniknąć lokalnych optymów. O wiele bardziej wyrafinowaną strategią byłoby inicjowanie wag za pomocą autoencoderów .

Lucas
źródło
Tak jak FYI, tak długo jak jest on przy użyciu nnetod podstawy R, wykorzystuje metodę optymalizacji BFGS z R na optim. Faktycznie oblicza gradienty, aby uzyskać obraz powierzchni. W jego implementacji nie ma przetwarzania wsadowego ani parametru o stałym momencie. Powiedziawszy to wszystko, łatwo może się nie zbiegać; zwłaszcza ze śmieciami.
Shea Parkes
@SheaParkes dziękuje za komentarze i odpowiedzi Shea. Właściwie korzystam z pakietu neuralnet - patrz komentarz powyżej. Wykorzystuje sprężysty algorytm propagacji wstecznej z cofaniem wagi
tfb
Potem przepraszam Lucas, tęskniłem za tym smakołykiem. Cieszę się, że udało ci się to wypracować.
Shea Parkes