• Nie Znaleziono Wyników

1Organizacjazajęć WprowadzeniedoSieciNeuronowych—Laboratorium01—Organizacjazajęć.Perceptron.

N/A
N/A
Protected

Academic year: 2021

Share "1Organizacjazajęć WprowadzeniedoSieciNeuronowych—Laboratorium01—Organizacjazajęć.Perceptron."

Copied!
9
0
0

Pełen tekst

(1)

Wprowadzenie do Sieci Neuronowych — Laboratorium 01 — Organizacja zajęć. Perceptron.

Jarosław Piersa 2012-10-03

1 Organizacja zajęć

1.1 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.

1.2 Zaliczenie

Zaliczenie laboratoriów na podstawie implementowania omawianych algorytmów. Każde zadanie jest punktowane za 1 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).

(2)

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.

1.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 wyko- rzystania projektor w sali laboratoryjnej. Prezentacja powinna trwać 5 do 10 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: +0.1 do +0.2 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.

1.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.

(3)

Literatura

[1] R. Rojas Neural Networks, A Systematic Introduction, Springer 1996,

[2] P. Peretto, Introduction to Modeling Neural Networks, Cambridge University Press 1994, [3] T. Schreiber, Notatki do wykładu WSN,

[4] E. Izhikevich, Dynamical Systems in Neuroscience, 2007 Massachusetts Institute of Technology [5] C. Bishop, Neural Networks for Pattern Recognition, Oxford University Press 1995.

2 Powtórzenie

2.1 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 = 1..n

• funkcji aktywującej f

Dynamika perceptronu. Mając n wejść x1...xn liczbowych perceptron zwraca wartość

O = f (

n

X

i=1

xiwi) (1)

Zakładając progową postać funkcji, perceptron działa jak klasyfikator, dla danych x1, .., xn zwraca cał- kowitą liczbę będącą klasą, do której dane należą.

out

Rysunek 1: Schemat działania perceptronu

(4)

2.2 Postacie funkcji aktywującej

• Identyczność f (s) = s — taka jednostka liczy po prostu sumę ważoną wejść,

• Funkcja progowa (bipolarna)

f (s) =

 0 s < p 1 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.

f (s) =

 −1 s < p +1 s ≥ p

Funkcja podobna do poprzedniej z tą różnicą, że wartość −1 nie jest elementem neutralnym doda- wania i „odpowiedź negatywna” może mieć pewien wpływ.

• Sigmoida

f (s) = σ(s) = 1 1 + exp(−s)

-0.5 0 0.5 1 1.5

-3 -2 -1 0 1 2 3

=1

=2

=5

=10

Rysunek 2: Funkcja sigmoidalna z parametrami β = 1, β = 3, β = 10.

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

σ0(s) = σ(s) · (1 − σ(s))

• Symetryczna sigmoida (tangens hiperboliczny)

f (s) = 2σ(s) − 1 = 1 − exp(−s) 1 + exp(−s)



= tanh(s 2)

(5)

-1.5 -1 -0.5 0 0.5 1 1.5

-4 -2 0 2 4

y

x

beta = 1 beta = 3 beta = 10

Rysunek 3: Symetryczna sigmoidalna.

2.3 Perceptron progowy

W praktyce będziemy korzystać z jednostki z polarną funkcją aktywacji. Tj. neuron ma wagi w1, .., wn, próg θ oraz zwraca:

O(x) =

 −1 P

iwixi< θ

+1 P

iwixi≥ θ

2.4 Perceptron z obciążeniem (biasem)

Alternatywnie będziemy korzystać z modelu składającego się z: n + 1 wag w0, w1, ..., wn. Waga w0 jest stowarzyszona ze sztucznym n + 1szym wejściem x0, które zawsze jest równe +1. Perceptron zwraca wartość

O(x) =

 −1 Pn

i=0wixi< 0

+1 Pn

i=0wixi≥ 0

2.5 Uczenie perceptronu

Dany niech będzie zestaw k przykładów E =E(1)...E(k) , gdzie E(i)= (e(i)1 , ..., e(i)N ) ∈ RN i odpowia- dające im poprawne wyniki T(1)...T(k). Dany też mamy perceptron o N wejściach i jednym wyjściu.

Rozważmy przykład Eji odpowiadającą mu poprawną odpowiedź Tj, niech sieć z bieżącym zestawem wag zwróci wartość O. Rozważmy błąd:

ERR = Tj− O

Jeżeli jest dodatni to musimy zwiększyć O, jeżeli wejście eji > 0, to zwiększenie wagi wi zwiększy O, jeżeli eji < 0 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 > 0 i zwiększyć wi w przeciwnym wypadku tj. eji < 0.

Podsumowując te rozważania otrzymujemy algorytm:

1. Losujemy wagi wi małe, blisko 0.

(6)

2. Wybieramy kolejny (lub losowy — zalecane) przykład Eji odpowiadającą mu poprawną odpowiedź Tj,

3. Obliczamy O — wynik działania sieci na Ej 4. Obliczamy ERR = Tj− O

5. Jeżeli ERR = 0 (klasyfikacja jest poprawna), to wróć do 2,

6. W przeciwnym wypadku uaktualniamy wszystkie wagi zgodnie ze wzorem wi:= wi+ η · ERR · Eij

θ := θ − ERR η > 0 jest stałą uczenia.

7. Jeżeli sieć klasyfikuje poprawnie wszystkie (większość) przykłady to kończymy, wpw wracamy do kroku 2.

UWAGA: Powyższego algorytmu nie należy stosować w implementacjach!

UWAGA: W 1969 matematycy Minsky oraz Papert udowodnili, że pojedynczy perceptron jest w stanie poprawnie klasyfikować wyłącznie problemy liniowo separowalne.

-6 -4 -2 0 2 4 6

-6 -4 -2 0 2 4 6

(a) Problem separowalny liniowo.

-1.5 -1 -0.5 0 0.5 1 1.5

-1.5 -1 -0.5 0 0.5 1 1.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.

2.6 Algorytm Uczenia Kieszonkowego / Pocket Learning Algorithm

Dane: Perceptron o n wejściach, k przykładów uczących E1...Ek wraz z poprawnymi odpowiedziami T1...Tk. 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ę.

(7)

1. Losujemy wagi i próg wokół 0,

2. 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 Ej sprawdzamy, czy Ej 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.

2.7 Algorytm Uczenia z Zapadką / Ratchet Learning Algorithm

Dane i wyjście jak wyżej.

1. Losujemy wagi i próg wokół 0, przypisujemy układowi wag zerowy czas życia i zapisujemy go jako rekordzistę,

2. Przebiegamy przykłady losując z listy, oznaczmy wylosowany przykład jako Ej, 3. Sprawdzamy czy Ej jest dobrze klasyfikowany (ERR = Tj− O = 0),

• 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 2.

• Jeśli nie, to korygujemy wagi i próg:

wi := wi+ η · ERR · Eij θ := θ − ERR

Nowemu 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.

3 Zadania na zajęcia

Zadania przeznaczone na laboratoria.

3.1 Zadanie 1

Zaimplementuj pojedynczy perceptron progowy. Tj. dane są wagi (w0, w1, w2) i niech x0 = +1. Dla zadanego wejścia (x1, x2) zwraca klasyfikację +1 jeżeliP

ixiwi≥ 0 i −1 w przeciwnym wypadku.

Język programowania dowolny, zalecany z szybkimi bibliotekami / frontendem do generowania wy- kresów: Matlab, Octave, Maple, R.

(8)

3.2 Zadanie 2

Napisz program, który dla zadanych wag perceptronu wyświetli klasyfikację na fragmencie płaszczyzny {x0, x0+ d, x0+ 2d, ..., x1} × {y0, y0+ d, y0+ 2d, ..., y1}.

3.3 Zadanie 3

Wyznacz kanoniczną postać prostej separującej dane dla perceptronu z zadania 1 (lub napisz program, który ją wyznacza). Wyświetl ją na wykresie w programie 2.

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) = 1

1 + exp(−s) Pokaż, że

2σ(s) − 1 = 1 − exp(−s) 1 + exp(−s)

4 Zadania programistyczne (do wyboru)

4.1 Zadanie 1. Uczenie klasyfikacji punktów

Dany jest plik (kilka plików) z listą punktów na płaszczyźnie oraz poprawną klasyfikacją punktu. Klasy- fikacja jest binarna: 0 lub 1 (+1, -1).

# komentarze, informacje o pliku, itp

# (ewentualnie wymiar przestrzeni i liczba przykładów uczących) x1 y1 o1

x2 y2 o2 ...

Napisz program, który nauczy perceptron klasyfikacji na zadanej liście przykładów. Dodatkowo pro- gram 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 R3,

• własne pliki uczące, możliwość wyklikania danych uczących w programie,

• klasyfikacja, która nie jest binarna (3 klasy, 4 klasy...),

(9)

• 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 R4,

4.2 Zadanie 2. 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. 100 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 percep- tronu,

• 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 dynamicz- nych. Zaimplementuj model Hodgkina-Huxleya. Informacje o modelu można znaleźć w rozdziale drugim książki — E. Izhikevich Dynamical Systems in Neuroscience, 2007 MIT Press.

Cytaty

Powiązane dokumenty

usunięcie wszystkich niejasności w zadaniach testowych; skrócenie i uczynienie w pełni zrozumiałymi i jasnymi wszystkich poleceń do zadań; sprawdzenie, czy test nie jest za krótki

Nie odnosząc się do istoty pojęcia płci oparłyśmy się na założeniach myśli konstrukcjonistycznej twierdząc, że płeć rozumiana jako kategoria kulturowo- -społeczna

W I tomie Liturgii Godzin (wydanie polskie – Pallottinum 1982) słowo liturgia pisane jest dużą literą, a godzin małą, natomiast w wydaniu drugim I tomu (Pallottinum

Udowodnid za pomocą indukcji, że podany niżej algorytm sprawdzania, czy element x jest w drzewie binarnym, przy przeglądaniu drzewa metodą inorder, jest semantycznie poprawny,

Zalecane techniki weryfikacji przeprowadzane podczas cyklu życia produktu.. Zofia Kruczkiewicz

• Zadania powinny być napisane tak, aby umożliwić prostą i szybką ocenę poprawności działania po efektach (ocena poprawności poprzez analizowanie wypisanych -nastu stron liczb

Jeżeli jednak autor nie jest mistrzem ascii-artu, to lepiej jest zrobić interfejs graficzny.. 1.4

while — obowiązkowe słowo kluczowe, pisane z małych liter (warunek) — warunek pętli, nawiasy są obowiązkowe. %ld — format zmiennej long (long