Projekt pn. „Wzmocnienie potencjału dydaktycznego UMK w Toruniu w dziedzinach matematyczno-przyrodniczych”
realizowany w ramach Poddziałania 4.1.1 Programu Operacyjnego Kapitał Ludzki
Wprowadzenie do Sieci Neuronowych — Laboratorium 8–10 Uczenie bez nauczyciela, samoorganizacja i PCA
Maja Czoków, Jarosław Piersa 2013-11-20
1 Powtórzenie
1.1 Algorytm Kohonena dla wejść numerycznych
Dane: Sieć neuronowa / graf G = (V, E), zbiór danych uczących X ⊂ Rn
Wynik: nauczona sieć, która powinna klasyfikować dane pod kątem ich podobieństwa (odległości między punktami). Za- uważmy, że wśród danych nie ma podanych poprawnych klasyfikacji!
1. Ustaw T — maksymalna ilość iteracji, i := 0 — licznik, każdemu węzłowi w sieci przypisz losową pozycję (losowe wagi) v.x, v.y, v.z, ...
2. Dla i = 0..T wykonuj:
• Wylosuj przykład uczący a ∈ X
• Znajdź węzeł v ∈ V , który leży najbliżej a
• Przesuń węzeł v i wszystkich jego sąsiadów „w kierunku” punktu a:
u.x = α · u.x + (1 − α)a.x u.y = α · u.y + (1 − α)a.y
(...) gdzie np. α = i+1T
3. Zwróć nauczoną sieć.
1.2 Algorytm Kohonena dla wejść symbolicznych
Dane: Sieć G = (V, E), zbiór danych symbolicznych X wraz z „miarą odległości”. Powinno zachodzić:
• d(x, x) = 0
• d(x, y) = d(y, x) ≥ 0
1. Przypisz węzłom losowe prototypy 2. Powtarzaj wiele razy
• Każdemu wierzchołkowi w przypisz listę tych przykładów, że prototyp p(w) jest do nich najbliższy
• Każdemu wierzchołkowi w przypisz nowy prototyp — medianę uogólnioną z listy klasyfikacyjnej w i list sąsiadów w
• Wyczyść listy klasyfikacyjne 3. Zwróć sieć
Mediana uogólniona zbioru {a1, ..., an} — element ai, który minimalizujeP
jd2(ai, aj)
-4 -3 -2 -1 0 1 2 3 4
-10 -5
0 5
10 -10
-5 0 5 10 15 20
(a) Skomplikowane dane w Rn. (b) Graf na który chcemy zmapować dane.
-4 -3 -2 -1 0 1 2 3 4
-10 -5 0
5 10
-10 -5 0 5 10 15 20
(c) Mapowane wierzchołków grafu na dane. (d) Mapowanie wierzchołków grafu na prze- strzeń kolorów.
/home
/root /boot
/media
/mnt /etc
/usr/bin /opt
/sbin /bin
/usr /usr/lib
/usr/include /var /src
/tmp
(e) Mapa wizualizacyjna.
Rysunek 1: Wizualizacja danych z wykorzystaniem samoorganizacji.
1.3 Algorytm klasyfikacyjny ze stałą ilością kategorii
1. Ustal ilość kategorii k,
• Wybierz przykład E,
• Znajdź dla E kategorię o najbliższym środku ciężkości,
• Jeżeli nie był w niej przypisany, to przypisz tam E, uaktualnij środki ciężkości w obu kategoriach (tj. wypisanej i wpisanej),
• Zakończ gdy stan się ustabilizuje.
Środek ciężkości Dane niech będą punkty w przestrzeni x1, .., xk ∈ Rn o masach równych m1, ..., mk > 0 odpowiednio.
Środek ciężkości układu ma współrzędne
X = P
imixi
P
imi (1)
1.4 Algorytm ze zmienną ilością kategorii
1. Przypisz zbiór kategorii k := ∅, każda kategoria ma swój prototyp P , 2. Powtarzaj wiele razy
(a) wybierz przykład E,
(b) znajdź kategorię o najbliższym prototypie P , jeżeli lista kategorii jest pusta patrz dwa punkty niżej, (c) sprawdź czy P jest wystarczająco podobny do E:
(d) jeżeli nie lub lista jest pusta to utwórz nową kategorię o prototypie E i zakończ bierzącą iterację, (e) jeżeli tak to sprawdź czy P można zaakceptować jako prototyp dla E,
(f) jeżeli nie to wróć do (2a) i wybierz kolejny najbliższy prototyp, (g) Jeżeli tak to upodobnij P do E,
ART2 Przykładowe implementacje operacji P — prototyp, E — przykład:
• Znormalizuj wszystkie przykłady E := |E|E
• najbliższy P — ten, który maksymalizuje hP, Ei,
• wystarczająco podobny — czy hP, Ei ≥ αP
jEj, gdzie α < √1n,
• można zaakceptować — czy hP, Ei ≥ ρ, gdzie ρ ∈ (0, 1),
• upodobnij
P := (1 − βP ) + βE P := P
|P | gdzie β ∈ (0, 1)
1.5 Wyszukiwanie składowych głównych
Dane: lista przykładów numerycznych X.
Wynik: wektor cech które mają największy wpływ wśród danych.
1. Rozpocznij z niewielkimi losowymi wagami,
2. Znormalizuj wszystkie wejścia do przedziału [−1, 1], 3. Powtarzaj wiele razy:
• Wybierz przykład x z listy
• (Reguła Hebba) w := w + hw, xi x
• (Reguła Oja) w := w + hw, xi (x − hw, xi w) 4. Zwróć wektor w
5. Następna składowa liczona jest tak samo, ale na danych zrzutowanych na podprzestrzeń prostopadłą do w:
x := x − whw, xi hw, wi Gdzie h·, ·i jest iloczynem skalarnym.
2 Ćwiczenia
Samoorganizacja graf na płaszczyźnie
• stwórz graf (macierz sąsiedztwa) f u n c t i o n g = g r a f ( n )
g = z e r o s( n , n );
o = eye( n -1 , n - 1 ) ;
g (1: n -1 , 2:end) = g (1: n -1 , 2:end) + o ; g = g + g ’;
end
• zaimplementuj algorytm Kohonena f u n c t i o n xy = k o h o n e n ( g );
% i l o s c w i e r z c h o l k o w n = l e n g t h( g );
% s t a r t o w e p o z y c j e xy = r a n d( n , 2 ) ;
% il i t e r a c j i T = 1 0 0 0 0 ; for t = 1: T
% s i l a p r z y c i a g a n i a a l p h a = t * 1 . 0 / ( T + 1 ) ;
% l o s u j e m y p u n k t z k w a d r a t u [0 ,1] \ t i m e s [0 ,1]
p = r a n d(1 ,2);
% i l o c z y n z e w n e t r z n y : t w o r z y nam t a b l i c e z l o z o n a z k o p i i
% w e k t o r a p
p1 = o n e s (1 , n ) ’* p ;
% o b l i c z e m y o d l e g l o s c i d = ( xy - p1 ) . ^ 2 ;
d = sum( d ’);
% n a j b l i z s z y
i = f i n d( d <= min( d ));
% s a s i e d z i n a j b l i z s z e g o : nb = g ( i , : ) ;
nbi = f i n d( nb > 0);
nbi = [ i , nbi ];
% k o r e k t a wag
p1 = o n e s (1 ,l e n g t h( nbi )) ’* p ;
xy ( nbi , :) = a l p h a * xy ( nbi , :) + (1 - a l p h a ) .* p1 ;
% r e n d e r o w a n i e co 1 0 0 0 i t e r a c j i g p l o t( g , xy , " ro - " ) ;
s l e e p ( 1 ) ; end
end % for
end % f u n c t i o n
• wyświetl wyniki n = 50;
g = g r a f ( n );
XY = r a n d( n , 2 ) ; f i g u r e( 1 ) ; g p l o t( g , XY );
f i g u r e( 2 ) ; spy( g );
f i g u r e( 3 ) ;
g l p o t ( g , k o h o n e n ( g ) , ’ ro - ’);
3 Zadania
Strony z przykładowymi implementacjami:
http://www.sund.de/netze/applets/gng/full/GNG-U_0.html http://www-users.mat.uni.torun.pl/~philip/java/SOM.html
3.1 Zadanie 1 — algorytm Kohonena
Zaimplementuj algorytm Kohonena dla wejść numerycznych lub / i symbolicznych. Pomysły na wejścia numeryczne: sa- moorganizacja grafu na płaszczyźnie lub w przestrzeni, krzywa wypełniająca figurę (por. krzywa Peano), powierzchnia wypełniająca bryłę, nakładanie tekstury na model trójwymiarowy, nakładanie siatki na kostkę RGB, CMY(K), walec HSV, stożek HSL. Przykładowe dane symboliczne: klasyfikacja stron www, fragmentów tekstów w języku naturalnym, piosenek...
W tym przypadku należy przygotować dane uczące i „miarę odległości” między nimi.
Uwagi:
Grafy powinny mieć dość regularną strukturę: łańcuch, cykl, krata, hiperkostka, drzewo binarne (trudno się uczy!), torus.
Jeżeli jest to problem na płaszczyźnie to dodatkowo graf powinien być planarny.
3.2 Zadanie 2 — Składowe główne (obrazy)
Wykorzystując regułę Hebba lub / i regułę Oja znajdź pierwszą (lub k pierwszych) składową główną dla zadanych danych uczących. Danymi mogą być np. fragmenty obrazów (ok 10 x 10 do 32 x 32 pikseli), zbiory danych w przestrzeni lub na płaszczyźnie (dość nietrywialne), statystyki logowania na serwer wydziałowy (komenda last ), statystyki ruchu w sieci (tcpdump, wireshark), listy procesów w systemie (ps -l ) itp. Dane symboliczne w miarę możliwości należy zamienić na numeryczne (np. nazwa użytkownika na uid, numer portu i adres w postaci liczbowej, typ protokołu z /etc/protocols, data na dni miesiąca, tygodnia, godziny, itp).
3.3 Zadanie 3 — Segmentacja
Za pomocą algorytmu/ów klasyfikujących wykonaj segmentację1 obrazu pod kątem barwy, tj podział obrazu na obszary charakteryzujące się podobnym kolorem. Można wykonać dla obrazów w odcieniach szarości, niezależnie dla każdego kanału R, G, B, bądź na całej przestrzeni RGB, CMY, HSV, etc. W obliczeniach warto rozważyć przypisanie kolorom ich wag np.
ilości pikseli o danym kolorze. Zadanie jest liczone jako lista czwarta — samoorganizacja.
1Tak, wiem, że są do tego dedykowane i efektywniejsze algorytmy
3.4 Zadanie 4 — Rysowanie grafu na płaszczyźnie
Za pomocą algorytmu Kohonena przemapuj graf na płaszczyznę (dla ambitnych i na wyższą ocenę: na torus / powierzchnię sfery).
Przykładowe grafy do mapowań:
• łańcuch (ścieżka wierzchołków)
• pierścień (cykliczna ścieżka wierzchołków)
• siatka kwadratowa
• periodyczna siatka kwadratowa
• hiperkostka d-wymiarowa
• drzewo binarne
• graf losowy Erd˝osa-R´enyiego, zob np. http://www.renyi.hu/∼p erdos/1959-11.pdf
• graf losowy Wattsa-Strogatza doi:10.1038/30918
• graf losowy Alberty-Barabasiego doi:10.1103/RevModPhys.74.47