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