Wprowadzenie do Sieci Neuronowych — Algorytmy konstukcyjne

Transkrypt

Wprowadzenie do Sieci Neuronowych — Algorytmy konstukcyjne
Wprowadzenie do Sieci Neuronowych — Algorytmy konstukcyjne dla
sieci skierowanych
Jarosław Piersa, Maja Czoków
2010-11-09
1
Powtórzenie
1.1
Algorytm uczenia perceptronu
Dane: Perceptron o n wejsciach, k przykładów uczących E 1 ...E k wraz z poprawnymi odpowiedziami T 1 ...T k .
Zakładamy, że funkcja aktywująca ma postać znakową. W tej sytuacji dodatkowym parametram uczącym jest
wartość progu p.
Wynik: Wartości wag wi oraz progu p które dają optymalną klasyfikację.
1. Przypisujemy wagom i progowi małe losowe wartosci wokół 0, przypisujemy takiemu układowi wag zerowy
czas życia,
2. Przebiegamy przykłady losując z listy
3. Dla wybranego przykładu E j sprawdzamy, czy E j jest dobrze klasyfikowany,
• Jesli tak, zwiekszamy mu czas życia o jeden. Jezeli jest to wynik lepszy niż u dotychczasowego rekordzisty, zapominamy go (dotychczasowego rekordzistę) i zapisujemy bieżący układ wag jako nowego
rekordzistę. Wracamy do 2.
• Jesli nie, to
wi := wi + T j · Eij
p := p − T j
Nowo powstałemu układowi wag przypisujemy zerowy czas życia. Wracamy do 2.
4. Algorytm kończymy po przebiegnięciu odpowiedniej liczby iteracji. Zwracamy najbardziej żywotny zestaw
wag.
1.2
Sieci skierowane
Sieci skierowane (ang. feed-forward) są to grafy, w których wierzchołkami są perceptrony. Warstwą wejściową
jest zbiór perceptronów, których wejściami są dane. Warstwa wyjściowa zwraca wyniki, które nie są przetwarzane przez inne wastwy. Pozostałe neurony tworzą warstwy ukryte, za wejścia przyjmyją sygnały od innych
perceptronów i podobnie ich wyjścia są wejściami dla kolejnej warstwy.
Ponadto w grafie nie występują cykle, informacja wyjściowa z a propagując się po sieci nigdy nie powróci do
a. Działanie sieci jest zsynchronizowane tj. neuron może obliczyć i zwrócić odpowiedź tylko gdy zna wartości
wszystkich swoich wejść (niektóre z nich pochodzą od innych neuronów wówczas należy poczekać na nie).
1.3
Algorytm wieżowy / piramidalny
Dane: zbiór przykładów uczących E 1 ...E k wraz z odpowiadającymi poprawnymi odpowiedziami T 1 ...T k .
Wynik: Sieć zwracająca optymalną klasyfikację.
1. Zbuduj sieć składającą się z pojedynczego perceptronu,
2. Wybierz szczytowy perceptron i naucz go na przykładach algorytmem kieszonkowym,
3. Jeżeli wszystkie przykłady (zadowalający odsetek) jest klasyfikowany poprawnie to zakończ, zwróć aktualną sieć,
4. Jeżeli nie to dodaj do sieci dodatkowy perceptron:
1
...
...
...
...
(a) Sieć wieżowa.
(b) Sieć piramidalna.
Rysunek 1: Porównanie sieci wieżowej i poramidalnej, w tej drugiej dodatkowo dochodzą połączenia od pośrednich neuronów do wszystkich wyższych
• Jego wejściami są wszystkie wejścia danych
• (alg. wieżowy) Dodatkowo jego (n + 1)-wszym wejściem jest wyjście poprzedniego szczytowego perceptronu w sieci,
• (alg. piramidalny) Dodatkowo jego wejściami są wyjścia wszystkich niższych perceptronów w sieci,
• Zwracana przez nową jednostkę wartość będzie wynikiem całej sieci na danych wejściowych,
5. Wróć do 2.
1.4
Algorytm kafelkowy
Dane: Lista przykładów uczących wraz z poprawnymi klasyfikacjami.
Wynik: sieć klasyfikująca.
out
Rysunek 2: Sieć warstwowa.
1. Rozpocznij od sieci składającej się z warsty wejściowej L = 1.
2. Dodaj L+1 kafelek — nową warstwę składającą się, puki co, z jednego neuronu. Jego wejściami są wyjścia
z kafelka L. Naucz nowy neuron algorytmem kieszonkowym. Jeżeli nauczył się wszystkich przykładów to
zakończ zwrając sieć.
2
Rysunek 3: Architektura upstart
3. Jeżeli nie, to do kafelka L+1 dodaj kolejny neuron, przypisz mu wejścia z kafelka L. Naucz go algorytmem
kieszonkowym z zapadką, ale tylko na najbardziej licznym zbiorze, który daje ten sam zestaw odpowiedzi
na wszystkich dotychczasowych neuronach w kafelku L + 1 (tj. z punktu widzenia sieci są jeszcze takie
same), ale jednocześnie oczekiwane odpowiedzi ma różne (tj. nie chcemy aby były jednakowe).
4. Jeżeli bieżący kafel wykształcił wierną reprezentację, to wróć do 2 (tj. dodaj nowy kafel do sieci). Jeżeli
jeszcze nie, to wróć do 3 (tj. dodaj nowy neuron do bieżącego kafla).
1.5
Architektura Upstart
1. Tworzymy pojedynczą jednostkę U , która widzi wszystkie wejścia. Jej wyjście jest wyjściem całej sieci.
2. Odkładamy U na stos wraz ze wszystkimi przykładami uczącymi.
3. Dopóki stos jest niepusty, powtarzamy:
• Zdejmujemy ze stosu jednostkę Ui i zbiór stowarzyszonych z nią przykładów uczących,
• Uczymy Ui na jej przykładach uczących algorytmem zapadkowym,
• Jeżeli klasyfikacja Ui jest w pełni zgodna, to rozpocznij następną iterację pętli (continue),
• Jeżeli istnieją źle sklasyfikowane przykłady z oczekiwaną odpowiedzią +1 dla jednostki Ui , to
– tworzymy nową jednostkę Ui+ , jej wejściami są wszystkie wejścia, jej wyjście wchodzi do Ui z
dużą wagą dodatnią,
– odkładamy Ui+ na stos z następującym
zbiorem
uczącym:
E k : Uik = −1, CUk i = +1 ∪ E k : CUk i = −1 , to jest przykłady, które są klasyfikowane przez
Ui jako −1, a powinny +1 oraz przykłady, która powinny być klasyfikowane przez Ui jako −1,
Zbiór uczący dla Ui+ jest mniejszy od Ui o przykłady dodatnie, które są dobrze klasyfikowane 1 ,
• Jeżeli istnieją źle sklasyfikowane przykłady z oczekiwaną odpowiedzią −1 dla Ui , to
– tworzymy nową jednostkę Ui− , jej wejściami są wszystkie wejścia, jej wyjście wchodzi do Ui z
dużą wagą dodatnią,
– odkładamy Ui− na stos z następującym
zbiorem
uczącym:
E k : Uik = +1, CUk i = −1 ∪ E k : CUk i = +1 , to jest przykłady, które są klasyfikowane przez
Ui jako +1, a powinny −1 oraz przykłady, która powinny być klasyfikowane przez Ui jako +1 2 ,
• Zdejmij ze stosu następny neuron (continue),
4. Zwróć uzyskaną sieć.
1 Gdy będzie mało przykładów dodatnich i dużo ujemnych może się zdażyć, że nowy neuron wszystko będzie klasyfikował jako
minusy. Dla stabilności można wymusić częstsze losowanie przykładów dodatnich.
2 Patrz uwaga powyżej — symetryczna sytuacja.
3
2
Zadania
2.1
Zadanie na zajęcia (niepunktowane)
W Matlabie / Octave’ie napisz skrypt, który dla zadanej niewielkiej sieci neuronowej (np. 2 wejścia, jedno
wyjście, 2 węzły, topologia wieżowa) oraz zestawu danych uczących wyświetli:
• wykres funkcji błędu (ilość błędnie klasyfikowanych przykładów uczących) w zależności od wybranych wag
sieci,
• klasyfikację fragmentu przestrzeni wejściowej (znaczy się R2 ).
Można zmodyfikować gotowy skrypt implementujący sieć wieżową.
2.2
Zadanie 5
Za pomocą algorytmów konstrukcyjnych zbuduj sieć klasyfikującą punkty na płaszczyźnie, przestrzeni, czasoprzestrzeni, ..., z zadania 2 listy 1. Pliki z przykładami uczącymu są dostępne na stronie oraz można (zalecane!)
użyć własnych. Program powinien ponadto wyświetlić przykłady uczące z docelową klasyfikacją oraz faktyczną
klasyfikacją i statystyki jak dobrze klasyfikuje. Ponadto można wyświetlać przykłady testowe — z poza listy
uczącej.
Uwagi i wskazówki:
• Do algorytmów konstrukcyjnych proszę nie używać
bez zapadki i kieszeni),
3
naiwnej wersji algorytmu uczenia perceptronu (tj.
• Zalecany przede wszystkim algorytm kafelkowy, odradzany natomiast algorytm wieżowy (wyjątek poniżej),
• Można dodać porównanie jakości uczenia sieci (oraz kosztów czasowych i pamięciowych) dla kilku algorytmów oraz pojedynczego perceptronu (połączenie z zadaniem 2),
• Do wyświetlania można wykorzystać gotowe zewnętrzne biblioteki, OpenGL, DirectX, pisany w locie
skrypt startujący Matlaba, Octave’a, Maple’a, R, GnuPlota, generowany plik ps lub pdf, a jak ktoś czuje
się na siłach to i grafikę ASCII (choć jest to chyba najtrudniejsza opcja),
• Zadanie liczone jako dział 2.
2.3
Zadanie 6
Napisz program, który dla zadanego zbioru przykładów uczących (patrz zadanie 2) oraz nauczonego perceptronu (zad. 2) lub sieci (zad. 5) wyświetli profil funkcji błędu dla dwóch (dla ambitnych: trzech) wybranych
wag i przy ustalonych wartościach pozostałych wag.
X
ERROR(w1 , ..., wn ) =
(Ow1 ,..,wk (E k ) − T k )2
k
Choć wykres musi uwzględniać maksymalnie trzy wagi (ze względu na czytelność), można swobodnie wybierać,
które z wag mają być zmienne, a które ustalone. Program jest liczony jako dział pierwszy lub drugi, zależnie
od tego czy wyświetlane są wagi pojedynczego perceptronu, czy sieci. Program będzie można również napisać
pod sieć nauczoną algorytmem propagacji wstecznej (co nie zwalnia z obowiąku zaimplementowania BEP na
ocenę bdb+).
3 Brak
zaprzeczenia w jednej z poprzednich wersji tych notatek był oczywiście (alko)chochlikiem drukarskim
4