• Nie Znaleziono Wyników

1Powtórzenie WprowadzeniedoSieciNeuronowych—Laboratorium02—Perceptronprostycd

N/A
N/A
Protected

Academic year: 2021

Share "1Powtórzenie WprowadzeniedoSieciNeuronowych—Laboratorium02—Perceptronprostycd"

Copied!
7
0
0

Pełen tekst

(1)

Projekt pn. „Wzmocnienie potencjału dydaktycznego UMK w Toruniu w dziedzinach matematyczno-przyrodniczych”

realizowany w ramach Poddziałania 4.1.1 Programu Operacyjnego Kapitał Ludzki

Wprowadzenie do Sieci Neuronowych — Laboratorium 02 — Perceptron prosty cd

Maja Czoków, Jarosław Piersa 2012-10-10

1 Powtórzenie

1.1 Algorytm uczenia perceptronu

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ć znakową. W tej sytuacji dodatkowym parametrem 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 wartości wokół 0, przypisujemy takiemu układowi wag zerowy czas życia, startowy zestaw zapamiętujemy jako „rekordzistę”,

2. Przebiegamy przykłady losując z listy

3. 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 dotychczasowego rekordzisty, zapominamy go (dotychczasowego rekordzistę) i zapisujemy bieżący układ wag jako nowego rekordzistę. Wracamy do 2.

• Jeśli nie, to

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

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 (tj.

rekordzistę).

1.2 Uzasadnianie wnioskowania

Dane: Nauczony perceptron prosty z funkcją progową, próg p, wejście u = (u1, ..., un).

Wynik: Uzasadnienie klasyfikacji zwróconej na przykładzie u tj. najmniej liczna lista cech, które charakteryzują u i mają największy wpływ na klasyfikację.

Uwaga: Algorytm jest mutacyjny, tj. modyfikuje próg neuronu. Sugerowane jest operowanie na kopii parametrów.

1. Obliczamy odpowiedź perceptronu o na przykładzie u.

2. Przypisujemy p := θ (kopia progu, p := −x0· w0 w wypadku biasu).

3. Przypisujemy uzasadnienie = ”” (pusty napis).

4. Oznaczamy wszystkie cechy jako niewykorzystane.

5. Znajdujemy czynnik kluczowy tj. ui takie, że

• uiwio > 0 tj. cecha wspiera wynikową odpowiedź,

• |wi| ma największą wartość spośród wszystkich ui, które wspierają odpowiedź o,

(2)

• ui jeszcze nie był użyty jako fragment uzasadnienia w poprzednich krokach (niewykorzystana).

6. Sprawdź czy

|wi| > X

l6=ii ulniewykorzystany

|wl| + p,

• jeżeli tak, to dodaj ui do uzasadnienia i zwróć gotowy zestaw cech:

uzasadnienie+ = “ bo ui= (..).“

• jeżeli nie, to dodaj ui do uzasadnienia:

uzasadnienie+ = “ bo ui= (..) oraz “ p = p − uiwi

Po czym oznaczamy jednostkę ui jako wykorzystaną i wracamy do 5.

7. UWAGA: JeżeliP

iwiui= p to uzasadnienie nie będzie możliwe.

Rysunek 1: Uzasadnianie wnioskowania — wybór „najcięższych” argumentów.

1.3 Maszyny liniowe (Multiclass linear classifier )

Maszyna liniowa składa się z n wejść, l „perceptronów”,każdy przypisany do swojej kategorii. Perceptrony mają swoje kolejne indeksy i te same wejścia. Oznacza to,to że ML ma łącznie nl wag (z progami: (n+1)l wag), po n dla każdego z l perceptronów (z progami: po n + 1). Będziemy je oznaczać poprzez wij, gdzie i = 0, 1..n jest indeksem wejścia, natomiast j = 1..l jest indeksem perceptronu. Uznajemy ponadto, że we wszystkich perceptronach funkcja aktywująca jest identycznością

f (x) = x To jest każdy z perceptronów zwraca wyłącznie sumę ważoną

outj=

n

X

i=0

wijxi (1)

Odpowiedzą całej maszyny liniowej jest indeks perceptronu, który zwrócił największą wartość outj.

O = {j : ∀k=1..l outk≤ outj} (2)

Maszyna linowa zwraca kategorię danych wejściowych x1..xn, ale kategoryzacja nie musi być binarna.

(3)

out

Rysunek 2: Schemat maszyny liniowej

1.4 Algorytm Uczenia Maszyny Liniowej

Dane: zestaw przykładów uczących Ej, j = 1..k oraz poprawnych odpowiedzi Tj, j = 1..k.

Wynik: wagi wij, dla których sieć daje poprawne klasyfikacje.

1. Przypisujemy wagom małe losowe wartości wokół 0, 2. Przebiegamy przykłady losując z listy,

3. Dla wybranego przykładu Ej sprawdzamy, czy Ej jest dobrze klasyfikowany,

• Jeśli tak, wracamy do 2.

• Jeśli nie (tzn. jest kategoria p a miała być q), to korygujemy wagi neurony p-tego i q-tego wip+ = Eij

wiq− = Eij Wracamy do 2.

4. Algorytm kończymy po przebiegnięciu odpowiedniej liczby iteracji. Dodajemy modyfikację kieszeni i zapadki (tj.

zapamiętywanie najbardziej żywotnych zestawów wag).

2 Zadania

2.1 Zadanie 1. Klasyfikacja punktów na R

2

• Napisz (zmodyfikuj z poprzednich zajęć) w Octavie / Matlabie funkcję implementującą działanie perceptronu. Funkcja za argument powinna przyjmować wektor dwóch danych wejściowych oraz wektor wag w tym w0 (oraz ewentualnie próg, jeżeli nie jest on zawarty w wagach).

x = [1 , 2];

w = [1 , 2 , 3];

a = p e r c ( x , w );

• Wygeneruj dwie chmury punktów na R2 z różnymi kategoriami N = 20;

x1 = r a n d n(1 , N ) + 2 ; x2 = r a n d n(1 , N ) -2;

y1 = r a n d n(1 , N ) + 3 ; y2 = r a n d n(1 , N ) -1;

C1 = o n e s (1 , N );

C2 = - o n e s (1 , N );

(4)

• Wyświetl wygenerowane dane h o l d off ;

p l o t( x1 , y1 , ’ r + ’);

h o l d on ;

p l o t( x2 , y2 , ’ bo ’);

EX = [ x1 , x2 ];

EY = [ y1 , y2 ];

C = [ C1 , C2 ];

• Zaimplementuj SPLA (plik spla.m). Uwaga! Jeżeli nie wiadomo czy dane są separowalne, to należy korzystać z wersji pocket algorytmu.

f u n c t i o n w a g i = s p l a ( EX , EY , C , T = 1 0 0 0 0 )

% w a g i l o s o w e w = r a n d n(1 ,3);

for i =1: T

% l o s u j e m y p r z y k l a d

j = f l o o r(r a n d()*l e n g t h( C ) ) + 1 ;

% o b l i c z a m y a k t y w a c j e

out = p e r c ([ EX ( j ) , EY ( j )] , w );

if out == C ( j )

% n a s t e p n y p r z y k l a d e l s e

% k o r e k c j a wag err = C ( j ) - out ;

w += err .* [1 , EX ( j ) , EY ( j )];

end % if

end % for w a g i = w ; end % f u n c t i o n

• Oblicz klasyfikację nauczonego perceptronu na danych EX, EY Out = [];

for i =1:l e n g t h( EX ) E = [ EX ( i ) , EY ( i )];

Out = [ Out , p e r c ( E , w a g i ) ];

end

• Wydrukuj nauczoną klasyfikację

% w y b i e r a m y te , k t o r e m a j a o d p o w i e d z d o d a t n i a I P o s = f i n d( Out > 0 ) ;

% te , k t o r e m a j a o d p o w i e d z u j e m n a I N e g = f i n d( Out < = 0 ) ;

h o l d off ;

p l o t( EX ( I P o s ) , EY ( I P o s ) , ’ r + ’);

h o l d on ;

p l o t( EX ( I N e g ) , EY ( I N e g ) , ’ bo ’);

• Na podstawie nauczonych wag oblicz postać i wyświetl prostą separującą. Przydatne funkcjetext(), sprintf (), legend().

• Zmodyfikuj dane uczące, aby obie klasy nieco na siebie nachodziły (zjawisko nazywane jest overlapping). Uruchom algorytm SPLA na nich. Wyciągnij wnioski.

• Wygeneruj cztery chmury punktów uczących. Połącz je w klasy wg funkcji logicznych AND, OR, XOR. Wykonaj uczenie na takich danych, np.

– problem AND (x1= −1, x2= −1, E = −1), (−1, 1, −1), (1, −1, −1), (1, 1, 1)

(5)

– problem OR (−1, −1, −1), (−1, 1, 1), (1, −1, 1), (1, 1, 1) – problem XOR (−1, −1, −1), (−1, 1, 1), (1, −1, 1), (1, 1, −1)

Wyciągnij wnioski.

• Dodaj modyfikację kieszonki i zapadki, naucz perceptron zmodyfikowanym algorytmem na różnych zestawach.

2.2 Zadanie 3*. SPLA cd.

(* dla chętnych) Napisz program, który wyświetla zmieniającą się klasyfikację na fragmencie płaszczyzny podczas uczenia perceptronu. Pomocne funkcje: axis(), sleep(), print().

2.3 Zadanie 4. Maszyna liniowa

Zaimplementuj maszynę liniową (linear multi-classifier)

• Wygeneruj chmurę przykładów uczących podzielonych na trzy kategorie (wsk. zmodyfikuj punkt 2.1)

• Wczytaj przygotowane dane z pliku (kolejno: x, y, odpowiedź) A = l o a d( ’ ./ zad2 -7 - - m u l t i c l a s s . txt ’);

EX = A (: , 1);

EY = A (: , 2);

C = A (: , 3) +1; % z m i e n i a m y z 0 ,1 ,2 na 1 ,2 ,3 p l o t( EX , EY , ’ b + ’)

• Zaimplementuj maszynę liniową (wsk. wagi będą tablicą o wymiarze ilosc kategorii × ilosc wejsc).

f u n c t i o n ret = ml ( x , w a g i ) s = w a g i * x ’;

m = max( s );

ret = f i n d( s >= m );

end

• zmodyfikuj kod tak aby uwzględniał również bias w0,∗

• przetestuj maszynę:

w a g i = r a n d n(3 ,2);

j = 1;

x = [ EX ( j ) , EY ( j )];

ml ( x , w a g i )

• zaimplementuj algorytm uczenia:

f u n c t i o n w a g i = u c z e n i e _ m l ( EX , EY , C ) T = 1 0 0 0 0 ;

% w a g i l o s o w e w a g i = r a n d n(3 ,2);

for i =1: T

% w y l o s u j p r z y k l a d

j = f l o o r(r a n d()*l e n g t h( EX ) + 1 ) ; x = [ EX ( j ) , EY ( j )];

o = ml ( x , w a g i );

if ( o == C ( j ))

% ok , nic nie r o b i m y e l s e

% w z m a c n i a m y te , k t o r e byc p o w i n n y w a g i ( C ( j ) ,:) += x ;

% o s l a b i a m y te , k t o r e sa w a g i ( o ,:) -= x ;

(6)

end % if end % for end % f u n c t i o n

• Dopisz do algorytmu kieszonkę i / lub zapadkę.

• Oblicz klasy na naucznych wagach:

Out = [];

for i =1:l e n g t h( EX ) x = [ EX ( i ) , EY ( i )];

Out = [ Out ; ml ( x , w a g i )];

end

• Wyświetl nauczoną kategoryzację I1 = f i n d( Out == 1);

I2 = f i n d( Out == 2);

I3 = f i n d( Out == 3);

h o l d off ;

p l o t( EX ( I1 ) , EY ( I1 ) , ’ 1 o ’);

h o l d on ;

p l o t( EX ( I2 ) , EY ( I2 ) , ’ 2+ ’);

p l o t( EX ( I3 ) , EY ( I3 ) , ’ 3^ ’);

• Dostosuj algorytm aby działał dla wersji z biasem, naucz ponownie taki system i porównaj wyniki.

3 Zadania programistyczne (do wyboru)

3.1 Zadanie 1. Autoasocjator graficzny

Zadanie polega na zastosowaniu perceptronów i algorytmów uczenia do konstrukcji autoasocjatora graficznego tj. układu, który jest w stanie nauczyć się obrazów oraz usunąć szumy jeżeli takie pojawią się na wejściu. W efekcie dając na wejściu obraz, który nie jest żadnym z wzorców uczących, program powinien wygenerować ten, który zna i jest najbardziej podobny do wejścia.

Działanie:

• na wejściu dany jest zaszumiony obraz (wcześniej nauczony)

• układ ma tyle perceptronów ile pikseli na obrazie

• każdy perceptron czyta wszystkie piksele z obrazu wejściowego i zwraca wartość kontrolowanego piksela wyjściowego (zapalony lub nie)

• wynikowy obraz powstaje z odpowiedzi wszystkich perceptronów, poprawnie naucozna sieć powinna odzyskać orygi- nalny obraz usuwając szum

Uczenie:

• dla każdego perceptronu / piksela: wejściem są wszystkie wzorcowe obrazy, poprawną odpowiedzą wartość czy piksel przy danym obrazie powinien być zapalony czy zgaszony

• dodatkowo wskazane jest uczyć na zaszumionych kopiach wzorcowych obrazów Ciekawe rozszerzenia i alternatywy:

• Autoasocjator symboliczny / wektorowy: zamiast na pikselach operuje na fragmentach obrazu, np kresce poziomej, pionowej, skośnej, półkolu, kropce itp. Na przykład litera T jest połączeniem kreski pionowej wycentrowanej oraz kreski poziomej na górze obrazu (i wszystko inne wyłączone), Litera L — kreska pionowa z lewej i pozioma na dole, O

— półkola z lewej i prawej oraz z góry i dołu, D — półkole z prawej i kreska pionowa wycentrowana, X — dwie kreski skośne etc.

• Autoasocjator działający na trzech kanałach (RGB)

(7)

Rysunek 3: Konstrukcja autoasocjatora graficznego.

3.2 Zadanie 2. Automatyczny oceniacz programów

Czasami obiektom nie można przypisać cech numerycznych, a jedynie symboliczne, które są kodowane na wartości numeryczne (np. +1 — cecha obecna, −1 cecha nieobecna). Rozważmy opis programu zaliczeniowego z sieci neuronowych. Jego lista cech może obejmować np:

• Czy program w ogóle działa?

• Czy program daje wyniki wyglądające na poprawne?

• Czy program ma interfejs graficzny?

• Czy program został oddany w trakcie zajęć?

• Czy program sam siebie klasyfikuje jako zaliczony?

• Czy program zawiera wyczerpujące komentarze w kodzie?

• Czy grafy / sieci / ilości wejść są ustalone na sztywno i trudne do zmiany (zauważmy, że jest to cecha charakterystyczna dla źle napisanych programów, waga odpowiadająca temu wejściu powinna być ujemna)?

• Czy program wyświetla tylko klasyfikację pomijając uzasadnienie (patrz uwaga wyżej)?

• Czy program został napisany w „normalnym” języku programowania (co to jest „normalny” język pozostawiamy gestii sprawdzającego lub... innego klasyfikatora symbolicznego)?

• Czy program sam jest w stanie wygenerować listę programów uczących i nauczyć się na niej poprawnej klasyfikacji?

• Czy autor programu ma więcej pomysłów niż autor zadania i dodał coś od siebie?

Napisz program, który na wejściu otrzymuje listę cech programu i dokonuje binarnej oceny (zaliczony lub niezaliczony) oraz wyświetla uzasadnienie, tzn. które z cech mają największy wpływ na końcową ocenę.

• Głównym punktem ocenianym w tym zadaniu jest nie klasyfikacja, ale jej uzasadnienie.

• Lista powyższa została wymyślona na potrzeby zadania i po kilku kawach, ale zdradza jakie pytania mogą paść podczas sprawdzania programów.

• (dla ambitnych) Rozważ jak można dostosować program aby dokonywał i uzasadniał kategoryzację na trzy oceny:

niezaliczony, zaliczony, wybitnie zaliczony.

• Zamiast oceniacza programów można napisać program oceniający: książki, samochody, inne programy oceniające, wykładowców, komputery, jakość kawy z ekspresu... Wszelkie przejawy kreatywności mile widziane.

Cytaty

Powiązane dokumenty

Definicja Niech funkcja f okre´slona b¸edzie na przedziale (a; b] oraz granica lim x→a + f (x) jest niew la´sciwa (±∞). W pozosta lych przypadkach m´ owimy, ˙ze ca lka

Nieco mniej odpowiedzialną, ale nie mniej istotną jest funkcja starosty grupy, który jest pośrednikiem w sprawach studentów między studentami danej grupy ćwiczeniowej a

SPŁYW - szybkie przemieszczanie się masy gruntowej bez wytworzenia wyraźnej powierzchni poślizgu przy współudziale wody np.. spływy

Na podstawie zeszłotygodniowego filmiku, który oczywiście wszyscy obejrzeliście, proszę odpowiedzieć na pytania znajdujące się poniżej i przesłać je na adres

Pomysły na wej- ścia numeryczne: samoorganizacja grafu na płaszczyźnie lub w przestrzeni, krzywa wypełniająca figurę (por. krzywa Peano), powierzchnia wypełniająca

- opisz podróże Kordiana z aktu II: gdzie był, z kim się w dantm miejscu spotkał , czego dowiedział się o życiu. - podsumowaniem jest monolog na Mont Blanc – jaki cel

Trudniej jest porównać dwa ułamki zwykłe od dwóch liczb naturalnych, na które wystarczy, że zerkniemy okiem, a już potrafimy wskazać większą z nich.. W przypadku dwóch

Jest to program mający pokazać dany produkt na okres paru dni lub na liczbę uruchomień.. Ma trzy ograniczenia: niemożna drukować, zapisywać i innych