Algorytm wstecznej propagacji błędów dla sieci RBF Michał Bereta www.michalbereta.pl Sieci radialne zawsze posiadają jedną warstwę ukrytą, która składa się z neuronów radialnych. Warstwa wyjściowa składa się z neuronów liniowych. Każdy j-ty neuron radialny realizuje funkcję Gaussa: Jak widać, wektor wag jest tu użyty inaczej niż w neuronach z sigmoidalną funkcją aktywacji. W neuronie radialnym nie wykonuje się iloczynu skalarnego wektora wag z wektorem sygnałów wejściowych x. Zamiast tego liczy się odległość euklidesową między wektorem wag a wektorem sygnałów wejściowych x. Dodatkowo, każdy neuron posiada parametr sigma, który steruje szerokością kapelusza Gaussa. Oba te parametry (wektor wag oraz sigma) są inne dla każdego neuronu radialnego i mogą być modyfikowane w trakcie nauki. Podejście jest takie samo jak w przypadku sieci MLP, tzn. liczymy gradient funkcji błędu względem wszystkich parametrów sieci, które mają podlegać modyfikacjom w trakcie nauki. W tym przypadku neurony liniowe w warstwie wyjściowej są dokładnie takie same jak w przypadku sieci MLP. W warstwie ukrytej (radialnej) wektor wag w1 jest używany inaczej, zatem jego wpływ na błąd będzie inny, co prowadzi do
innych wzorów na gradient. Potrzebne jest również policzenie pochodnych (składowych wektora gradientu) funkcji błędu po parametrach sigma każdego neuronu radialnego. Neuron i-ty warstwy wyjściowej realizuje odwzorowanie liniowe sygnałów h dochodzących od neuronów warstwy ukrytej: gdzie i=1..m, m to liczba neuronów wyjściowych. Bardziej dokładnie zależność od wektora sygnałów wejściowych x można przedstawić jako: Dla jednego przykładu trenującego błąd definiujemy podobnie jak poprzednio jako: przy czym m oznacza liczbę neuronów liniowych w warstwie wyjściowej, y i oznacza odpowiedź neuronu i-tego, d i oznacza odpowiedź wzorcową (oczekiwaną) tego neuronu. Idea algorytmu wstecznej propagacji błędów polega na modyfikowaniu wektora wag w odwrotnym kierunku niż gradient funkcji błędu. Ogólny wzór zatem to: gdzie eta to krok uczenia, będący parametrem algorytmu. W szczególności dla j-tej wagi i-tego neuronu warstwy wyjściowej (drugiej), wzór ten sprowadza się do: Uwaga! 2 w górnym indeksie wagi w nie oznacza potęgi, a jedynie jest indeksem wskazującym numer warstwy sieci. Analogicznie jest dla neuronów warstwy pierwszej (ukrytej). Dla g-tej wagi neuronu t-tego warstwy ukrytej (pierwszej) wzór sprowadza się do:
Jako, że parametry sigma neuronów radialnych również mają wpływ na błąd sieci, podlegają one modyfikacji poprzez odpowiednie składowe gradientu, tzn., dla sigma neuronu radialnego j-tego mamy : Wartość gradientu dla j-tej wagi i-tego neuronu warstwy wyjściowej wynosi (tak samo jak dla warstwy wyjściowej sieci MLP): w szczególności dla wagi biasu: Wartość gradientu dla q-tej wagi neuronu p-tego warstwy ukrytej wynosi: gdzie m to liczba neuronów liniowych w warstwie wyjściowej. UWAGA! 2 w górnym indeksie w oznacza numer warstwy, a nie potęgę. Natomiast 2 przy parametrze sigma oznacza podniesienie do kwadratu. Wartość gradientu dla parametru sigma neuronu radialnego o indeksie p wynosi:
gdzie s p to kwadrat odległości wektora x oraz wektora wag p-tego neuronu radialnego, czyli: Ostatecznie otrzymujemy następujące wzory na modyfikację wag obu warstw oraz parametrów sigma (k to chwila czasowa): Liczba neuronów ukrytych zależy od rozwiązywanego problemu. Zaletą sieci radialnych jest to, że można wstępnie wybrać rozsądne położenie neuronów radialnych, tzn. punkty ich zaczepienia (wektor wag w 1 dla każdego neuronu radialnego). Istnieje wiele sposobów. Można zastosować algorytm grupowania, jak k-means. Najprościej jest wybrać losowo pewien podzbiór przykładów uczących. Każdy taki wybrany przykład x staje się wektorem wag jednego neuronu radialnego (punktem zaczepienia kapelusza Gaussa). Wstępną wartość parametru sigma można dobrać choćby posługując się prostą heurystyką: dla każdego neuronu radialnego znajdź jego najbliższego sąsiada wśród innych neuronów radialnych posługując się odległością Euklidesa (odległości mierzy się korzystając ze wstępnie ustalonych wektorów wag w 1 ). Następnie, ustaw początkowe sigma jako połowę odległości między tymi neuronami (ich wektorami wag). Przykładowy rezultat dla problemu 1D widać na rysunku poniżej jeden neuron radialny jest w punkcie -10, drugi w punkcie 4. Sigma dla nich obu jest ustalona jako 0.5*sqrt((w1-w2)*(w1-w2)) = 7.0
gdzie w1 = -10 a w2 = 4. Taka procedura zapewnia, że neurony będą na siebie mniej więcej zachodzić. W innym przypadku, gdy w1 = -1 oraz w2=0.5, sigma zostanie wyliczona jako: 0.5*sqrt((w1-w2)*(w1-w2)) = 0.75
Inną metodą jest policzenie maksymalnej odległości d między dowolnymi dwoma centrami neuronów radialnych i oszacowanie sigma (identycznej dla każdego neuronu radialnego) jako sigma = d / sqrt( 2 * K ) gdzie K oznacza liczbę centrów (liczbę neuronów radialnych). W trakcie nauki sieci, sigma dla każdego neuronu radialnego może ulec zmianie.