Wprowadzenie do Sieci Neuronowych — Laboratorium 8–10 Uczenie bez nauczyciela, samoorganizacja i PCA
Maja Czoków, Jarosław Piersa 2012-12-05
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). Zauważ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 naj- bliższy
• Każdemu wierzchołkowi w przypisz nowy prototyp — medianę uogólnioną z listy klasyfikacyj- nej 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)
1.3 Algorytm klasyfikacyjny ze stałą ilością kategorii
1. Ustal ilość kategorii k,
2. Podziel dowolnie zbiór przekładów na k kategorii, 3. Powtarzaj wiele razy,
• 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 katego- riach (tj. wypisanej i wpisanej),
• Zakończ gdy stan się ustabilizuje.
Środek ciężkości Dane niech będą punkty w przestrzeni x1, .., xk ∈ Rno 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,
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 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
2.1 Zadanie 1 — algorytm Kohonena
Zaimplementuj algorytm Kohonena dla wejść numerycznych lub / i symbolicznych. Pomysły na wej- ścia numeryczne: samoorganizacja 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:
Zadanie liczone jako dział czwarta — samoorganizacja.
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 powien być planarny.
2.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).
2.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.
2.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
• graf losowy Wattsa-Strogatza doi:10.1038/30918
• graf losowy Alberty-Barabasiego doi:10.1103/RevModPhys.74.47
-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 przestrzeń kolorów.
/home
/root /boot
/media
/mnt /etc
/usr/bin /opt
/sbin /bin
/usr /usr/lib
/usr/include /var /src
/tmp