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 04 — Adaline, nieliniowe reprezentacje
Maja Czoków, Jarosław Piersa 2013-10-23
1 Powtórzenie
1.1 Adaline
Maszyna Adaline (Adaptive Linear Network) składa się z n wejść x1, .., xn (w ogólności rzeczywistych) oraz stowarzyszonych z każdym wejściem wag w1, .., wn(+ ewentualnie próg w0). Przyjmujemy, że funkcja aktywująca ma postać identycznościową, tj. odpowiedź jednostki:
O(x1, .., xn) =
n
X
i=1
wi· xi (+w0)
Jednostka zwraca odpowiedź rzeczywistą, co za tym idzie pozwala na aproksymację funkcji ciągłych.
1.1.1 Uczenie Adaline
Dane: Lista m danych wejściowych Ei = (ei1, .., ein), gdzie i = 1..m oraz odpowiadających im poprawnych odpowiedzi Ci∈ R.
Wynik: Wartości wag wj maszyny, która będzie minimalizowała funkcję błędu:
ERROR =
m
X
i=1
(S(ei1, .., ein) − Ci)2
Algorytm:
1. Przypisujemy wagi losowo małe wokół zera.
2. Losowo wybieramy przykład E oraz poprawną odpowiedź C uczący z listy.
w = [0.42, -1.55, -2.34]
-10 -5
0 5
10 x
-4 -2 0 2 4
y -40
-20 0 20 40
z
Rysunek 1: Uczenie jednostki Adaline
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Wyrażam zgodę na wydruk dokumentu do celów dydaktycznych
1
3. Obliczamy aktywację jednostki na przykładzie E
S =
n
X
i=1
wiei
4. Przypisujemy
wj:= wj+ ρ(C − S) · ej
gdzie ρ > 0 — jest małą stałą uczenia.
5. Jeżeli algorytm przebiegł określoną liczbę iteracji lub osiągnął odpowiednio niski błąd, to kończymy. W przeciwnym wypadku wracamy do 2.
2 Zadania
2.1 Zadanie 2.1. Klasyfikacja punktów na R
2— nieliniowe kernele
• Napisz (zmodyfikuj z poprzednich zajęć) w Octavie / Matlabie funkcję implementującą działanie perceptronu, który poza współrzędnymi (x, y) oraz obciążeniem w0 przyjmuje również x2, Y2, x · y. Funkcja za argument powinna nadal przyjmować wektor dwóch danych wejściowych oraz wektor wag długości sześć elementów.
% x = [ x , y ]
% lub
% x = [ x1 , y1
% x2 , y2
% ...
% xn , yn ];
% w = [ w1 , ... , w6 ];
f u n c t i o n ret = P e r c ( x , w ) s = s i z e( x );
% x , y +1 x ^2 y ^2 xy
x1 = [ x , o n e s ( s (1) , 1) , x (: ,1).^2 , x (: ,2).^2 , x (: ,1).* x (: ,2)];
ret = s i g n( x1 * w ’);
end
• Wygeneruj dwie chmury danych uczących na R2, tym razem nieseparowalne:
M = 20;
EX = [r a n d n( M , 1) -3; r a n d n( M , 1) -3; r a n d n( M , 1 ) + 3 ; r a n d n( M , 1 ) + 3 ; r a n d n( M , 1); r a n d n( M , 1) ];
EY = [r a n d n( M , 1) -3; r a n d n( M , 1 ) + 3 ; r a n d n( M , 1 ) + 3 ; r a n d n( M , 1) -3;
r a n d n( M , 1); r a n d n( M , 1) ];
C = [ o n e s (4* M , 1); - o n e s ( 2* M , 1 ) ] ;
• Wyświetl wygenerowane dane I P o s = f i n d( C = >0);
I N e g = f i n d( C < 0 ) ; f i g u r e( 1 ) ;
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 ) , ’ bs ’);
l e g e n d(’ D a n e u c z a c e pos ’, ’ neg ’)
2
• Wygeneruj losowe wagi i wyświetl jak perceptron klasyfikuje kawałek płaszczyzny:
N = 2 0 0 ;
w = r a n d n(1 , 6);
T e s t X = r a n d(200 , 2 ) * 1 0 -5;
% n a s z p e r c e p t r o n t e r a z d z i a l a na c a l e j t a b l i c y d a n y c h Out = P e r c ( TestX , w );
I P o s = f i n d( Out > 0 ) ; I N e g = f i n d( Out < 0 ) ; f i g u r e(2)
h o l d off ;
p l o t( T e s t X ( IPos , 1) , T e s t X ( IPos , 2) , ’ r + ’);
h o l d on ;
p l o t( T e s t X ( INeg , 1) , T e s t X ( INeg , 2) , ’ bo ’);
l e g e n d(’ L o s o w e w a g i pos ’, ’ neg ’);
• Zaimplementuj SPLA (plik spla.m) dostosowany doperceptronu działającego na zmodyfikowanych danych wejściowych.
(copy-paste z zajęć drugich z modyfikacją części poprawiającej wagi):
f u n c t i o n w a g i = s p l a ( EX , EY , C ) ( . . . )
if ( O != C ( j ) ) x = EX ( j );
y = EY ( j );
x1 = [ x , y , +1 , x ^2 , y ^2 , x * y ];
Err = C ( j ) - O ;
w a g i = w a g i + Err * x1 ; end
( . . . )
end % f u n c t i o n
• Naucz perceptron na przykładach wygenerówanych w pierwszym punkcie. Wyświetl mapę klasyfikacyjną jak wyżej ale już dla nauczonych wag.
w a g i = S P L A ( EX , EY , C );
Out = P e r c ( TestX , w a g i );
f i g u r e( 3 ) . ( . . . )
2.2 Zadanie 2.2
• Dane uczące z punktu 2.1 przedstaw w biegunowym układzie współrzędnych tzn:
(x, y) → (r, α),
gdzie r ∈ [0, +∞) jest odległością od punktu (0, 0), a α ∈ [0, 2π) jest kątem nachylenia prostej przechodzącej przez (x, y) i (0, 0).
• wzory:
r =p
x2+ y2, α = atan(y/x).
UWAGA: Jeżeli x = 0 to α = π/2 (dla y > 0) lub α = 3π/2 (dla y < 0).
• Wyświetl dane uczące w nowej reprezentacji. Czy teraz są łatwiejsze do klasyfikacji?
• Zbuduj perceptron, który poza x, y operuje również na ich biegunowych współrzędnych i naucz go na danych uczących (copy-paste punktu 2.1 z małymi modyfikacjami).
3
3 Zadania programistyczne (do wyboru)
3.1 Zadanie 1. Klasyfikacja punktów na R
2Wykorzystując perceptrony, perceptrony z rozproszonymi reprezentacjami (np RBF), algorytmy konstrukcyjne dla sieci skierowanych (następne zajęcia) i wsteczną propagację błędu (za dwa zajęcia) naucz systemy klasyfikacji punktów na R2 / R3 (dla ambitnych: R4). Porównaj działanie na różnych danych uczących, zaproponuj własne dane.
• dla każdego z systemów oblicz procent poprawnie klasyfikowanych danych,
• w miarę możliwości: wyświetl dane uczące i poklasyfikowane,
• porównaj koszt czasowy (uczenie) i pamięciowy poszczególnych systemów.
Zadanie punktowane za 2 lub 3 punkty w zależności od możliwości programu.
4