Wsteczna propagacja bledow RBF

Transkrypt

Wsteczna propagacja bledow RBF
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, yi oznacza odpowiedź
neuronu i-tego, di 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 sp 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 w1 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 w1 ). 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.

Podobne dokumenty