opis zadania pochodzący z ksir.wi.ps.pl
Transkrypt
opis zadania pochodzący z ksir.wi.ps.pl
Metody sztucznej inteligencji Zadanie 3: (1) klasteryzacja — samoorganizująca się mapa Kohonena, (2) aproksymacja — sieć RBF. dr inż. Przemysław Klęsk 1 Klasteryzacja za pomocą samoorganizującej się mapy Kohonena Dany jest zbiór punktów xi i=1,...,I gdzie xi = (xi1 , . . . , xin ) ∈ Rn . Zadanie klasteryzacji polega na przybliżeniu danego zbioru punktów za pomocą mniejszej liczby K punktów (K << I). W ten sposób można mówić o wykrywaniu skupień w zbiorze danych o pewnym rozkładzie czy też o wykrywaniu kształtów. Punkty przybliżające zbiór oryginalny nazywa się prototypami lub centrami klastrów. Patrz rysunki 1 i 2. 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 0 0.2 0.4 0.6 0.8 1 Rysunek 1: Dany zbiór punktów (kolor zielony) i początkowe ustawienie zbioru prototypów (niebieskie krzyże). Poniżej omówiono mapę (sieć) Kohonena oraz algorytm Kohonena z kilkoma modyfikacjami w stosunku do tego, co zostało powiedziane laboratoriach. 1 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 0 0.2 0.4 0.6 0.8 1 Rysunek 2: Dany zbiór punktów (kolor zielony) i końcowe ustawienie zbioru prototypów (niebieskie krzyże) po wykonaniu się algorytmu. 1.1 Mapa (sieć) Kohonena oraz algorytm Kohonena Należy rozpocząć od losowego zaincjalizowania K prototypów na obszarze dziedziny. Oprócz sensu geometrycznego każdy z prototypów można rozumieć jako neuron w sieci Kohonena. Oznaczmy wagi k-tego neuronu przez ck = (ck1 , ck2 , . . . , ckn ). Każdy z neuronów jest połączony z wszystkim wejściami x1 , . . . , xn i na jego wyjściu obliczana jest suma ważona wejść — czyli iloczyn skalarny ck · xT . Jak wiadomo iloczyn skalarny jest miarą podobieństwa dwóch wektorów ck · xT = ck x cos ∠(ck , x). (1) Sieć Kohonena jest standardowo uczona w trybie on-line, tzn. w każdej iteracji uczenia na wejście podawany jest pewien jeden punkt x wylosowany ze sieci zbioru uczącego xi i=1,...,I . I w pierwszej kolejności należy w sieci wyłonić tzw. zwycięzcę tj. neuron leżący najbliżej podanego na wejście punktu. Oznaczmy zwycięzcę jako cw(x) , gdzie w(x) ∈ {1, . . . , K} zwraca nam indeks neuronu zwycięskiego (winner dla podannego punktu x). Zwycięzca musi spełniać warunek (2) cw(x) = min ck − x. k=1,...,K Aby wyłonić zwycięzcę nie posługując się wprost wzorem na odległość ck − x a raczej iloczynami skalarnymi obliczonymi przez neurony, należy tak naprawdę obserwować wielkość1 : (3) 2ck xT − ck 2 , (sam iloczyn skalarny ck xT nie wystarcza) jako że: ck − x2 = (ck − x)(ck − x)T = ck 2 − 2ck xT + x2 . 1 Jest to jeden ze szczegółów, który nie został pominięty na zajęciach. 2 (4) Innymi słowy wyrażenie ck −x jest minimalne tam, gdzie wyrażenie 2ck xT − ck 2 jest maksmylane. Składnik x2 można pominąć, gdyż jest on w danej iteracji taki sam dla wszystkich konkurujących neuronów. Tak więc dopiero posługując się wyrażeniami wg wzoru (3) można mówić o ich równoważności z odległościami i wykrywać na ich podstawie zwycięzcę. Wyłoniwszy zwycięzcę należy zmodyfikować jego wagi (jego położenie w dziedzinie) wg wzoru: cw(x) := cw(x) + η(x − cw(x) ), (5) gdzie η oznacza współczynnik uczenia (w eksperymentach sugeruję ustawiać η ∈ [0.1, 1]). Jeżeli modyfikacji w danej iteracji podlegałby tylko sam zwycięzca, to mamy do czynienia z tzw. wariantem WTA tego algorytmu (ang. Winner Takes All ). W praktyce używa się zwykle jednak wariantu WTM (ang. Winner Takes Most), co oznacza, że nie tylko sam zwycięzca, ale i jego neurony-sąsiedzi (w sensie bliskości w dziedzinie) podlegają modyfikacji, tyle że w słabszym stopniu: ∀k = 1, . . . , K, (6) ck := ck + η(x − ck )G(ck , cw(x) ) gdzie funkcja G jest gaussowską funkcją bliskości (ck1 − cw(x),1 )2 + · · · + (ckn − cw(x),n )2 G(ck , cw(x) ) = exp − 2σ 2 ck − cw(x) 2 = exp − . 2σ 2 (7) (Uwaga: na zajęciach pomyłkowo podano jako argumenty dla funkcji G: ck i x. Jest to błędne. Bliskość nie ma być liczona pomiędzy wylosowanym z danych punktem x i każdym neuronem, lecz pomiędzy neuronem zwycięzcą i każdym neuronem). Parametr σ steruje szerokością dzwonu gaussowskiego. Im większe σ, tym większy zasięg sąsiedztwa. Można ustawić σ na pewną stałą wartość, jednakże w praktyce lepsze efekty daje zmniejszanie σ w trakcie pracy algorytmu. I tak niech j oznacza licznik głównej pętli uczącej (pętli on-line), j = 1, . . . , jmax . Wówczas można zmniejszać parametr σ np. w sposób potęgowy: σj = σmax σ min σmax j j−1 max −1 . (8) Jeżeli chodzi o wybór przedziału [σmin , σmax ], to należy tu poeksperymentować uwzględniając rozpiętość dziedziny oraz przyjętą liczbę neuronów — K, tzn. biorąc tak naprawdę pod uwagę stosunek rozpiętości dziedziny do K. 1.2 Ćwiczeniowe zbiory do eksperymentów Należy wykonać eksperymenty dla czterech zbiorów punktów (omówiono na zajęciach) zaczęrpniętych losowo z takich kształtów geometrycznych: 1. okrąg, 2. symbol „karo”, 3 3. spirala, 4. okrąg plus koło. Proponuję zadawać zbiory o rozmiarze 1000 punktów i przybliżać je przez K = 100 prototypów. Mile widziana jest wizualizacja przesuwania się prototypów w trakcie działania algorytmu. 2 Aproksymacja za pomocą sieci RBF W tym punkcie rozpatrujemy zadanie aproksymacji (podobnie jak to miało miejsce w zadaniu nr 2 dotyczącym MLP). Dany jest więc zbiór par uczących: (xi , yi ) i=1,...,I , gdzie xi = (xi1 , . . . , xin ) ∈ Rn , yi ∈ R. ψ1 w1 1 .. . x1 .. . x2 w0 w2 ψ2 yRBF .. . wK xn .. . ψK Rysunek 3: Schemat sieci RBF. Sieć RBF (ang. Radial Basis Functions) — patrz rys. 3 — o jednej warstwie ukrytej można zapisać wzorem yRBF (x) = w0 + K wk ψk x) (9) k=1 gdzie jako funkcję radialną przyjmuje się zwykle funkcję Gaussa: (x − c )2 + · · · + (x − c )2 1 k1 n kn . ψk (x) = exp − 2σk2 (10) W praktyce dla nastrojenia (nauczenia) sieci RBF nie stosuje się algorytmów on-line, przy czym jest to oczywiście możliwe. Ogólne kroki heurystycznego algorytmu strojenia sieci RBF są następujące: 1. dobierz eksperymentalnie lub ustal z góry liczbę K — liczbę neuronów, 2. wykonaj klasteryzację skończonego zbioru xi i=1,...,I (np. algorytmem Kohonena) uzyskując K prototypów (centrów dla przyszłych neuronów) c1 , . . . , cK , 4 3. dobierz szerokości σ1 , . . . , σK neuronów, biorąc pod uwagę odległość do najbliższych neuronów-sąsiadów, 4. mając już ustalone K, c1 , . . . , cK , σ1 , . . . , σK , znajdź wagi w0 , . . . , wK na podstawie kryterium najmniejszych kwadratów (czyli rozwiązując liniowy problem optymalizacji). Elementy heurystyczne, którymi mogą różnić się poszczególne konkretne algorytmy, działające wg powyższego schematu, to sposób znajdowania parametrów ck i σ k . W kroku trzecim dla każdego z neuronów znajdujemy odległość do najbliższego z pozostałych neuronów, tj.: dk = min ck − cj , (11) σk = αdk , (12) j=1,...,K j=k a następnie ustawiamy gdzie α ∈ [1, 3] jest parametrem dobieranym eksperymentalnie, wpływającym na to, jak bardzo neurony nachodzą na siebie. Znając już centra i szerokości neuronów, można wyznaczyć wagi w0 , . . . , wK rozwiązując liniowy problem optymalizacji, tj. minimalizując błąd 2 1 2 1 E = yRBF (xi ) − yi . 2 2 i=1 I (13) Z warunku koniecznego istnienia ekstremum ∂ 12 E 2 = 0, ∂wk ∀k = 0, . . . , K (14) otrzymujemy K + 1 równań: ∂ 12 E 2 yRBF (xi ) − yi = 0; =0⇔ ∂w0 i=1 I ∂ 12 E 2 yRBF (xi ) − yi ψk (xi ) = 0; =0⇔ ∂wk i=1 I ∀k = 1, . . . , K (15) Zapisujemy macierzowo układ równań ⎛ 1 ψ1 (xi ) ··· ψK (xi ) 2 I ⎜ ψ (x ) ψ (x ) · · · ψ (xi )ψ1 (xi ) 1 i i K 1 ⎜ ⎜ .. .. .. . . ⎝ . . . . i=1 2 ψK (xi ) ψK (xi ) ψ1 (xi )ψK (xi ) · · · A ⎞⎛ ⎟⎜ ⎟⎜ ⎟⎜ ⎠⎝ w0 w1 .. . wK W ⎞ ⎛ I ⎜ ⎟ ⎟ ⎜ ⎟= ⎜ ⎠ i=1 ⎝ yi yi ψ1 (xi ) .. . B (16) (17) Tym sposobem wszystkie parametry sieci RBF o postaci (9) zostały znalezione. 5 ⎟ ⎟ ⎟, ⎠ yi ψK (xi ) i jeżeli tylko det A = 0, to rozwiązaniem jest W = A−1 B. ⎞ 2.1 Zbiory do przeprowadzenia aproksymacji Podobnie jak to miało miejsce w zadaniu nr 2, należy aproksymować zbiór punktów o wartościach yi zaczerpniętych z funkcji f (x1 , x2 ) = cos(x1 x2 ) cos(2x1 ). Różnicę natomiast stanowi sposób próbkowania samej dziedziny. Punkty xi mają być wygenerowane wg takich dwóch schematów: 1. szachownica 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 0 0.2 0.4 0.6 0.8 1 2. pas spiralny 1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1 −1 −0.5 0 0.5 1 Oba powyższe schematy należy wpisać (przeskalować) w kwadrat [0, π] × [0, π], a następnie dla tych punktów pobrać wartości yi z funkcji f . 6