Oczywiście Scilab
Transkrypt
Oczywiście Scilab
W0 Uczenie się pojedynczego neuronu X0=1 W1 x1 s W2 f y x2 Wp xp 𝑝 𝑥𝑖 𝑤𝑖=𝑥 ′ 𝑤 +𝑤𝑜 𝑖=0 Jeśli zastosowana zostanie funkcja bipolarna sy: y=-1 y=1 gdy gdy z<0 z>=0 Wówczas: W1x1 + w2x2 + = 0 Algorytm uczenia perceptronu: 1. 2. 3. 4. 5. Wybierz losowe początkowe wagi neuronu. Ucz perceptron, wykorzystując kolejne elementy xi zbioru uczącego Z. Oblicz wartośd wyjściową yi perceptornu zgodnie z formułą: y = f(x’w + ) Jeżeli wartośd yi różni się od wartości wzorcowej d(xi), dokonaj modyfikacji wag według formuły: W(t+1) = w(t) + d(xi)*xi Wród do punktu 2. Algorytm powtarza się tak długo, aż dla wszystkich obserwacji błąd na wyjściu będzie mniejszy od założonej tolerancji. Dany zbiór uczący może zostad użyty wielokrotnie. Przykład: Przypuśdmy, że chcemy zbudowad SN, która klasyfikuje punkty na punkty ujemne i dodatnie. Jeśli mamy 3 punkty: X1 = (1,2) oraz x3=(0,-1) które mają byd klasyfikowane jako dodatnie, oraz punkt x2=(-1,2) klasyfikowany jako ujemny. To ich reprezentacja będzie następująca, jeśli założymy też ze początkowo wektor wag wynosi w=(1,0.8) Y = 1 x -0.8 A więc wykres funkcji prostopadłej do tej będzie Y = -x -0.8 Wówczas powiemy, że d(x1)=1, d(x3)=1, zaś d(x2)=-1. Wówczas klasyfikacja jednoznaczna tych punktów będzie następująca: 3 2 1 0 -10 -5 -1 0 5 10 -2 dodatnie ujemne w Liniowy (w) I jak widad, nie będzie możliwe jednoznaczne klasyfikowanie punktów…linią i wektorem wag bowiem punkty x1 i x3 (dodatnie, niebieskie kwadraty) nie są w jednej osi. Zatem trzeba zmodyfikowad wektor wag. Y = f(x’w + ) Zatem y1 = sgn(x1’w(0)) = sgn (1,2)(1,-0.8)=sgn(1*1 + 2 * (-0.8)) = sgn(1 – 1.6) = sgn(-0.6) = -1 W(1) = w(0) + d(x1) *x1 = (1,-0.8) + 1*(1,2) = (2,1.2) Teraz mam klasyfikację taką: 3 2 1 0 -10 -5 -1 0 5 10 -2 dodatnie ujemne w Liniowy (w) Nadal nie mamy dobrej klasyfikacji dla punktów. Zatem musimy ponownie liczyd wagi. Zatem Y2 = sgn(x2’w(1)) = sgn (-1,2)(2,1.2)= sgn(-2 +2.4) = sgn(0.4) = 1 W(2) = w(1) + d(x2) *x2 = (2,1.2) + (-1)*(1,-2) = (3,-0.8) Teraz mam klasyfikację taką: 2.5 2 1.5 1 0.5 0 -10 -5 -0.5 0 5 10 -1 -1.5 dodatnie ujemne w Liniowy (w) Nadal nie mamy dobrej klasyfikacji dla punktów. Zatem musimy ponownie liczyd wagi. Zatem Y3 = sgn(x3’w(2)) = sgn (0,-1)(3,-0.8)= sgn(0-0.8) = sgn(-0.8) = -1 W(3) = w(2) + d(x3) *x3 = (3,-0.8) + (-1)*(0,-1) = (3,0.2) Teraz mam klasyfikację taką: 2.5 2 1.5 1 0.5 0 -10 -5 -0.5 0 5 10 -1 -1.5 dodatnie ujemne w Liniowy (w) Zadanie dla studentów: Nasz neuron będzie wyglądał następująco: Funkcja realizowana przez taki neuron wygląda następująco: z=w1*x+w2 Widad wyraźnie, że wzór ten powstaje z ogólnego wzoru na prostą przechodzącą przez punkt (0,0): 0=A*x+B*y W naszym przypadku y=1. Nauka neuronu sprowadza się do znalezienia takiego A i B, żeby wszystkie wzorce, które mają byd przez neuron interpretowane jako 1 znajdowały się po dodatniej (wskazywanej przez wektor prostopadły) stronie tej prostej, natomiast te, które mają zwracad -1, były po przeciwnej. Wektorem prostopadłym do tej prostej jest wektor mający współrzędne równe współczynnikom przy x i y, czyli A i B, a przekładając to na neuron są to wagi w1 i w2. I może od razu mały przykład. Mamy następujący zbiór uczący: Wejście: Wyjście -4 -1 -1 1 1 1 3 1 Przyjmijmy, że na początku wektor wag jest równy=*3,1+. Graficzna interpretacja jest następująca (na czerwono zostały zaznaczone punkty które mają zwrócid 1, na niebiesko te które zwracają -1): Dzięki temu, że wszystkie współrzędne y są równe 1 jest możliwe znalezienie prostej przechodzącej przez początek układu współrzędnych rozdzielającej wszystkie punkty. Dla punktu P1: jeśli x=-4 to y = w1 * x + w2 = -4 * 3 + 1 = -11 Dla punktu P2: jeśli x=-1 to y = w1 * x + w2 = -1 * 3 + 1 = -2 Dla punktu P3: jeśli x=1 to y = w1 * x + w2 = 1 * 3 + 1 = 4 Dla punktu P4: jeśli x=3 to y = w1 * x + w2 = 3 * 3 + 1 = 10 Wiadomo, że neuron działa tak, że jeśli dostanie wartośd mniejszą od 0 to y = -1 a jeśli większą od zera to y = 1. W takim razie: Skoro punkt 1: sgn(y) = sgn(-11) = -1 Skoro punkt 2: sgn(y) = sgn(-2) = -1 Skoro punkt 3: sgn(y) = sgn(4) = 1 Skoro punkt 4: sgn(y) = sgn(10) =1 Z powyższego rysunku widad, że punkty 1,3 i 4 są przez neuron dobrze klasyfikowane. Niestety dla drugiego punktu siec zwraca -1 zamiast 1. Aby to naprawid należy zmodyfikowad wektor wag dodając do niego wektor wzorca przemnożony przez pewną stałą. Stała ta powinna byd równa 2*ni (źródło: *I+), gdzie ni jest współczynnikiem określającym szybkośd uczenia. Do dalszych rozważao przyjmijmy ni równe 1. Nowy wektor wag będzie więc równy: [w]=[3,1]+[-1,1]*2=[1,3] Dla punktu P1: jeśli x=-4 to y = w1 * x + w2 = -4 * 1 + 3 = -1 Dla punktu P2: jeśli x=-1 to y = w1 * x + w2 = -1 * 1 + 3 = 2 Dla punktu P3: jeśli x=1 to y = w1 * x + w2 = 1 * 1 + 3 = 4 Dla punktu P4: jeśli x=3 to y = w1 * x + w2 = 3 * 1 + 3 = 6 Skoro punkt 1: sgn(y) = sgn(-1) = -1 Skoro punkt 2: sgn(y) = sgn(2) = 1 Skoro punkt 3: sgn(y) = sgn(4) = 1 Skoro punkt 4: sgn(y) = sgn(6) =1 Jeśli w2 = [1,3] to prosta o równaniu: y = 1 * x + 3 A tak to wygląda graficznie: Okazuje się, że tak otrzymana linia decyzyjna (zaznaczona grubą krechą) zapewnia nam poprawne klasyfikowanie wszystkich wzorców. A co zrobid w przeciwnym przypadku, gdy dla jakiegoś wzorca sied zwraca 1 zamiast -1. Odpowiedź jest bardzo prosta: jeżeli jakiś wzorzec znalazł się po dodatniej stronie wykresu, chod nie powinien to jego symetryczne odbicie (względem początku układu współrzędnych) powinno się tam znaleźd. Z tego wynika, że w takim przypadku też trzeba do wektora wag dodad podwojony wektor wzorca, ale z przeciwnym znakiem. Obrazuje to przykład: Przed modyfikacja mamy następującą sytuację (punkt niebieski: 1,1; punkt czerwony 2,1; początkowy wektor wag: [4,-1]): Nowy wektor wag będzie więc równy: [w]=[4,-1]-[1,1]*2=[2,-3] Graficzna interpretacja: W ten sposób otrzymaliśmy linię decyzyjną, która poprawnie rozpoznaje nam wzrorce. Podsumowując: celem nauczenia neuronu dowolnych wzorców (oczywiście muszą byd liniowo separowalne) należy na wejście neuronu podawad po kolei wszystkie wzorce i sprawdzad, czy oczekiwane wyjście jest równe od otrzymanego. Gdy warunek ten nie jest spełniony należy skorygowad wagi: [w1,w2]nowe=[w1,w2]stare+2*[x,y], lub [w1,w2]nowe=[w1,w2]stare-2*[x,y], Można to uogólnid: gdy otrzymano -1 dla 'dodatniego' wzorca gdy otrzymano 1 dla 'ujemnego' wzorca *w1,w2+nowe=*w1,w2+stare+2*,oczekiwane wyjście-**x,y+ Gdy po n iteracjach okarze się, że wszystkie wzorce zwracają to co powinny możemy zakooczyd naukę neuronu. I mały przykład: Mamy następujące wzorce: - punkty niebieskie: [-1,1+*1,1+, dla których sied ma zwracad -1 - punkt czerwony: *3,1+ ,dla którego sied ma zwracad 1 Początkowe wartości wag: w1=3,w2=1. Na wykresie wygląda to następująco: Krok 1 Sied niepoprawnie klasyfikuje punkt 2 - oczekiwane wyjście: -1, otrzymane: 1 Modyfikacja wektora wag: [w]=[3,1]-2*[1,1]=[1,-1] Wstaw wykres Krok 2 Proszę zauważyd (patrz poprzedni wykres), że punkt 2 leży na lini decyzyjnej. Gdybyśmy mieli trochę inną funkcję aktywacji, która dla sumy ważonej równej 0 zwracałaby -1 to na tym kroku moglibyśmy zakooczyd naukę. Nasza funkcja aktywacji wymaga jednak wartości sumy ważonej ostro mniejszej od zera. Modyfikacja wektora wag: [w]=[1,-1]-2*[1,1]=[-1,-3] Wstaw wykres Krok 3 Sied niepoprawnie klasyfikuje punkt 3 - oczekiwane wyjście: 1, otrzymane: -1 Modyfikacja wektora wag: [w]=[-1,-3]+2*[3,1]=[5,-1] Wstaw wykres Krok 4 Sied niepoprawnie klasyfikuje punkt 2 - oczekiwane wyjście: -1, otrzymane: 1 Modyfikacja wektora wag: [w]=[5,-1]-2*[1,1]=[3,-3] Wstaw wykres Krok 5 Podobna sytuacja jak w kroku 2. Linia decyzyjna przechodzi przez punkt 2. Modyfikacja wektora wag: [w]=[3,-3]-2*[1,1]=[1,-5] Wstaw wykres Krok 6 Sied niepoprawnie klasyfikuje punkt 3 - oczekiwane wyjście: 1, otrzymane: -1 Modyfikacja wektora wag: [w]=[1,-5]+2*[3,1]=[7,-3] Wstaw wykres Krok 7 Sied niepoprawnie klasyfikuje punkt 2 - oczekiwane wyjście: -1, otrzymane: 1 Modyfikacja wektora wag: [w]=[7,-3]-2*[1,1]=[5,-5] Wstaw wykres Krok 8 I znowu powtarza się sytuacja z kroków 2 i 5 Modyfikacja wektora wag: [w]=[5,-5]-2*[1,1]=[3,-7] Wstaw wykres Krok 9 Tym oto sposobem otrzymaliśmy prostą, która rozdziela nam punkty niebieskie od czerwonych.