Wprowadzenie do Sieci Neuronowych Laboratorium Organizacja zajęć. Perceptron. Jarosław Piersa --3 Organizacja zajęć. Co będzie Dużo programowania (pisanie programów), Trochę matematyki, Małe zadania do zaimplementowania na zajęciach (język dowolny, ściągawki będą w Matlabie / Octavie), Programy zaliczeniowe pisane głównie w domu, prezentowane na zajęciach, Obecność wymagana.. Zaliczenie Zaliczenie laboratoriów na podstawie implementowania omawianych algorytmów. Każde zadanie jest punktowane za punkt. Dopuszczane są oceny wymierne (czyt. ułamkowe za brzydko napisane zadania) oraz powyżej jednego punktu za wybitnie napisane zadania. Bonus za oddawanie zadań w ciągu jednego tygodnia oraz za prezentowanie na forum grupy. Punktacja ocena punkty dst 3p. db 4p. bdb 5p. bdb+ 6p. lub więcej Dodatkowo na ocenę bdb+ wymagane jest oddanie zadań z różnych działów: modele pojedynczych neuronów (perceptrony, maszyny liniowe, adaline), wsteczna propagacja błędu, uczenie bez nauczyciela (samoorganizacja topologiczna, PCA), sieci rekurencyjne (autoasocjator Hopfielda, optymalizacja grafowa, maszyny Boltzmanna).
Wymagana jest terminowość: przynajmniej jeden program (z działu perceptron) do końca października, przynajmniej dwa programy do końca listopada, przynajmniej trzy programy do końca stycznia, wszystkie programy przed egzaminem..3 Wskazówki Na co należy zwrócić uwagę pisząc programy: (Zależnie od autora) zadania mogą być prezentowane na forum grupy ćwiczeniowej. Do wykorzystania projektor w sali laboratoryjnej. Prezentacja powinna trwać 5 do minut. W trakcie prezentacji należy przedstawić funkcjonalności programu, zastosowane rozwiązanie, wykorzystaną technologię, zaakcentować rzeczy, którymi autor chciałby się pochwalić. Prezentację może kończyć krótka dyskusja. Bonus do oceny za prezentowanie programu: +. do +. p. (Jeżeli autor nie chce prezentować publicznie) Zadania będą sprawdzane z autorem siedzącym obok, w trakcie laboratorium lub na konsultacjach. Zadania nie będą sprawdzane zaocznie. Zadania powinny być napisane tak, aby umożliwić prostą i szybką ocenę poprawności działania po efektach (ocena poprawności poprzez wypisanie -nastu stron liczb na stdout nie jest ani prosta ani szybka!) Program w zależności od autora będzie uruchamiany na laptopie (może być to laptop autora) bądź komputerze w sali laboratoryjnej. Prosimy upewnić się, że mają Państwo pod ręką wszystkie wymagane środowiska lub/i biblioteki (dotnet framework, jdk, interpreter pythona, karta graficzna obsługująca Cuda etc). Podczas sprawdzania należy mieć kod źródłowy programu (oraz edytor podświetlający składnię). Fragmentem zaliczenia może być dodatkowe pytanie o algorytm, sposób implementacji, zagadnienia teoretyczne powiązane z zadaniem. Może być to dopisanie dodatkowej funkcjonalności w trakcie sprawdzania. Im później oddawane zadanie tym większa liczba dodatkowych pytań. Programy korzystające z gotowych bibliotek do sieci neuronowych nie będą akceptowane. Teoretycznie dopuszczane są programy z tekstowym interfejsem użytkownika. Jeżeli jednak autor nie jest mistrzem ascii-artu, to gorąco rekomendowane jest zrobienie interfejsu graficzny..4 Program zajęć Pojedynczy neuron, model perceptronu prostego, maszyny liniowej, Adaline, Sieci skierowane, Algorytm wstecznej propagacji błędu (BEP), Uczenie bez nauczyciela, samoorganizacja topologiczna, analiza składowych głównych (PCA), Sieci rekurencyjne, sieć Hopfielda, maszyny Boltzmanna i symulowane wyżarzanie, (*) Wielowartościowe sieci neuronowe, sieci zespolone, (*) Algorytmy genetyczne.
Literatura [] R. Rojas Neural Networks, A Systematic Introduction, Springer 996, [] P. Peretto, Introduction to Modeling Neural Networks, Cambridge University Press 994, [3] T. Schreiber, Notatki do wykładu WSN, [4] E. Izhikevich, Dynamical Systems in Neuroscience, 7 Massachusetts Institute of Technology [5] C. Bishop, Neural Networks for Pattern Recognition, Oxford University Press 995. Powtórzenie. Model Perceptronu Perceptronem nazywamy następujący model składający się z: określonej liczby wejść n, wagi stowarzyszonej z każdym wejściem wi, i =..n funkcji aktywującej f Dynamika perceptronu. Mając n wejść x...xn liczbowych perceptron zwraca wartość n X O = f( xi wi ) () i= Zakładając progową postać funkcji, perceptron działa jak klasyfikator, dla danych x,.., xn zwraca całkowitą liczbę będącą klasą, do której dane należą. out Rysunek : Schemat działania perceptronu 3
. Postacie funkcji aktywującej Identyczność f (s) = s taka jednostka liczy po prostu sumę ważoną wejść, Funkcja progowa (bipolarna) f (s) = s<p s p Wartość p może być dodatkowym parametrem opisującym perceptron. Ten typ funkcji modeluje wysyłanie impulsu po przekroczeniu pewnego progu, które to zachowanie z pewnym przybliżeniem charakteryzuje komórki neuronowe. funkcja polarna. Jest to funkcja zalecana do używania w implementacji. s<p f (s) = + s p Funkcja podobna do poprzedniej z tą różnicą, że wartość nie jest elementem neutralnym dodawania i odpowiedź negatywna może mieć pewien wpływ. Sigmoida f (s) = σ(s) = + exp( s).5 = = =5 =.5 -.5-3 - - 3 Rysunek : Funkcja sigmoidalna z parametrami β =, β = 3, β =. Funkcja sigmoidalna może tu dziwić. Wymaga dzielenia i potęgowania, czyli więcej obliczeń, co nie powinno być wskazane przy wielokrotnym wykonywaniu. Jednakże jest ciągła i różniczkowalna, co ma zasadnicze znaczenie przy algorytmach uczenia i przybliża funkcją bipolarną. Ponadto zachodzi σ (s) = σ(s) ( σ(s)) Symetryczna sigmoida (tangens hiperboliczny) f (s) = σ(s) = exp( s) + exp( s) s = tanh( ) 4
.5 beta = beta = 3 beta = y.5 -.5 - -.5-4 - 4 x Rysunek 3: Symetryczna sigmoidalna..3 Perceptron progowy W praktyce będziemy korzystać z jednostki z polarną funkcją aktywacji. Tj. neuron ma wagi w,.., wn, próg θ oraz zwraca: P Pi wi xi < θ O(x) = + i w i xi θ.4 Perceptron z obciążeniem (biasem) Alternatywnie będziemy korzystać z modelu składającego się z: n + wag w, w,..., wn. Waga w jest stowarzyszona ze sztucznym n + szym wejściem x, które zawsze jest równe +. Perceptron zwraca wartość Pn wi xi < Pi= O(x) = n + i= wi xi.5 Uczenie perceptronu (i) (i) Dany niech będzie zestaw k przykładów E = E ()...E (k), gdzie E (i) = (e,..., en ) RN i odpowiadające im poprawne wyniki T ()...T (k). Dany też mamy perceptron o N wejściach i jednym wyjściu. Rozważmy przykład E j i odpowiadającą mu poprawną odpowiedź T j, niech sieć z bieżącym zestawem wag zwróci wartość O. Rozważmy błąd: ERR = T j O Jeżeli jest dodatni to musimy zwiększyć O, jeżeli wejście eji >, to zwiększenie wagi wi zwiększy O, jeżeli eji < to zmniejszenie wi zwiększy O. Jeżeli błąd ERR jest ujemny to musimy zmniejszyć O. Podobnie rozumując musimy zmniejszyć wagi wi jeśli wejście eji > i zwiększyć wi w przeciwnym wypadku tj. eji <. Podsumowując te rozważania otrzymujemy algorytm:. Losujemy wagi wi małe, blisko. 5
. Wybieramy kolejny (lub losowy zalecane) przykład E j i odpowiadającą mu poprawną odpowiedź T j, 3. Obliczamy O wynik działania sieci na E j 4. Obliczamy ERR = T j O 5. Jeżeli ERR = (klasyfikacja jest poprawna), to wróć do, 6. W przeciwnym wypadku uaktualniamy wszystkie wagi zgodnie ze wzorem wi := wi + η ERR Eij θ := θ ERR η > jest stałą uczenia. 7. Jeżeli sieć klasyfikuje poprawnie wszystkie (większość) przykłady to kończymy, wpw wracamy do kroku. UWAGA: Powyższego algorytmu nie należy stosować w implementacjach! UWAGA: W 969 matematycy Minsky oraz Papert udowodnili, że pojedynczy perceptron jest w stanie poprawnie klasyfikować wyłącznie problemy liniowo separowalne. 6.5 4.5 - -.5-4 - -6-6 -4-4 (a) Problem separowalny liniowo. 6 -.5 -.5 - -.5.5.5 (b) Problem nieseparowalny. Rysunek 4: Problem liniowo separowalny (po lewej) i nieseparowalny (po prawej) Algorytm sformułowany powyżej nie zatrzyma się, jeżeli nie istnieją wagi, dla których przykłady uczące są poprawnie klasyfikowane. A nawet jeżeli (zostanie to wymuszone ograniczeniem ilości iteracji), to nie gwarantuje, że zwrócone wagi będą optymalne..6 Algorytm Uczenia Kieszonkowego / Pocket Learning Algorithm Dane: Perceptron o n wejściach, k przykładów uczących E...E k wraz z poprawnymi odpowiedziami T...T k. Zakładamy, że funkcja aktywująca ma postać polarną. W tej sytuacji dodatkowym parametrem uczącym jest wartość progu p. Wynik: Wartości wag wi oraz progu p które dają optymalną klasyfikację. 6
. Losujemy wagi i próg wokół,. Przypisujemy układowi wag zerowy czas życia i zapisujemy go w kieszonce jako rekordzistę, 3. Przebiegamy przykłady losując z listy, 4. Dla wybranego przykładu E j sprawdzamy, czy E j jest dobrze klasyfikowany, Jeśli tak, zwiększamy mu czas życia o jeden. Jeżeli jest to wynik lepszy niż u rekordzisty, zapominamy starego rekordzistę i zapisujemy w kieszonce nowy układ wag. Wracamy do 3. Jeśli nie, to korygujemy wagi i próg: wi := wi + η ERR Eij θ := θ ERR Nowemu układowi wag przypisujemy zerowy czas życia. Wracamy do 3. 5. Algorytm kończymy po przebiegnięciu odpowiedniej liczby iteracji. Zwracamy najbardziej żywotny zestaw wag..7 Algorytm Uczenia z Zapadką / Ratchet Learning Algorithm Dane i wyjście jak wyżej.. Losujemy wagi i próg wokół, przypisujemy układowi wag zerowy czas życia i zapisujemy go jako rekordzistę,. Przebiegamy przykłady losując z listy, oznaczmy wylosowany przykład jako E j, 3. Sprawdzamy czy E j jest dobrze klasyfikowany (ERR = T j O = ), Jeśli tak, to zwiększamy mu czas życia o jeden. Jeżeli jest to wynik lepszy niż u rekordzisty i klasyfikuje on więcej przykładów niż rekordzista, to zapominamy starego rekordzistę i zapisujemy nowy układ wag. Wracamy do. Jeśli nie, to korygujemy wagi i próg: wi := wi + η ERR Eij θ := θ ERR Nowemu układowi wag przypisujemy zerowy czas życia. Wracamy do. 4. Algorytm kończymy po przebiegnięciu odpowiedniej liczby iteracji. Zwracamy najbardziej żywotny zestaw wag. 3 Zadania na zajęcia Zadania przeznaczone na laboratoria. 3. Zadanie Zaimplementuj pojedynczy perceptron progowy. Tj. dane P są wagi (w, w, w ) i niech x = +. Dla zadanego wejścia (x, x ) zwraca klasyfikację + jeżeli i xi wi i w przeciwnym wypadku. Język programowania dowolny, zalecany z szybkimi bibliotekami / frontendem do generowania wykresów: Matlab, Octave, Maple, R. 7
3. Zadanie Napisz program, który dla zadanych wag perceptronu wyświetli klasyfikację na fragmencie płaszczyzny {x, x + d, x + d,..., x } {y, y + d, y + d,..., y }. 3.3 Zadanie 3 Wyznacz kanoniczną postać prostej separującej dane dla perceptronu z zadania (lub napisz program, który ją wyznacza). Wyświetl ją na wykresie w programie. Postać kanoniczna prostej: y = ax + b gdzie a, b R. 3.4 Zadanie 4 (Rachunkowe) Pokaż, że definicje perceptronu progowego i z biasem są równoważne. 3.5 Zadanie 5 (Rachunkowe) σ(s) = + exp( s) Pokaż, że σ(s) = exp( s) + exp( s) 4 Zadania programistyczne (do wyboru) 4. Zadanie. Uczenie klasyfikacji punktów Dany jest plik (kilka plików) z listą punktów na płaszczyźnie oraz poprawną klasyfikacją punktu. Klasyfikacja jest binarna: lub (+, -). # komentarze, informacje o pliku, itp # (ewentualnie wymiar przestrzeni i liczba przykładów uczących) x y o x y o... Napisz program, który nauczy perceptron klasyfikacji na zadanej liście przykładów. Dodatkowo program powinien mieć możliwość wczytać (lub odczytać z kliknięcia myszką) parametry innych punktów (tj. z poza listy uczącej) i wyświetlić je na płaszczyźnie wraz z oznaczeniem klasy. Ponadto dla przykładów z listy uczącej powinno być oznaczenie zarówno o oczekiwanej (z listy) jak i faktycznej (tj. zwróconej przez perceptron) klasyfikacji, np. oczekiwana klasyfikacja poprzez kształt, faktyczna poprzez kolor. Program powinien wyświetlić przynajmniej odsetek poprawnie klasyfikowanych przykładów oraz prostą / płaszczyznę separującą. Pomysły na rozbudowanie programu: analogiczne zadanie dla punktów w R 3, własne pliki uczące, możliwość wyklikania danych uczących w programie, klasyfikacja, która nie jest binarna (3 klasy, 4 klasy...), 8
statystyki dla danych wejściowych oraz wyników uczenia (moda, mediana, odchylenie standardowe), automatyczny zapis wyników do pliku, zapis wykresu do pliku ps, pdf, svg, png... (*) analogiczne zadanie dla R 4, 4. Zadanie. Rozpoznawanie cyfr / liter / obrazów Napisz program, który wykorzystuje maszynę liniową lub kilka (naście) perceptronów do rozpoznawania cyfr (lub liter uwaga na liczbę mnogą! program powinien rozpoznawać kilka cyfr). Cyfry powinny być wyświetlane jako układy pikseli na matrycy o niewielkich wymiarach (max. pikseli, oczywiście mowa tu o pikselach na cyfrę, wyświetlanie może być z dużym powiększeniem). Program dodatkowo powinien mieć możliwość wyklikania cyfry (lub czegoś cyfro-podobnego) i automatycznej klasyfikacji. Pomysły na rozbudowanie programu: Wejścia uczące można zaburzać (tj. odwracać piksel z niewielkim prawdopodobieństwem niezależnie dla danego piksela). Można w ten sposób uzyskać częściową odporność na szumy, Aby uzyskać rozpoznawanie niezmiennicze ze względu na przesunięcia można wykorzystać dyskretną transformatę Fouriera. Wartości transformaty są traktowane jako dodatkowe wejścia do perceptronu, Rozpoznawanie liczb w systemie szesnastkowym, Rozpoznawanie liter (wymaga większej matrycy!), Rozpoznawanie kształtów (okrąg, kwadrat, linia, domek itd), Rozpoznawanie symboliczne http://en.akinator.com/ Rozpoznawanie tekstu pisanego (np. całych liczb) za pomocą myszki na matrycy w programie. 4.3 Zadanie 3*. Neuron Hodgkina-Huxleya (dla chętnych) Zapoznaj się z modelem komórki neuronowej opisanym w terminach układów dynamicznych. Zaimplementuj model Hodgkina-Huxleya. Informacje o modelu można znaleźć w rozdziale drugim książki E. Izhikevich Dynamical Systems in Neuroscience, 7 MIT Press. 9