Czy sieci neuronowe muszą zawsze się zbieżne?

16

Wprowadzenie

Krok pierwszy

Napisałem standardową sieć neuronową z propozycją wsteczną i aby ją przetestować, zdecydowałem się na mapowanie XOR.

Jest to sieć 2-2-1 (z funkcją aktywacji tanh)

X1  M1
        O1
X2  M2

B1  B2

Do celów testowych ręcznie skonfigurowałem górny środkowy neuron (M1), aby był bramką AND, a dolny neuron (M2), aby był bramą OR (oba wyjścia 1, jeśli prawda, i -1, jeśli fałsz).

Teraz ręcznie skonfigurowałem również połączenie M1-O1 na -5, M2-O1 na 1, a B2 na -.75

Więc jeśli M1 = 1 i M2 = 1, suma wynosi (-0,5 +1 -0,75 = -5,25) tanh (0,25) = -0,24

jeśli M1 = -1 i M2 = 1, suma wynosi ((-0,5) * (- 1) +1 -0,75 = .75) tanh (0,75) = 0,63

jeśli M1 = -1 i M2 = -1, suma wynosi ((-0,5) * (- 1) -1 -0,75 = -1,25) tanh (1,25) = -0,8

Jest to stosunkowo dobry wynik dla „pierwszej iteracji”.

Krok drugi

Następnie przystąpiłem do modyfikacji tych wag, a następnie trenowałem je, stosując algorytm propagacji błędów (oparty na spadku gradientu). Na tym etapie pozostawiam nienaruszone wagi między neuronem wejściowym i środkowym i po prostu modyfikuję wagi między środkowym (i polaryzacją) a wyjściowym.

Do testowania ustawiam wagi na i .5 .4 .3 (odpowiednio dla M1, M2 i odchylenia)

Tutaj jednak zaczynam mieć problemy.


Moje pytanie

Ustawiam szybkość uczenia się na .2 i pozwalam programowi na iterację poprzez dane treningowe (ABA ^ B) dla 10000 iteracji lub więcej.

Przez większość czasu masy są zbieżne, co daje dobry wynik. Czasami jednak te wagi są zbieżne do (powiedzmy) 1.5, 5.7 i .9, co daje wynik +1 (parzysty) na wejściu {1, 1} (kiedy wynik powinien wynosić -1).

Czy jest możliwe względnie prosty ANN, który ma rozwiązanie, które wcale się nie zbiega, czy też jest błąd w mojej implementacji?

Xodarap
źródło

Odpowiedzi:

13

(Zakładam, że przez „propagację błędów” masz na myśli to, co nazywam „ propagacją błędów po błędzie”).

Na stronie 231 Neural Networks (autorstwa Haykina) stwierdza, że ​​propagacja wsteczna zawsze jest zbieżna, chociaż szybkość może być (jego słowami) „niesamowicie powolna”.

Myślę jednak, że pytasz nie o to, czy algorytm zawsze będzie zbieżny, ale czy zawsze będzie zbieżny z optymalną odpowiedzią. I niestety tak nie będzie. Nawet w prostych przypadkach, takich jak twoje, jest całkiem możliwe, że istnieją lokalne minima, które nie są minimami globalnymi.

Radzenie sobie z lokalną ekstremą jest niezwykle ważnym tematem w optymalizacji i można znaleźć mnóstwo porad, jak sobie z tym poradzić. Jednym z najczęstszych jest to, co brzmi jak robisz: losowe ponowne uruchomienie (tj. Wystarczy uruchomić algorytm wiele razy, każdy zaczynając od losowego miejsca).

Aby dowiedzieć się, czy w kodzie jest błąd, wydrukuję termin błędu i sprawdzę, czy zmniejsza się on przy każdej iteracji. Jeśli tak, to prawdopodobnie osiągasz lokalne minima.

Xodarap
źródło
Wszystkie wagi rosną (waga neuronu OR rośnie szybciej), co minimalizuje błąd, gdy dane wejściowe wynoszą {1,0}, {0,1}, {0,0}, ale maksymalizuje błąd, gdy {1,1}. Czy to jest problem z uczeniem się on-line nad uczeniem się wsadowym?
@Shmuel: zarówno online, jak i wsadowe będą podążać w kierunku gradientu. Jeśli ten gradient wskazuje niewłaściwy kierunek, obaj pójdą w złym kierunku. Strona Wikipedia na Hill Climbing ma kilka sposobów na obejście tego, jeśli jesteś zainteresowany.
Xodarap,
6

Jeśli ustawiłeś wagi między jednostkami wejściową i ukrytą i modyfikujesz tylko ukryte wagi wyjściowe podczas treningu, nie będzie lokalnych minimów. Z ustalonymi danymi wejściowymi do ukrytych wag rozwiązany problem optymalizacji jest podobny do regresji logistycznej, ale z funkcją tanh zamiast funkcji sigmoidalnej. Niezależnie od tego problem jest wypukły i powinien istnieć tylko jeden, globalny minim.

Ponieważ lokalne minima nie powodują problemu, zaleciłbym liczbowe przybliżenie pochodnych, a następnie porównanie ich z wartościami, które obliczasz. Jeśli nie masz pewności, jak to zrobić, samouczek ULFDL firmy Standford ma ładny przegląd.

alt
źródło