Sztuczne sieci neuronowe Ćwiczenia
Transkrypt
Sztuczne sieci neuronowe Ćwiczenia
Sztuczne sieci neuronowe Ćwiczenia Piotr Fulmański, Marta Grzanek Piotr Fulmański1 Marta Grzanek2 Wydział Matematyki i Informatyki, Uniwersytet Łódzki Banacha 22, 90-232, Łódź Polska e-mail 1: [email protected], 2: [email protected] Data ostaniej modyfikacji: 13 marca 2007 Zanim zaczniemy . . . Tutaj kiedyś coś będzie Piotr Fulmański Marta Grzanek Łódź, 2007 c Sztuczne sieci neuronowe. Ćwiczenia 2007 by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007) ii ROZDZIAŁ 0. ZANIM ZACZNIEMY . . . c Sztuczne sieci neuronowe. Ćwiczenia 2007 by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007) Spis treści Zanim zaczniemy . . . i 1 Sztuczny neuron - budowa i wykorzystanie 1 2 Badanie możliwości klasyfikacji 2.1 Wprowadzenie . . . . . . . . . . 2.2 Sieć jednowarstwowa . . . . . . 2.2.1 Przygotowanie . . . . . 2.2.2 Przebieg eksperymentu . 2.3 Sieć dwuwarstwowa . . . . . . . 2.4 Sieć radialna . . . . . . . . . . 2.5 Wnioski . . . . . . . . . . . . . . . . . . . . 3 3 4 4 4 5 5 5 . . . . . . 7 7 7 8 8 10 11 . . . . . . . 3 Najprostsza sieć 3.1 Zadanie . . . . . . . . . . . . . . 3.2 Konstrukcja sieci i przebieg nauki 3.2.1 Architektura . . . . . . . 3.2.2 Nauka . . . . . . . . . . . 3.3 Algorytm . . . . . . . . . . . . . 3.4 Zadanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c Sztuczne sieci neuronowe. Ćwiczenia 2007 by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iv SPIS TREŚCI c Sztuczne sieci neuronowe. Ćwiczenia 2007 by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007) Rozdział 1 Sztuczny neuron - budowa i wykorzystanie Opisać budowę sztucznego neuronu. Opisać elementarne sieci. Funkcje aktywacji liniowa f (x) = x (1.1) progowa bipolarna 1 dla x ≥ 0, −1 dla x < 0. (1.2) f (x) = 1 dla x ≥ 0, 0 dla x < 0. (1.3) f (x) = 2 −1 1 + exp(−λx) (1.4) 1 1 + exp(−λx) (1.5) f (x) = progowa unipolarna sigmoidlana bipolarna sigmoidlana unipolarna f (x) = radialna f (x) = exp kx − ck2 r2 c Sztuczne sieci neuronowe. Ćwiczenia 2007 by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007) (1.6) 2 ROZDZIAŁ 1. SZTUCZNY NEURON - BUDOWA I WYKORZYSTANIE c Sztuczne sieci neuronowe. Ćwiczenia 2007 by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007) Rozdział 2 Badanie możliwości klasyfikacji 2.1 Wprowadzenie Jednym z najczęściej powierzanych sieciom neuronowym zadań jest klasyfikacja obiektów. Przez „obiekt” rozumieć będziemy tutaj wiele różnych rzeczy: litery, obrazy, dźwięki itd. Każdy z takich obiektów reprezentowany jest przez ciąg liczb. Skoro tak, to ciąg ten możemy utożsamiać z pewnym wektorem, czyli punktem w przestrzeni odpowiedniego wymiaru. Zatem możemy inaczej powiedzieć, że sieć uczy się klasyfikowania punktów pewnej przestrzeni do różnych klas. Interesującym zagadnieniem jest: • jak sposób rozmieszczonia punktów w przestrzeni wpływa na konstrukcję sztucznej sieci neuronowej; • w jakim stopniu przyjęte założenia co do sposobu konstrukcji determinują możliwą do rozwiązania klasę problemów. Aby znaleźć przynajmniej częściową odpowiedź na powyższe pytania, przebadamy kilka różnych sieci zwracając bacznie uwagę na sposób podziału przestrzeni sygnałów wejściowych. W kolejnych podrozdziałach będziemy badać: • sieci jednowarstwowe: – z neuronami o liniowej funkcji aktywacji, – z neuronami o progowej funkcji aktywacji, – z neuronami o sigmoidalnej funkcji aktywacji; • sieci wielowarstwowe: – z neuronami o liniowej funkcji aktywacji, – z neuronami o progowej funkcji aktywacji, – z neuronami o sigmoidalnej funkcji aktywacji; • sieci radialne. c Sztuczne sieci neuronowe. Ćwiczenia 2007 by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007) 4 ROZDZIAŁ 2. BADANIE MOŻLIWOŚCI KLASYFIKACJI 2.2 2.2.1 Sieć jednowarstwowa Przygotowanie Przyjmujemy najprostszy z możliwych modeli sztucznej sieci neuronowej, tj. model sieci złożonej z jednego neuronu. Przyjmujemy, że neuron posiada dwa wejścia oraz bias. Ponieważ mamy dwa wejścia, więc wektory sygnałów wejściowych będą miały w tym przypadku tylko dwie zmieniające się współrzędne. Skoro tak, to łatwo możemy je interpretować jako pewien punkt na płaszczyźnie. Ponadto przyjmujemy dalej następujšce założenia: 1. sygnały wejściowe zmieniają się w zakresie od −5 do +5 z pewnym, wybranym indywidualnie krokiem, np. 0.1; 2. wagi są liczbami losowymi z przedziału [−5, 5]. 2.2.2 Przebieg eksperymentu 1. Ustalmy wartość biasu na 0.0. 2. Wybieramy jedną z funkcji aktywacji: (1.1),(1.2) lub (1.4). 3. Losujemy wagi. W tym przypadku będą to wagi: w1 związana z pierwszym sygnałem wejściowym x1 , w2 związana z drugim sygnałem wejściowym x2 oraz w0 związana z biasem xb . 4. Podajemy na wejście sieci parę punktów (x1 , x2 ) z przestrzeni sygnałów wejściowych ([−5, 5] × [−5, 5]). 5. Dla pary sygnałów wejściowych obliczamy wartość wyjścia neuronu dla przyjętej funkcji aktywacji. 6. W zależności od wartości otrzymanej na wyjściu, w punkcie odpowiadającym wartości podanych na wejście sygnałów, stawiamy kropkę o odpowiednim kolorze. Sposób kolorowania podany zostanie poniżej. 7. Postępowanie z punktów 2 − 5 kontynuujemy tak długo aż wyczerpiemy wszystkie punkty z zadanego obszaru przy przyjętym kroku. 8. Jeśli nie przebadaliśmy jeszcze zachowania dla trzech funkcji aktywacji to powracamy do punktu 2, gdzie wybieramy kolejną funkcję aktywacji. 9. Jeśli przebadaliśmy zachowanie sieci dla trzech funkcji aktywacji, to powracamy do punktu 2, ustalając wartość biasu na 1.0. Całe powyższe postępowanie należy powtórzyć kilkakrotnie, aby móc zaobserwować pewne prawidłowości. Pozostało jeszcze ustalić sposób kolorowania. W przypadku funkcji progowej jako, że przyjmuje ona tylko dwie wartości, używamy tylko dwóch kolorów: czerwonego dla wartości równych 1 i niebieskiego dla wartosci równych −1. Liniowa funkcja aktywacji może przyjmujmować dowolną wartość rzeczywistą z przedziału [−55.0, 55.0]. Dlatego przyjmujemy następujący sposób kolorowania (lub dowolny c Sztuczne sieci neuronowe. Ćwiczenia 2007 by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007) 2.3. SIEĆ DWUWARSTWOWA 5 inny będący jego rozszerzeniem – im więcej kolorów, tym lepiej będzie widać zdolności sieci do podziału płaszczyzny) • dla wartości większych lub równych 1.0 – czerwony; • dla wartości z przedziłu [0.0, 1.0) – żółty; • dla wartości z przedziłu [−1.0, 0.0) – zielony; • dla wartości mniejszych od −1.0 – niebieski. Sigmoidalna funkcja aktywacji może przyjmujmować dowolną wartość rzeczywistą z przedziału (−1.0, 1.0). Dlatego przyjmujemy następujący sposób kolorowania (uwaga o sposobie kolorowania j.w.) • dla wartości większych lub równych 0.8 – czerwony; • dla wartości z przedziłu [0.0, 0.8) – żółty; • dla wartości z przedziłu [−0.8, 0.0) – zielony; • dla wartości mniejszych od −0.8 – niebieski. 2.3 Sieć dwuwarstwowa Po przebadaniu możliwości jednego neuronu (sieci jednowarstwowej), zajmiemy się siecią dwuwarstwową. Przyjmujemy następującą strukturę sieci: dwa neurony w pierwszej warstwie oraz jeden w drugiej – ostatniej (wyjściowej), połączone na zasadzie „każdy z każdym”. Dla tak zbudowanej sieci powtarzamy kroki 1−9 wykonywane podczas badania sieci jednowarstwowej. 2.4 Sieć radialna Dla sieci radialnej przyjmujemy strukturę taką jak przedstawioną w rozdziale 1, przy czym w wartwie radialnej używać będziemy trzech neuronów. Używać będziemy bardzo prostego sposobu kolorowania: czerwony dla wartości większych lub równych 0 i niebieski dla wartosci mniejszych od 0. 2.5 Wnioski Oto jakie wnioski powinno dać się wysnuć w wyniku przeprowadzonych eksperymentów. 1. Pojedyńczy neuron z progową funkcją aktywacji zawsze dzieli przestrzeń na dwie podprzestrzenie za pomocą prostej. Prosta ta zawsze przechodzi przez punkt (0, 0) jeśli bias ma wartość 0.0 (rys. ??,??). 2. Sieć złożona z neuronów progowych dzieli przestrzeń za pomocą łamanej o ile występuje bias (rys. ??). 3. Sieć złożona z jednostek liniowych zawsze dzieli przestrzeń w ten sam sposób niezależnie od ilości warstw. Podziałten wyznaczany jest przez równoległe do siebie linie proste (rys. ??). c Sztuczne sieci neuronowe. Ćwiczenia 2007 by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007) 6 ROZDZIAŁ 2. BADANIE MOŻLIWOŚCI KLASYFIKACJI 4. Pojedyńczy neuron z sigmoidalną funkcją aktywacji dzieli przestrzeń podobnie do neuronu liniowego. 5. Sieć wielowarstwowa z sigmoidalnymi funkcjami aktywacji dzieli przestrzeń na podobszary za pomocą krzywych. Jeśli bias ma wartość 0.0, wówczas podział ten jest symetryczny względem punktu (0, 0) (rys. ??,??). 6. Sieć radialna dzieli przestrzeń na podprzestrzenie będące „kombinacją” kół (rys. ??). c Sztuczne sieci neuronowe. Ćwiczenia 2007 by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007) Rozdział 3 Najprostsza sieć 3.1 Zadanie Zadanie postawione przed nami jest następujące: skonstruować sieć, która będzie mogła rozpoznawać wzorce graficzne należące do dwóch różnych klas. Jako wzorcy graficznych używać będziemy liter zapisanych w prostokątnym obszarze podzielonym na 7 wierszy i 5 kolumn. Każda komórka leżąca na przecięciu pewnego wiersza z jakąś kolumną może być czarna lub biała. W ten oto sposób, przyjmując za rozpatrywane wzorce litery A oraz C i przypisując im odpowiednio klasy oznaczane przez 0 oraz 1, możemy przedstawić je w następujący sposób XXXXX X X X X XXXXX X X X X X X XXXXX X X X X X XXXXX X - czarne pole Jeśli teraz nauczymy sieć tych dwóch wzorcy wówczas oczekiwać będziemy, że podanie zniekształconego wzorca A skutkować będzie odpowiedzią bliską 0, natomiast w przypadku zniekształconego wzorca C odpowiedzią bliską 1. 3.2 Konstrukcja sieci i przebieg nauki Aby osiągnąć pożądane zachowanie sieci, którego przejawem jest zdolność do klasyfikowania obiektów, musimy: • określić architekturę sieci – – – – ile warstw? ile neuronów w każdej warstwie? jak połączyć neurony? jaki rodzaj funkcji aktywacji wybrać? • określić sposób uczenia. c Sztuczne sieci neuronowe. Ćwiczenia 2007 by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007) 8 ROZDZIAŁ 3. NAJPROSTSZA SIEĆ 3.2.1 Architektura Przyjmiemy najprostszą z możliwych architektur. Sieć będzie składała się z tylko jednej warstwy. W warstwie tej będzie tylko jeden neuron. Ilość wejść określamy na równą ilości punktów tworzących wzorce graficzne, plus jedno stałe wejście, na które bez względu na wzorzec zawsze podawany jest sygnał o wartości 1.0. Zatem neuron będzie miał 5*7+1=36 wejść numerowanych od 0 do 35, przy czym wejście numer 0 jest wejściem o stałym sygnale. Jako funkcję aktywacji wybieramy funkcję liniową lub sigmoidalną unipolarna. 3.2.2 Nauka Celem nauki jest dobranie takich parametrów sieci aby zachowywała się ona zgodnie z naszymi oczekiwaniami przypisując wzorcom podobnym do A wartość bliską 0 a wzorcom podobnym do C wartość bliską 1. Jedynymi parametrami, za pomocą których możemy sterować zachowaniem neuronu są wagi. To właśnie od ich doboru będzie zależało jakie zadania i w jakim stopniu neuron będzie w stanie wykonać. Na początku musimy zdefiniować dwa zbiory. 1. Zbiór pierwszy, to zbiór sygnałów jakie będą podawane na wejście neuronu; w naszym przypadku: sygnały reprezentujące litery A i C. 2. Zbiór drugi, to zbiór prawidłowych sygnałow wyjściowych neuronu; w naszym przypadku: odpowiednio 0 i 1. Oznaczmy pierwszy z tych zbiorów przez P , drugi przez T . Elementy tych zbiorów oznaczać będziemy małymi literami – odpowiednio p i t, z ineksem wskazujacym na numer. Tak wiec mamy: P = {p1 , p2 } oraz T = {t1 , t2 } = {0, 1} gdzie p1 i p2 to wektory powstałe w oparciu o obrazy naszych wzorcy, według zasady: czarne pole = 1, białe = −1. Przyjmują one postać (odstępu co 5 dodane są dla czytelnosci): p1 =11111 p2 =11111 1-1-1-1 1 1-1-1-1-1 1-1-1-1 1 1-1-1-1-1 1 1 1 1 1 1-1-1-1-1 1-1-1-1 1 1-1-1-1-1 1-1-1-1 1 1-1-1-1-1 1-1-1-1 1 1 1 1 1 1 Oba zbiory P oraz T tworzą zbiór uczący L = {P, T }. Dążymy do tego, aby wyjście z sieci yi zależne od podanego wzorca pi , i = 1, 2 różniło się jak najmniej od odpowiedzi oczekiwanej przez nas, czyli aby różnica (ti − y) dla i = 1, 2 była jak najmniejsza. Inaczej mówiąc, dążymy do minimalizacji określonej tym sposobem funkcji. Skoro jednak ma to być funkcja, to powinna mieć jakąś zmienną (lub zmienne). Powyżej powiedzieliśmy, że jedyne co może sie w neuronie zmieniać to jego wagi. Ostatecznie więc otrzymujemy nastepującą definicję funkcji E(w) = (ti − y), gdzie w = [w0 , ..., w35 ] Po prawej stronie nie widać aby y zależało od w, ale łatwo jest to zmienić (a raczej pokazać). Zgodnie z wcześniej podanymi informacjami y definiujemy jako y = f (net), przy czym net określone jest jako net = 35 X (xik wk ), k=0 c Sztuczne sieci neuronowe. Ćwiczenia 2007 by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007) 3.2. KONSTRUKCJA SIECI I PRZEBIEG NAUKI 9 gdzie xik oznacza wartość k-te wejście w wyniku podania i-tego wzorca. Ostatecznie 35 X E(w) = (ti − f ( xik wk )). k=0 Zwykle aby zapewnić sobie, że funkcja E ma minimum i aby otrzymać w wyniku dalszych działań „przyjemną” postać, przyjmuje się ją jako 1 E(w) = (ti − y)2 . 2 Tak więc określiliśmy pewną funkcję i poszukujemy jej minimum. Do tego celu, przy założeniu różniczkowalności badanej funkcji, nadaje sie metoda gradientowa wyznaczania minimum funkcji. Pochodna funkcji policzona w pewnym punkcie, oznaczmy go przez w(t)1 , jej dziedziny wskazuje kierunek najszybszego wzrostu jej wartości. Tak więc minus pochodna w danym punkcie wskazuje kierunek najszybszego spadku jej wartości. Zatem szukając minimum przesuwamy się nieznacznie w tak wyznaczonym kierunku z punktu w którym jesteśmy obecnie, otrzymując nowy punkt oznaczany przez w(t + 1). Czyli, przyjmując za η niewielką liczbę rzeczywistą (np. 0.01) dokonujemy następującej modyfikacji: w(t + 1) = w(t) − η · kierunek, czyli w(t + 1) = w(t) − ηE 0 (w(t)). Policzmy teraz gradient2 funkcji E ∂E ∂E ∇E = , ..., ∂w0 ∂w35 (przyjąć musimy, że obliczenia prowadzone są dla pewnej pary (pi , ti )) !2 35 X ∂E 1 = Ewk (w) = ti − f ( xim wm ) = ∂wk 2 m=0 35 X 1 · 2 ti − f ( xim wm ) 2 · ti − f ( m=0 − ti − f ( 35 X wk ! xim wm ) fw0 k ( 35 X xim wm ) m=0 − ti − f ( 35 X ! xim wm ) m=0 ! m=0 35 X 35 X wk ! xim wm m=0 ! xim wm ) f 0 ( m=0 35 X = = wk xim wm )xik = m=0 0 −(ti − f (net))f (net)xik . Iloczyn (ti − f (net))f 0 (net) oznaczamy przez δ i nazywamy sygnałem błędu delta. 1 Zmienna t oznacza w tym przypadku pewną, intuicyjnie rozumianą, zależność czasową, polegającą na tym, że wartość w(t) jest obliczana przed w(t + 1). 2 Gradient, czyli pochodna funkcji wielu zmiennych. c Sztuczne sieci neuronowe. Ćwiczenia 2007 by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007) 10 ROZDZIAŁ 3. NAJPROSTSZA SIEĆ W zależności od wyboru funckji aktywacji, inaczej będzie wyglądało wyrażenie f 0 (x). Przyjmując liniową funkcję aktywacji (patrz wzór (1.1)) otrzymujemy f 0 (x) = 1.0. Dla sigmoidalnej unipolarnej funkcję aktywacji (patrz wzór (1.5)) otrzymujemy f 0 (x) = f (x)(1 − f (x)). Postać ta jest o tyle ciekawa, iż widzimy, że pochodna sigmoidalnej funkcji unipolarnej w punkcie x wyraża się przez wartość tejże funkcji w tym samym punkcie x. Oznacza to, że nie musimy przeprowadzać prawie żadnych dodatkowych obliczeń w celu obliczenia pochodnej. 3.3 Algorytm Mamy dany zbiór uczący L postaci L = {P, T }, gdzie P = {p1 , p2 } oraz T = {t1 , t2 } zgodznie z opisem powyżej. 1. Wybór (a) η > 0 – współczynnik uczenia, (b) Emax > 0 – maksymalny błąd jaki chcemy osiągnąć, (c) Cmax > 0 – ilość kroków uczenia. 2. Losowy wybór początkowych wartości wag (zmienne w0 , ..., w35 ) jako niewielkich liczb (na przykład z przedziału [−1, 1]). 3. Przyjmujemy c := 1. 4. Przyjmujemy l := 1, E := 0. 5. Losowy wybór liczby k ∈ {0, 1}. 6. Podanie k-tego obrazu ze zbioru P na wejscia neuronu: xi = pk,i , i = 0, . . . , 35. P 7. Obliczenie sygnału wyjściowego neuronu y = f (net), gdzie net = 35 m=0 xm wm . 8. Uaktualnienie wartości wag według wzoru wi (t + 1) = wi (t) − η ∂E , ∂wk k = 0, . . . , 35. 9. Obliczenie błędu b = (tk − y) oraz zaktualizowanie sumarycznej wartości błędu dla danego cyklu uczącego: E = E + 21 b2 . 10. Jesli l < 2 to l := l + 1 i przejscie do kroku 5. 11. Jesli E < Emax , to kończymy algorytm. 12. Jeśli c < Cmax , to c := c + 1 i przechodzimy do kroku 4. W przeciwnym razie kończymy algorytm. c Sztuczne sieci neuronowe. Ćwiczenia 2007 by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007) 3.4. ZADANIE 11 Drobne uwagi: 1. Zmienna c wskazuje na kolejne cykle uczące. 2. Powinno się zadbać aby w ramach każdego cyklu uczącego zaprezentować wszystkie wzorce uczące w losowej kolejności. Zatem losowy wybór liczby k musi wykluczać obrazy już wybrane w danym cyklu uczącym. 3.4 Zadanie Należy zaimplementować zaprezentowany algorytm dla identycznego zadania jak rozważanego w tekście (rozpoznawanie pewnych wzorcy graficznych). Program powinien mieć możliwość, po nauczeniu sieci, podawania przez użytkownika wartości sygnałów wejściowych i obliczenia dla nich odpowiedzi neuronu. Ilość rozpoznawanych klas można rozszerzyć wedle uznania. c Sztuczne sieci neuronowe. Ćwiczenia 2007 by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007) 12 ROZDZIAŁ 3. NAJPROSTSZA SIEĆ c Sztuczne sieci neuronowe. Ćwiczenia 2007 by P. Fulmański, M. Grzanek (ostatnia modyfikacja: 13 marca 2007)