POLITECHNIKA RZESZOWSKA
WYDZIAŁ ELEKTROTECHNIKI I INFORMATYKI
KATEDRA INFORMATYKI I AUTOMATYKI
SZTUCZNA INTELIGENCJA
PROJEKT
Temat: Zrealizować sieć neuronową uczoną algorytmem wstecznej propagacji błędu z przyśpieszeniem metodą adaptacyjnego współczynnika uczenia i metodą momentum (trainbpx) uczącą się rozpoznawania zwierząt.
Wykonał
Paweł Trzaska
II EF-DI
P15
Spis treści.
1.Opis problemu………………………………………………………………………….2
2.Topologia i funkcjonowanie sieci neuronowej………………………….4
2.1Informacje na temat sieci neuronowej…………………………..4
2.2Architektura jednokierunkowej sieci neuronowej…………6
3.Perceptron………………………………………………………………………………..7
4.Algorytmy użyte w programie…………………………………………………..10
5.Skrypt sieci neuronowej……………………………………………………………14
5.1Przygotowanie środowiska……………………………………………..14
5.2Wczytanie danych uczących……………………………………………14
5.3Kod programu…………………………………………………………………15
6.Eksperymenty……………………………………………………………………………19
7.Wnioski i podsumowanie…………………………………………………………..24
8.Bibliografia………………………………………………………………………………..24
Zawartość płyty CD:
-skrypt sieci neuronowej użyty do badań
-zestaw danych uczących
-print-screeny wykresów
-zbiór wyników eksperymentu
1.OPIS PROBLEMU
Celem projektu jest stworzenie sieci neuronowej, która na podstawie informacji dotyczących zwierząt jest w stanie rozpoznać je umieścić w jednej z 7 klas:
Ssaki
Ptaki
Gady
Ryby
Płazy
Owady
Bezkręgowce.
Sieć ma się uczyć rozpoznawać zwierzęta na podstawie 17 atrybutów informacji.
Zestaw danych użyty do stworzenia projektu został pobrany ze strony Uniwersytetu
Kalifornijskiego w Irvine(http://archive.ics.uci.edu/ml/datasets/Zoo). Autorem repozytorium jest Richard Forsyth. Baza zawiera 101 rekordów zwierząt z 7 klas.
Klasa | Liczebność klasy | Zwierzęta |
---|---|---|
1 | 41 | mrówkojad, antylopa, niedźwiedź, dzik, bawół, ciele, gryzoń, gepard, jeleń, delfin, słoń, nietoperz, żyrafa, dziewczyna, koza, goryl, chomik, zając, lampart, lew, ryś, norka, kret, mangusta, opos, oryks, dziobak, tchórz, koń, morświn, puma, kot, jenot, renifer, foka, uchatka, wiewiórka, wampir, nornica, walabia, wilk |
2 | 20 | kura, wrona, gołąb, kaczka, flaming, rybitwa, jastrząb, kiwi, skowronek, struś, papuga, pingwin, bażant, struś, brzytwodziób, wydrzyk, wróbel, łabędź, sęp, strzyżyk |
3 | 5 | mokasyn dalekowschodni, wąż morski, padalec, żółw, łupkoząb |
4 | 13 | okoń, karp, sum, kleń, koleń, plamiak, śledź, szczupak, pirania, konik morski, sola, trygon, tuńczyk |
5 | 4 | żaba, żaba, traszka, ropucha |
6 | 8 | pchła, komar, pszczoła, mucha, biedronka, ćma, termity, osy |
7 | 10 | małż, krab, rak, homar, ośmiornice, skorpion, meduza, ślimak, rozgwiazda, robak |
Każdemu zwierzęciu jest przyporządkowane 18 atrybutów(nazwa zwierzęcia, 15 atrybutów logicznych i 2 numeryczne)
Numer | Atrybut : typ |
---|---|
1 | Nazwa zwierzęcia : unikalna dla każdego przypadku |
2 | Czy ma włosy : prawda/fałsz |
3 | Czy ma pióra : prawda/fałsz |
4 | Czy znosi jajka : prawda/fałsz |
5 | Czy daje mleko : prawda/fałsz |
6 | Czy jest latające : prawda/fałsz |
7 | Czy jest morskie : prawda/fałsz |
8 | Czy jest drapieżne : prawda/fałsz |
9 | Czy jest uzębione : prawda/fałsz |
10 | Czy jest kręgowcem : prawda/fałsz |
11 | Czy jest oddychające : prawda/fałsz |
12 | Czy jest jadowite : prawda/fałsz |
13 | Czy ma płetwy : prawda/fałsz |
14 | Ile ma nóg: numeryczne(wartości: {0,2,4,5,6,8}) |
15 | Czy ma ogon : prawda/fałsz |
16 | Czy to jest zwierze domowe : prawda/fałsz |
17 | CZy jest dużym kotem : prawda/fałsz |
18 | Do której klasy należy : numeryczne(w przedziale [1,7]) |
2.TOPOLOGIA I FUNKCJONOWANIE SIECI NEURONOWEJ
2.1.Informacje na temat sieci neuronowej.
Nazwą „sieć neuronowa” określamy symulatory(sprzętowe lub programowe) modeli matematycznych, realizujące równoległe przetwarzanie informacji i składające się z wielu połączonych wzajemnie neuronów. Inspiracją do stworzenia tychże sieci był ludzki mózg. Sieci te mają na celu naśladowanie działania biologicznych struktur mózgowych – struktury nerwowej potrafiącej odbierać docierające sygnały i przetwarzać je na użyteczne informacje. Symulatory takie powszechnie nazywane są „Neural networks” bądź „AI”(od Artifical Inteligence - sztuczna inteligencja).
Sieci neuronowe funkcjonujące w postaci modeli zwane są też „sztucznymi sieciami neuronowymi” w skrócie SSN i powstały one w wyniku interdyscyplinarnego1 połączenia nauk tradycyjnych(fizyka, chemia, matematyka, biologia).
Tym co wyróżnia SSN pośród programów realizujących przetwarzanie informacji w sposób algorytmiczny jest to iż sieci neuronowe posiadają zdolność generalizacji2 wiedzy dla nowych danych które wcześniej były nieznane(nie były prezentowane podczas nauki). Inaczej mówiąc SSN posiada zdolność do aproksymacji wartości funkcji wielu zmiennych czego przeciwieństwem jest interpolacja którą otrzymujemy przy przetwarzaniu algorytmicznym. Ujmując to jeszcze inaczej systemy ekspertowe wymagają zgromadzenia i dostępu wiedzy na której temat będą rozstrzygać, SSN zaś wymaga jednorazowego nauczenia przy czym wykazuje znaczną tolerancję na braki, nieciągłości czy inne zaburzenia w zbiorze uczącym. Jest to duża zaleta która pozwala zastosowanie tego rozwiązania tam gdzie nie ma innego efektywnego sposobu rozwikłania danego problemu.
Główne zastosowania sieci neuronowych:
Systemy eksperckie – systemy bazujące na wiedzy ekspertów podejmujące decyzję na podstawie zgromadzonej bazy wiedzy np. system decydujący jaką dawkę leku podać pacjentowi w zależności od różnych czynników,
Rozpoznawanie – systemy rozpoznawcze działające na podstawie własnych baz danych zajmujące się rozpoznawaniem zadanych im obiektów np. twarzy, zwierząt, samochodów,
Przewidywanie – systemy które na podstawie posiadanej bazy danych przewidują zjawiska, zachowania, czy wydarzenia na przykład kataklizmy ,zachowania konstrukcji w różnych warunkach pogodowych,
Sterowanie – systemy odpowiadające za sterowanie, przykładem może być próba stworzenia przez naukowców SSN która będzie odpowiadać za poruszanie się robota o postawie humanoidalnej
Zalety SSN:
SSN nie wymagają programowania, projektujemy sieć a ta sama się uczy
W wielu zadaniach spisują się dużo lepiej niż zwykłe algorytmy(na przykład w zastosowaniach które wymieniłem powyżej).
Może działać nawet przy niekompletnej lub uszkodzonej bazie danych.
Potrafi uogólniać wiedzę czyli na przykład rozpoznając podstawowe kolory rozpozna też kolory podobne do nich.
Wady SSN:
Nie są przystosowane do działań dających precyzyjne i jasne wyniki.
Operuje pojęciami rozmytymi, gdy na przykład chcemy uzyskać odpowiedź typu TAK lub NIE system powie „raczej nie” „chyba tak”.
SSN nie potrafi rozumować wieloetapowo, na przykład wnioskować na podstawie wcześniejszego rozumowania.
2.2.Architektura jednokierunkowej sieci neuronowej
Odnosząc się do problemu rozpoznawania zwierząt będzie interesować sieć neuronowa jednokierunkowa.
Sieci jednokierunkowe to sieci w których nie występuje zjawisko sprzężenia zwrotnego, pojedynczy sygnał przechodzi przez każdy neuron dokładnie raz w swoim cyklu. Najprostszym modelem takiej sieci może być pojedynczy perceptron.
W zaawansowanych formach tego typu sieci stosuje się funkcję przejścia. Najczęściej używanymi funkcjami są funkcje sigmoidalne, liniowe, funkcje skoku czy funkcje hiperboliczne. Tego typu sieć zbudowana z neuronów o nieliniowej funkcji przejścia posiada zdolność nieliniowej separacji wzorców wejściowych(staje się uniwersalnym klasyfikatorem).
Sieci jednokierunkowe dzielą się zasadniczo na jednowarstwowe, dwuwarstwowe i wielowarstwowe. Sieci jednowarstwowe są w stanie rozwiązać jedynie wąską klasę problemów o małej złożoności. Sieci o dwóch lub większej ilości warstw są w stanie rozwiązać szeroką gamę problemów o dużej złożoności, stosowane są w nich inne algorytmy uczenia niż przy sieciach jednowarstwowych. Przyjęte jest że sieć już o 3 warstwach neuronów jest w stanie poradzić sobie z każdym problemem(ludzki mózg ma 32 warstwy).
Przykładowa sieć 3 warstwowa
Powyższa sieć jest trójwarstwowa. Połączenia między warstwami są typu każdy z każdym. Sygnały wejściowe są podawane do warstwy wejściowej neuronów, których wyjścia dają sygnały dla kolejnych warstw.
Każda warstwa neuronów posiada macierz wag w i wektor przesunięć b , funkcję aktywacji f i wektor sygnałów wyjściowych y. Żeby ułatwić rozróżnianie ich do każdej wielkości dodałem numer warstwy której dotyczy umieszczony w nawiasie który we wzorach funkcjonuje w indeksie dolnym(np. dla warstwy drugiej macierz wag będzie oznaczona w2). Poszczególne warstwy działają według wzorów:
y1 = f1 (w1x+b1 )
y2= f2 (w2y1+b2 )
y3 = f3 (w3 y2+b3 )
Działanie całej sieci można więc opisać jako
Y3 = f3 (w3 f2 (w2 f1 (w1x+b1)+b2)+b3)
3.PERCEPTRON
Pisząc o jednokierunkowej sieci neuronowej wspomniałem o perceptronie jako najprostszym modelu sieci neuronowej tego typu. Jest to ważna część sieci dlatego pomówimy o nim szczegółowo.
Perceptron sam w sobie to sieć neuronowa najprostszego typu. Działanie perceptronu polega na klasyfikacji danych otrzymywanych na wejściu i ustawianiu wyjścia stosownie do nich. Przed właściwym użyciem perceptron należy trenować poprzez podanie mu przykładowego zestawu danych na wejście i zmianę wag wejść i połączeń między warstwami neuronów co ma na celu otrzymanie pożądanych wartości na wyjściu. Perceptrony posiadają zdolność klasyfikowania danych na zbiory liniowo separowane.
Sam prosty pojedynczy perceptron jest modelem neuronu McCullocha-Pittsa o odpowiedniej strategii uczenia. Neuron McCullocha-Pittsa jest podstawowym budulcem SSN. Funkcjonuje jako bardzo uproszczony matematyczny model biologicznego neuronu. Neuron ten posiada wiele wejść i jedno wyjście. Każde z wejść posiada swoją wagę.
Model neuronu McCullocha-Pittsa
Dane podane na wejściu x są mnożone przez ich wagi następnie sumowane(tu też dodawany jest tzw. bias) następnie suma jest podawana do funkcji aktywacji która przekazuje otrzymaną wartość do wyjścia
Model perceptronu
Tak właśnie wygląda prosty perceptron. Od u1 do um oznaczone są wejścia do sieci. Każde wejście posiada swoją indywidualną wagę, tutaj od w1 do wm. Sygnały po wejściu do sieci są przemnażane przez ich wagi, a następnie trafiają do sumatora gdzie wyciągana jest suma ważona. Później sygnał trafia do funkcji aktywacji która jest funkcją tego o otrzymała z sumatora i to od niej zależy co otrzymamy na wyjściu.
Istnieje wiele funkcji aktywacji, najważniejsze z nich to:
sigmoidalna (logsig)
wzór: f(z)=z(1-z)
pochodna:
tangens sigmoidalny (tansig)
wzór: f(z)=1-a2
liniowa(purelin)
Każda taka funkcja przekształca otrzymaną sumę w inny sposób i to głównie od niej zależy to czy sieć będzie się uczyć we właściwy sposób.
Pokażmy więc jak wygląda to od strony matematycznej. Sygnał wyjściowy neuronu określa następujący wzór:
$$y = f\left( \sum_{i = 1}^{n}w_{i}\ x_{i} + \ b\ \right)$$
Ogólny wzór opisujący sygnał na wyjściu wygląda tak:
y = f(wx + b)
Sygnały ze wszystkich wejść x[x1,x2,x3,…,xn] są przemnażane przez ich wagi w[w1,w2,w3,…,wn], a następnie sumowane. W trakcie sumowania do sumy dodawany jest tzw. bias(wektor przesunięcia), następnie suma trafia do funkcji aktywacji gdzie po wykonaniu się funkcji sygnał trafia na wyjście.
4. ALGORYTMY UŻYTE W PROGRAMIE
Algorytmem uczenia sieci neuronowej w tym projekcie jest uczenie algorytmem wstecznej propagacji błędu z przyśpieszeniem metodą adaptacyjnego współczynnika uczenia i metodą momentum(trainbpx).
Algorytm wstecznej propagacji błędu BP (ang. BackPropagation) określa sposób dokonywania zmian i ich wartość w współczynnikach wagowych w i przesunięciach b aby sieć osiągała jak najmniejszy błąd średnio kwadratowy. Metoda ta wymaga zestaw danych uczących które mają postać par $(x,\hat{y})$ wektorów sygnałów wejściowych i pożądany wyjściowych które realizują rozwiązanie danego problemu. Na odstawie tych danych można zmieniać współczynniki wagowe i przesunięć i sprawdzać odpowiedź (sygnał wyjściowy y) sieci neuronowej. W przypadku rozbieżności wartości $y \neq \hat{y}$ można obliczyć błąd średnio kwadratowy (SSE) który stanowi miarę poprawności działania sieci neuronowej. Na podstawie miary błędu algorytm wstecznej propagacji błędu wpływa na obliczenia odpowiednich poprawek (różnic wag) które należy dodać do istniejących wag aby zmniejszyć dany błąd. Algorytm wstecznej propagacji błędu wykorzystuje gradientową metodą minimalizacji błędu, która znajduje zależności poszczególnych błędów warstw od poszczególnych współczynnikach wag. Niestety, algorytm nie jest doskonały. Nie ma pewności, że w trakcie procesu uczenia natrafimy na minimum globalne funkcji miary błędu a nie jak to się często zdarza minimum lokalne, dla których wartości sygnału wyjściowego różnią się od wartości sygnałów wzorcowych (znacznie). Zły dobór wartości początkowych, wag i nieodpowiedniej drogi może spowodować wpadnięcie w minimum lokalne, którego algorytm nie będzie w stanie opuścić. Wypada też zwrócić uwagę na fakt, iż funkcja miary błędu jest funkcją wielokrotnie symetryczną w wielowymiarowej przestrzeni wag, powoduje to występowanie wielu minimów globalnych i lokalnych. Na efektywność procesu uczenia mogą mieć wpływ różne czynniki:
wagi początkowe(nie mogą być za duże, powinno się stosować losowy wybór wag, aby sygnał wyjściowy nieliniowej części neuronu był trochę mniejszy od jedności);
kilkukrotne powtarzanie uczenia(najlepiej rozpoczynające się od różnych wartości wag);
podawanie wektorów wzorcowych w losowej kolejności(zalecane).
Jak to działa???
Algorytm polega na cyklicznym dodawaniu do współczynnika wag odpowiednich j-tej warstwy i-tego neuronu poprawek w wynikających w poprzedniego cyklu uczenia t.
wij(t+1) = wij(t) + wij(t)
Wartość wij(t) jest obliczana na podstawie błędu średnio kwadratowego SSE. Iterację przerywamy gdy błąd średnio kwadratowy (SSE) jest mniejszy od err_goal. Błąd średnio kwadratowy wyznaczony dla wszystkich k neuronów, za pomocą poniższego wzoru:
$$E = \frac{1}{2}\sum_{j = 1}^{k}e_{j}$$
Gdzie ejwylicza się jako różnice odpowiedzi sieci neuronowej od pożądanej odpowiedzi z danych uczących:
$$e = y - \hat{y}$$
Wartość błędu średnio kwadratowego SSE zależy pośrednio od współczynników wag i przesunięć sieci. Jednakże dla par sygnałów wejściowych i wyjściowych (dane uczące) można zauważyć które wagi mają znaczący wpływ na wzrost tego błędu. Do tego wykorzystuje się gradientową metodę największego spadku, który określa właśnie zależności błędu od wag. Dlatego też należy ustanowić odpowiednie poprawki dla współczynników wag. Wprowadzono zmienną η (współczynnik uczenia) który uzależnia wielkość naniesionych poprawek dla i-tego neuronu j-tej wagi :
$$w_{\text{ij}} = - \eta\frac{\partial E}{\partial w_{\text{ij}}}$$
Wartość błędu bezpośrednio zależy od różnicy wartości sygnałów wyjściowych sieci y i pożądanych wyjścia $\hat{y}$ z danych uczących. Wartość sygnałów pożądanych wyjścia $\hat{y}$ dla danej paru uczącej jest zawsze stała zatem różnica zależy głównie od wartości i-tego sygnału wyjściowego wygenerowanego przez sieć.
E(yi)
Wartość sygnału odpowiedzi bezpośrednio zależy od wartości z zwanym łącznym pobudzeniem neuronu, ponieważ funkcja aktywacji przyporządkowuje odpowiednie sygnały wyjścia zależnie od pobudzenia neuronu.
yi(zi)
Wartość pobudzenia neuronu zależy bezpośrednio od macierzy w dla i-tego neuronu i j-tej wagi przy założonej stałej danej wartości sygnałów wejściowych pochodzących z danych uczących sieć.
zi(wij)
Wynika stąd zatem że wartość błędu wynika pośrednio od wartości poszczególnych współczynników wag:
E(yi(zi(wij)))
Zatem pochodną $\frac{\partial E}{\partial w_{\text{ij}}}$ można rozpisać następująco:
$$\frac{\partial E}{\partial w_{\text{ij}}} = \frac{\partial E}{\partial y_{i}}\ \bullet \ \frac{\partial y_{i}}{\partial z_{i}}\ \bullet \ \frac{\partial z_{i}}{\partial w_{\text{ij}}}$$
Pierwszą cześć możemy rozpisać następująco:
$$\frac{\partial E}{\partial y_{i}} = \ \frac{\partial}{\partial y_{i}}\left( \frac{1}{2}\left( y_{i} - \hat{y_{i}} \right)^{2} \right) = \frac{1}{2}\frac{\partial}{\partial y_{i}}\left( y_{i}^{2} - 2y_{i}\hat{y_{i}} + {\hat{y_{i}}}^{2} \right) = \frac{1}{2}\left\lbrack 2y_{i} - 2\hat{y_{i}} \right\rbrack = y_{i} - \hat{y_{i}}$$
Druga cześć jest pochodną funkcji aktywacji. Gdy funkcja aktywacji jest log–sigmoidalna to:
$$\frac{\partial y_{i}}{\partial z_{i}} = \left( 1 - y_{i} \right)y_{i}$$
Trzecią cześć możemy rozpisać następująco:
$$\frac{\partial z_{i}}{\partial w_{\text{ij}}} = \frac{\partial}{\partial w_{\text{ij}}}\left( w_{\text{ij}}x_{j} + b \right) = x_{j}$$
Tym samym rozpisując wzór:
$$w_{\text{ij}} = - \eta\frac{\partial E}{\partial w_{\text{ij}}} = - \eta\lbrack\left( y_{i} - \hat{y_{i}} \right)\left( 1 - y_{i} \right)y_{i}x_{j}\rbrack$$
Powyższe rozważania dotyczą tylko pojedynczej warstwy neuronów.
UCZENIE Z PRZYŚPIESZENIEM -jak już wiemy nasza sieć po podaniu danych uczących zacznie się uczyć. Podając dane uczące można sobie powiedzieć że sieć „kiedyś” się nauczy, ale z przyczyn formalnych nie może to trwać wieczność. Mimo że metoda wstecznej propagacji błędu jest bardzo czasochłonna uczenie daje się przyśpieszyć. W projekcie zostały użyte dwie metody:
metoda adaptacyjnego współczynnik uczenia.
metoda Momentum,
Opiszę tu obie metody.
METODA ADAPTACYJNEGO WSPÓŁCZYNNIKA UCZENIA – jedna z metod zwiększających szybkość uczenia jest metoda adaptacyjnej korekty współczynnika η. Na podstawie porównania sumarycznego błędu kwadratowego(SSE- Sum Square Error)
$$\text{SSE}\left( t \right) = \sum_{i = 1}^{M}{(y_{i}\left( t \right) - {\hat{y}}_{i}(t))}^{2}$$
${\hat{y}}_{i}$-pożądany wektor sygnałów wyjściowych
W chwili uczenia t z jej poprzednią wartością SSE(t-1), sposób zmiany współczynnika uczenia η definiujemy jako:
$$n\left( t + 1 \right) = \begin{Bmatrix}
\eta\left( t \right)\xi_{\text{d\ }}\text{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ gdy\ SSE}\left( t \right) > er*SSE(t - 1) \\
\eta\left( t \right)\xi_{i}\text{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ gdy\ SSE}\left( t \right) < SSE(t - 1) \\
\eta\left( t \right)\text{\ \ \ gdy\ SSE}\left( t - 1 \right) \leq SSE\left( t \right) \leq er*SSE(t - 1) \\
\end{Bmatrix}$$
ξd - współczynnik zmniejszania wartości η
ξi - współczynnik zwiększania wartości η
er - dopuszczalna krotność przyrostu błędu
Domyślne wartości tych parametrów a środowisku MATLAB:
ξd -0.7
ξi -1.05
er -1.04
Metoda Momentum - stosujemy ją w sytuacji gdy mamy mały współczynnik uczenia i mały gradient. W tego typu sytuacji zmniejszanie błędu następuje powoli. Jeśli jednak współczynnik uczenia i gradient są duże to występują silne oscylacje wokół minimum.
Zasada działania:
Metoda ta sama w sobie polega na wprowadzeniu do wzoru na korektę wag(wzór poniższy)
wij(t+1) = wij(t) + wij(t)
dodatkowego składnika który jest tak zwaną „miarą bezwładności” zmiany wag zwanego też „momentum”. Jeśli uczymy pod nadzorem pojedynczą warstwę sieci to reguła uczenia z metodą momentum wygląda tak:
$$w_{\text{ij}}\left( t + 1 \right) = w_{\text{ij}}\left( t \right) + \left( 1 - \eta \right)\left( {\hat{y}}_{i}\left( t \right) - y_{i}\left( t \right) \right)\frac{\partial y_{j}\left( t \right)}{\partial z_{j}}x_{i}\left( t \right) + \eta M_{\text{ij}}(t)$$
Momentum Mij(k) zaś wyliczamy z następującej zależności:
Mij(t) = wij(t) − wij(t − 1)
Współczynnik uczenia Momentum η∈ [0,1]. Jeśli η=1 to nowa waga jest równa ostatniej zmianie wagi. Jeśli η=0 to zmiana wagi opiera się jedynie na składowej gradientowej. Domyślna wartość współczynnika momentum to η=0.95. Współczynnik momentum znacznie wpływa na zwiększenie szybkości uczenia.
5.SKRYPT SIECI NEURONOWEJ
5.1 Przygotowanie środowiska
Przed samym wczytaniem i przygotowaniem danych należy odpowiednio przygotować środowisko MATLAB 4.0 do pracy. Czynimy to przy pomocy kilku linijek kodu:
clear all %czyszczenie wszystkich zmiennych, funkcji i linków MEX z %workspace-a format long %format obsługujący 15 cyfrowe zmienne double i %7 cyfrowe single format compact %format danych wyjściowych, brak enter %przed ans= |
---|
5.2 Wczytanie danych uczących
Zestaw danych na podstawie którego sieć ma się uczyć zawiera 18 atrybutów. Pierwszy atrybut trzeba usunąć ponieważ znajduje się w nim jedynie przykładowy opis. Następnie tabelę trzeba podzielić na dwie części, w pierwszej będzie się znajdować 16 kolejnych atrybutów na podstawie których sieć będzie się uczyć, w drugiej części będzie się znajdował pojedynczy 17-sty atrybut klas do których będą przyporządkowywane zwierzęta w trakcie nauki. Pierwszy atrybut został usunięty ręcznie. Podział tabeli na dwie części odbywa się przez następujący kod:
load zoo2; %wczytanie danych z pliku P= zoo2(:,1:16)'; %P-[R x Q] macierz wektorów wejściowych T = zoo2(:,17)'; %T-[S x Q] macierz wektorów docelowych |
---|
Właśnie te dwie linijki sprawiły że nasza baza od teraz będzie się składać z dwóch macierzy, macierzy P która będzie stanowiła uniwersum wektorów wejściowych i macierzy T która będzie stanowiła uniwersum wektorów docelowych. Jednak zanim wykorzystamy nasze dane do nauki należy ją znormalizować.
Normalizacja polega na przekształceniu wartości atrybutów opisujących zwierzęta na przedział <0,1> dla których nauka sieci będzie przebiegać sprawnie i wydajnie. Dane zostały zaimportowane do arkusza kalkulacyjnego gdzie przeskalowano wartości nie mieszczące się w przedziale(w tym wypadku ilość nóg zwierzęcia) na wartości <0,1>. Atrybut wyjściowy stanowiący klasy do których algorytm przyporządkowywał zwierzęta pozostał niezmienny i znajduje się w przedziale <1,7>. Teraz nasza baza jest już gotowa aby przystąpić do nauki.
5.2 Kod programu
clear all %czyszczenie wszystkich zmiennych, funkcji i linków MEX format long %format obsługujący 15 cyfrowe zmienne double i 7 cyfrowe single format compact %format danych wyjściowych, brak enter przed ans= load zoo2; %wczytanie pliku z danymi P= zoo2(:,1:16)'; %wczytanie uniwersum wejściowego i podzielenie go %na 16 kolumn T = zoo2(:,17)'; %wczytanie uniwersum docelowego w formie 1 kolumny [R,Q] = size(P); %size zwraca wymiar macierzy P %[R,Q]=[kolumny, wiersze] [S3,Q] = size(T); %size zwraca wymiar macierzy T %[S3,Q]=[kolumny, wiersze] S1 = 7; %liczba neuronów warstwy 1(130) S2 = 2; %liczba neuronów warstwy 2(91) disp_freq=100; %rozdzielczość wyświetlania max_epoch=20000; %maksymalna ilość iteracji err_goal=.25; %błąd docelowy lr=.5; %wskaźnik uczenia lr_inc=1.05; lr_dec=0.7; mc=0.9; tp = [disp_freq , max_epoch , err_goal , lr ] ; %zmienna pomocnicza określająca domyślne parametry uczenia dla funkcji trainbpx %pozostałe domyślne parametry treningu: %TP(5) – wzrost wskaźnika uczenia, domyślnie = 1.05. %TP(6) – spadek wskaźnika uczenia, domyślnie = 0.7. %TP(7) – stała momentum, domyślnie = 0.9. %TP(8) – maksymalny stosunek błędu, domyślnie = 1.04. [W1,B1,W2,B2,W3,B3] = initff(P,S1,'tansig',S2,'tansig',T,'purelin'); %losuje wstępne współczynniki neuronów %inicjalizuje sieć jednokierunkową do 3 warstw %tansig - funkcja przejścia tangens sigmoidalny %purelin - liniowa funkcja przejścia %Wi - waga macierzy na poszczególnych warstwach; %Bi - kolumny wektorów przesunięć(bias) na poszczególnych warstwach %P - macierz wektorów wejściowych %Si - rozmiary poszczególnych warstw %T - Sn x Q macierz wektorów docelowych %feed forward - jednokierunkowe [W1,B1,W2,B2,W3,B3,TE,TR] = trainbpx(W1,B1,'tansig',W2,B2,'tansig',W3,B3,'purelin',P,T,tp) ; %funkcja ucząca(algorytmem wstecznej propagacji błędu z przyśpieszeniem metodą adaptacyjnego współczynnika uczenia i metodą momentum) %Argumenty wejściowe: %Wi - waga macierzy dla poszczególnych warstw %Bi – kolumna wektorów dla poszczególnych warstw %TE - aktualny numer iteracji %TR - rekord uczenia:[rząd błędu] %Zwracane wartości: %Wi - nowe wagi %Bi - nowe wektory %P - [RxQ] macierz wektorów wejściowych %T - [SxQ] macierz wektorów docelowych %Parametry domyślne: %tp – domyślne parametry treningu %TP(1) – epoch pomiędzy odświeżeniami ekranu, domyślnie = 25 %TP(2) – maksymalna ilość iteracji, domyślnie =1000 %TP(3) - suma błędu kwadratowego, domyślnie = 0.02 %TP(4) – wskaźnik uczenia, domyślnie 0.01 %TP(5) - wzrost wskaźnika uczenia, domyślnie = 1.05 %TP(6) - spadek wskaźnika uczenia, domyślnie = 0.7 %TP(7) – stała momentum, domyślnie = 0.9. %TP(8) – maksymalny stosunek błędu, domyślnie = 1.04 A3 = simuff(P,W1,B1,'tansig',W2,B2,'tansig',W3,B3,'purelin') ; %symuluje sieć jednokierunkową do 3 warstw %P - macierz wektorów wejściowych %Wi - macierz wag dla każdej warstwy %Bi - wektor przesunięcia dla każdej warstwy %Fi - funkcja transferu dla każdej warstwy %Ai - wyjście dla każdej warstwy [T' A3' (T-A3)' (abs(T-A3)>0.5)'] (1-sum(abs(T-A3)>0.5)/length(P))*100 %weryfikacja czy sieć się nauczyła na podstawie danych uczących %abs - wartość bezwzględna %demo trainbpx funkcja wywodząca się |
---|
Podany powyżej kod został przekształcony do postaci funkcji w środowisku MATLAB o nazwie MOJ_x podający następujące argumenty: S1, S2, mc, lr_inc, lr_dec, er który zwraca macierz wartości [procent epoch SSE]. Żeby stworzyć funkcję zakomentowałem inicjalizację S1 i S2, zwiększyłem disp_freq, i uzupełniłem tablicę tp o argumenty potrzebne do nauki trainbpx. Na końcu programu zwracane są: procent, epoch(ze zmiennej TE), SSE(ze zmiennej TR). Dodatkowo przygotowany kod zapisywał wyniki pracy programu na bieżąco.
clear all % czyszczenie szystkich zmiennych format long % 15 cyfr double i 7 single format compact S1_max=101; S1_min=1; ile_razy_lr=4; ile_eksperymentow=2; ile_wszystkich=0; for S1 = S1_min: 10 : S1_max, % 101 for S2 = 1: 10 : S1, for lr_inc = 1.03 : 0.02 : 1.07, for lr_dec = 0.5 : 0.2 : 0.9, for er = 1.01 : 0.03 : 1.07, for mc = 0.6 : 0.3 : 0.99, for eksperyment = 1 : 1 : ile_eksperymentow, ile_wszystkich=ile_wszystkich+1; end end end end end end end mc=0.90; wiersz=1; for S1 = S1_min: 10 : S1_max, % 101 for S2 = 1: 10 : S1, for lr_inc = 1.03 : 0.02 : 1.07, for lr_dec = 0.5 : 0.2 : 0.9, for er = 1.01 : 0.03 : 1.07, for mc = 0.3 : 0.3 : 0.99 for eksperyment = 1 : 1 : ile_eksperymentow, %10 [procent, epoch, SSE] = moj_x(S1, S2, lr_inc, lr_dec, er, mc); wynik( wiersz , 1) = S1; wynik( wiersz , 2) = S2; wynik( wiersz , 3) = lr_inc; wynik( wiersz , 4) = lr_dec; wynik( wiersz , 5) = er; wynik( wiersz , 6) = eksperyment; wynik( wiersz , 7) = procent; wynik( wiersz , 8) = epoch; wynik( wiersz , 9) = SSE; fprintf('\nJest na %i/%i = %3.2f%% \nS1 = %i S2 = %i lr_inc = %i lr_dec = %i er = %i , eks = %i\n\n',wiersz,ile_wszystkich,(wiersz/ile_wszystkich*100),S1, S2, lr_inc, lr_dec, er, eksperyment); end wiersz = wiersz + 1; end end end end end disp('zapis!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'); save do_teraz.txt wynik -ascii; str_liczba1 = num2str(S1); str_liczba2 = num2str(S2); spacja = '_'; koncowka = '.txt'; nazwa_koncowa = [str_liczba1 spacja str_liczba2 koncowka] kodowanie = '-ascii'; save(nazwa_koncowa, 'wynik', kodowanie); end end save wyniczek.txt wynik -ascii; |
---|
Przejdźmy teraz do przeanalizowania eksperymentów.
6.EKSPERYMENTY
Głównym celem dla którego przeprowadzono eksperymenty było ustalenie parametrów sieci i zbadanie dla jakich sieć uczy się najskuteczniej. Przebadany został wpływ liczby neuronów na poszczególnych warstwach na szybkość i skuteczność uczenia się sieci. Wraz z ilością neuronów zmieniane były też inne wartości takie jak stała momentum(mc), wzrost wskaźnika uczenia(lr_inc), spadek wskaźnika uczenia(lr_dec), maksymalny stosunek błędu(er).
TABELA 100 NAJLEPSZYCH WYNIKÓW OSIĄGNIĘTYCH W CZASIE EKSPERYMENTU
S1 | S2 | lr_inc | lr_dec | er | mc | eksperyment | % | epoch | SSE |
---|---|---|---|---|---|---|---|---|---|
91,000 | 21,000 | 1,030 | 0,700 | 1,010 | 0,900 | 2,000 | 100,000 | 154,000 | 0,246 |
81,000 | 11,000 | 1,030 | 0,700 | 1,040 | 0,900 | 2,000 | 100,000 | 161,000 | 0,233 |
101,000 | 11,000 | 1,030 | 0,500 | 1,040 | 0,900 | 2,000 | 100,000 | 161,000 | 0,235 |
91,000 | 31,000 | 1,030 | 0,500 | 1,070 | 0,900 | 1,000 | 100,000 | 166,000 | 0,244 |
81,000 | 61,000 | 1,030 | 0,500 | 1,070 | 0,900 | 1,000 | 100,000 | 169,000 | 0,237 |
91,000 | 21,000 | 1,030 | 0,500 | 1,010 | 0,900 | 2,000 | 100,000 | 175,000 | 0,239 |
81,000 | 11,000 | 1,030 | 0,500 | 1,070 | 0,900 | 1,000 | 100,000 | 177,000 | 0,249 |
101,000 | 11,000 | 1,030 | 0,900 | 1,040 | 0,900 | 1,000 | 100,000 | 179,000 | 0,243 |
91,000 | 21,000 | 1,030 | 0,500 | 1,040 | 0,900 | 1,000 | 100,000 | 180,000 | 0,235 |
71,000 | 11,000 | 1,030 | 0,700 | 1,010 | 0,900 | 2,000 | 100,000 | 182,000 | 0,248 |
91,000 | 21,000 | 1,030 | 0,700 | 1,070 | 0,900 | 1,000 | 100,000 | 183,000 | 0,248 |
61,000 | 21,000 | 1,030 | 0,700 | 1,010 | 0,900 | 2,000 | 100,000 | 185,000 | 0,250 |
101,000 | 21,000 | 1,030 | 0,500 | 1,070 | 0,900 | 2,000 | 100,000 | 186,000 | 0,246 |
101,000 | 31,000 | 1,030 | 0,700 | 1,040 | 0,900 | 1,000 | 100,000 | 188,000 | 0,245 |
91,000 | 21,000 | 1,030 | 0,700 | 1,040 | 0,900 | 1,000 | 100,000 | 194,000 | 0,250 |
91,000 | 11,000 | 1,030 | 0,900 | 1,040 | 0,900 | 1,000 | 100,000 | 196,000 | 0,237 |
101,000 | 11,000 | 1,050 | 0,700 | 1,010 | 0,900 | 1,000 | 100,000 | 197,000 | 0,243 |
101,000 | 11,000 | 1,050 | 0,700 | 1,070 | 0,900 | 1,000 | 100,000 | 197,000 | 0,247 |
101,000 | 11,000 | 1,050 | 0,500 | 1,070 | 0,900 | 2,000 | 100,000 | 199,000 | 0,247 |
81,000 | 21,000 | 1,030 | 0,900 | 1,040 | 0,900 | 2,000 | 100,000 | 201,000 | 0,240 |
81,000 | 11,000 | 1,030 | 0,500 | 1,040 | 0,600 | 2,000 | 100,000 | 201,000 | 0,247 |
101,000 | 11,000 | 1,030 | 0,900 | 1,070 | 0,900 | 2,000 | 100,000 | 202,000 | 0,235 |
51,000 | 41,000 | 1,030 | 0,900 | 1,070 | 0,900 | 2,000 | 100,000 | 202,000 | 0,244 |
81,000 | 11,000 | 1,030 | 0,900 | 1,040 | 0,900 | 1,000 | 100,000 | 204,000 | 0,235 |
101,000 | 21,000 | 1,050 | 0,700 | 1,070 | 0,900 | 2,000 | 100,000 | 204,000 | 0,245 |
91,000 | 31,000 | 1,050 | 0,500 | 1,010 | 0,900 | 1,000 | 100,000 | 205,000 | 0,242 |
71,000 | 11,000 | 1,050 | 0,700 | 1,010 | 0,900 | 2,000 | 100,000 | 206,000 | 0,240 |
61,000 | 41,000 | 1,030 | 0,900 | 1,040 | 0,900 | 1,000 | 100,000 | 207,000 | 0,243 |
91,000 | 21,000 | 1,050 | 0,700 | 1,040 | 0,900 | 2,000 | 100,000 | 210,000 | 0,245 |
71,000 | 11,000 | 1,070 | 0,700 | 1,070 | 0,600 | 2,000 | 100,000 | 211,000 | 0,247 |
91,000 | 31,000 | 1,050 | 0,700 | 1,040 | 0,900 | 2,000 | 100,000 | 212,000 | 0,250 |
101,000 | 21,000 | 1,030 | 0,900 | 1,010 | 0,900 | 2,000 | 100,000 | 213,000 | 0,248 |
101,000 | 61,000 | 1,050 | 0,700 | 1,070 | 0,900 | 2,000 | 100,000 | 214,000 | 0,241 |
91,000 | 11,000 | 1,050 | 0,700 | 1,040 | 0,900 | 2,000 | 100,000 | 216,000 | 0,238 |
101,000 | 11,000 | 1,050 | 0,500 | 1,040 | 0,900 | 1,000 | 100,000 | 216,000 | 0,244 |
81,000 | 11,000 | 1,050 | 0,500 | 1,070 | 0,900 | 2,000 | 100,000 | 216,000 | 0,245 |
61,000 | 61,000 | 1,050 | 0,500 | 1,040 | 0,900 | 2,000 | 100,000 | 216,000 | 0,249 |
101,000 | 21,000 | 1,050 | 0,700 | 1,010 | 0,900 | 1,000 | 100,000 | 218,000 | 0,241 |
101,000 | 21,000 | 1,030 | 0,700 | 1,010 | 0,600 | 2,000 | 100,000 | 219,000 | 0,248 |
61,000 | 21,000 | 1,030 | 0,500 | 1,070 | 0,900 | 1,000 | 100,000 | 219,000 | 0,250 |
91,000 | 91,000 | 1,050 | 0,700 | 1,070 | 0,900 | 1,000 | 100,000 | 222,000 | 0,246 |
101,000 | 11,000 | 1,050 | 0,500 | 1,070 | 0,600 | 1,000 | 100,000 | 223,000 | 0,247 |
91,000 | 11,000 | 1,030 | 0,700 | 1,010 | 0,900 | 1,000 | 100,000 | 223,000 | 0,250 |
71,000 | 11,000 | 1,050 | 0,700 | 1,070 | 0,900 | 2,000 | 100,000 | 226,000 | 0,247 |
101,000 | 21,000 | 1,050 | 0,700 | 1,040 | 0,900 | 2,000 | 100,000 | 227,000 | 0,247 |
71,000 | 71,000 | 1,030 | 0,900 | 1,010 | 0,900 | 1,000 | 100,000 | 228,000 | 0,238 |
61,000 | 21,000 | 1,070 | 0,700 | 1,010 | 0,900 | 1,000 | 100,000 | 228,000 | 0,245 |
81,000 | 11,000 | 1,070 | 0,700 | 1,070 | 0,900 | 2,000 | 100,000 | 230,000 | 0,248 |
61,000 | 11,000 | 1,050 | 0,500 | 1,010 | 0,900 | 1,000 | 100,000 | 232,000 | 0,243 |
81,000 | 21,000 | 1,050 | 0,500 | 1,010 | 0,600 | 1,000 | 100,000 | 232,000 | 0,250 |
101,000 | 21,000 | 1,070 | 0,900 | 1,070 | 0,900 | 1,000 | 100,000 | 234,000 | 0,249 |
71,000 | 21,000 | 1,030 | 0,500 | 1,010 | 0,900 | 2,000 | 100,000 | 234,000 | 0,249 |
101,000 | 21,000 | 1,070 | 0,900 | 1,070 | 0,900 | 2,000 | 100,000 | 235,000 | 0,235 |
91,000 | 11,000 | 1,050 | 0,700 | 1,010 | 0,900 | 1,000 | 100,000 | 235,000 | 0,240 |
61,000 | 21,000 | 1,030 | 0,700 | 1,040 | 0,900 | 2,000 | 100,000 | 236,000 | 0,250 |
101,000 | 41,000 | 1,050 | 0,500 | 1,070 | 0,900 | 2,000 | 100,000 | 237,000 | 0,246 |
91,000 | 21,000 | 1,030 | 0,500 | 1,070 | 0,600 | 2,000 | 100,000 | 237,000 | 0,250 |
51,000 | 11,000 | 1,070 | 0,500 | 1,070 | 0,900 | 1,000 | 100,000 | 238,000 | 0,248 |
91,000 | 31,000 | 1,050 | 0,700 | 1,070 | 0,900 | 1,000 | 100,000 | 239,000 | 0,246 |
101,000 | 11,000 | 1,050 | 0,700 | 1,040 | 0,600 | 2,000 | 100,000 | 239,000 | 0,246 |
101,000 | 21,000 | 1,050 | 0,700 | 1,070 | 0,900 | 1,000 | 100,000 | 242,000 | 0,245 |
81,000 | 21,000 | 1,030 | 0,900 | 1,010 | 0,900 | 1,000 | 100,000 | 244,000 | 0,247 |
91,000 | 71,000 | 1,030 | 0,500 | 1,070 | 0,900 | 1,000 | 100,000 | 244,000 | 0,250 |
101,000 | 11,000 | 1,050 | 0,700 | 1,010 | 0,900 | 2,000 | 100,000 | 245,000 | 0,250 |
91,000 | 11,000 | 1,050 | 0,900 | 1,010 | 0,900 | 1,000 | 100,000 | 246,000 | 0,242 |
51,000 | 21,000 | 1,050 | 0,500 | 1,010 | 0,900 | 1,000 | 100,000 | 246,000 | 0,246 |
61,000 | 21,000 | 1,070 | 0,500 | 1,010 | 0,900 | 2,000 | 100,000 | 247,000 | 0,244 |
81,000 | 21,000 | 1,030 | 0,700 | 1,070 | 0,900 | 2,000 | 100,000 | 248,000 | 0,249 |
101,000 | 21,000 | 1,070 | 0,700 | 1,010 | 0,900 | 1,000 | 100,000 | 250,000 | 0,243 |
51,000 | 21,000 | 1,030 | 0,900 | 1,040 | 0,900 | 1,000 | 100,000 | 250,000 | 0,244 |
101,000 | 21,000 | 1,070 | 0,500 | 1,010 | 0,900 | 2,000 | 100,000 | 251,000 | 0,245 |
91,000 | 61,000 | 1,070 | 0,500 | 1,010 | 0,900 | 2,000 | 100,000 | 251,000 | 0,245 |
101,000 | 11,000 | 1,070 | 0,500 | 1,010 | 0,900 | 1,000 | 100,000 | 251,000 | 0,249 |
101,000 | 21,000 | 1,070 | 0,500 | 1,070 | 0,900 | 2,000 | 100,000 | 252,000 | 0,243 |
91,000 | 21,000 | 1,070 | 0,500 | 1,070 | 0,900 | 1,000 | 100,000 | 256,000 | 0,243 |
81,000 | 11,000 | 1,050 | 0,700 | 1,070 | 0,600 | 1,000 | 100,000 | 257,000 | 0,249 |
101,000 | 101,000 | 1,030 | 0,700 | 1,040 | 0,900 | 1,000 | 100,000 | 258,000 | 0,249 |
81,000 | 11,000 | 1,070 | 0,700 | 1,040 | 0,900 | 2,000 | 100,000 | 259,000 | 0,243 |
101,000 | 31,000 | 1,030 | 0,500 | 1,040 | 0,900 | 2,000 | 100,000 | 260,000 | 0,249 |
71,000 | 61,000 | 1,030 | 0,700 | 1,040 | 0,900 | 2,000 | 100,000 | 260,000 | 0,250 |
51,000 | 41,000 | 1,050 | 0,700 | 1,040 | 0,900 | 1,000 | 100,000 | 260,000 | 0,250 |
101,000 | 11,000 | 1,070 | 0,700 | 1,070 | 0,900 | 1,000 | 100,000 | 262,000 | 0,248 |
101,000 | 21,000 | 1,030 | 0,700 | 1,010 | 0,900 | 1,000 | 100,000 | 262,000 | 0,248 |
51,000 | 21,000 | 1,030 | 0,700 | 1,040 | 0,900 | 1,000 | 100,000 | 262,000 | 0,249 |
41,000 | 11,000 | 1,030 | 0,500 | 1,070 | 0,900 | 1,000 | 100,000 | 264,000 | 0,249 |
71,000 | 21,000 | 1,030 | 0,700 | 1,070 | 0,600 | 2,000 | 100,000 | 265,000 | 0,248 |
101,000 | 21,000 | 1,030 | 0,500 | 1,010 | 0,900 | 2,000 | 100,000 | 266,000 | 0,249 |
71,000 | 51,000 | 1,030 | 0,700 | 1,010 | 0,900 | 2,000 | 100,000 | 266,000 | 0,249 |
81,000 | 21,000 | 1,050 | 0,900 | 1,010 | 0,900 | 1,000 | 100,000 | 267,000 | 0,239 |
51,000 | 31,000 | 1,050 | 0,900 | 1,040 | 0,900 | 2,000 | 100,000 | 267,000 | 0,247 |
91,000 | 11,000 | 1,050 | 0,700 | 1,010 | 0,900 | 2,000 | 100,000 | 268,000 | 0,249 |
41,000 | 21,000 | 1,030 | 0,700 | 1,070 | 0,900 | 2,000 | 100,000 | 268,000 | 0,250 |
61,000 | 11,000 | 1,050 | 0,700 | 1,040 | 0,900 | 2,000 | 100,000 | 269,000 | 0,249 |
81,000 | 21,000 | 1,070 | 0,500 | 1,040 | 0,600 | 1,000 | 100,000 | 270,000 | 0,247 |
91,000 | 41,000 | 1,030 | 0,900 | 1,070 | 0,900 | 1,000 | 100,000 | 271,000 | 0,249 |
91,000 | 21,000 | 1,050 | 0,900 | 1,010 | 0,900 | 2,000 | 100,000 | 272,000 | 0,246 |
71,000 | 11,000 | 1,050 | 0,700 | 1,010 | 0,600 | 1,000 | 100,000 | 272,000 | 0,250 |
41,000 | 21,000 | 1,030 | 0,900 | 1,040 | 0,900 | 2,000 | 100,000 | 273,000 | 0,250 |
101,000 | 21,000 | 1,050 | 0,700 | 1,040 | 0,900 | 1,000 | 100,000 | 274,000 | 0,249 |
91,000 | 31,000 | 1,030 | 0,700 | 1,010 | 0,900 | 1,000 | 100,000 | 274,000 | 0,250 |
Wyniki zostały posortowane według następujących kryteriów:
-% nauczenia się sieci – malejąco
-epoch - rosnąco
-SSE – rosnąco
Dla 100 najlepszych wyników sprawdziłem jakie ilości neuronów w poszczególnych warstwach występowały najczęściej, oto wyniki
Liczba neuronów | ilość przypadków |
---|---|
S1=101 | 32 |
S1=91 | 24 |
S1=81 | 15 |
S1=71 | 10 |
S1=61 | 9 |
S1=51 | 7 |
Liczba neuronów | ilość przypadków |
---|---|
S2=1 | 0 |
S2=11 | 35 |
S2=21 | 42 |
S2=31 | 8 |
S2=41 | 5 |
S2=51 | 1 |
Jak widać najczęściej występowały przypadki w których S1= 101, zaś S2 = 21.
Średnia wartość epoch dla 100 najlepszych wyników to 228,45. Średni SSE to 0,24549. Aż 89 wyników z listy 100 najlepszych posiada współczynnik momentum równy 0,9 co świadczy o jego dużym znaczeniu dla szybkości obliczeń. Zaledwie 11 wyników posiada współczynnik momentum równy 0,6. Wśród 100 najlepszych wyników współczynnik lr_inc występuje w następującej ilości przypadków:
ilość przypadków | |
---|---|
lr inc=1,03 | 47 |
lr inc=1,05 | 37 |
lr inc=1,07 | 16 |
Współczynnik lr_dec zaś występuje w następujących ilościach:
ilość przypadków | |
---|---|
lr dec=0,9 | 19 |
lr dec=0,7 | 48 |
lr dec=0,5 | 33 |
Powyższe statystyki dotyczą zestawu TOP 100.
Zobaczmy teraz ogólne statystyki dotyczące wszystkich wyników. W wyniku przeprowadzonych eksperymentów otrzymano w sumie 7128 rekordów danych. Dla 58,165% przypadków sieć nauczyła się w 100%, dla 36,153% przypadków sieć nie nauczyła się w ogóle(0%). Średnie epoch dla całego zbioru to 5001,665. Średni % w jakim nauczyła się sieć w odniesieniu do otrzymanego zbioru to 61,556%. Średnia wartość SSE była niemożliwa do obliczenia ponieważ maksymalna wartość jaką przyjmuje SSE to nieskończoność. Odnośnie występowania różnych wartości S1 i S2 sporządziłem dwie tabelki obrazujące najczęściej występujące wartości:
Liczba neuronów | ilość przypadków | Liczba neuronów | ilość przypadków | |
---|---|---|---|---|
S1=101 | 1188 | S2=1 | 1188 | |
S1=91 | 1080 | S2=11 | 1080 | |
S1=81 | 972 | S2=21 | 972 | |
S1=71 | 864 | S2=31 | 864 | |
S1=61 | 756 | S2=41 | 756 | |
S1=51 | 648 | S2=51 | 648 |
Dołączam też wykresy obrazujące zależności % nauczenia się, SSE i er od liczby neuronów.
% NAUCZENIA SIĘ SIECI W ZALEŻNOŚCI OD ILOŚCI NEURONÓW NA WARSTWACH
Jak widać w miarę przyrostu liczby neuronów sieć uczyła się coraz skuteczniej co widać wyraźnie po płaszczyźnie jaka została utworzona.
WYKRES ZALEŻNOŚCI EPOCH OD ILOŚCI NEURONÓW NA WARSTWACH
Jak widać im mniej neuronów na obu warstwach tym sieć gorzej radzi sobie z uczeniem, jeśli zaś ilości neuronów na obu warstwach są zbliżone to sieć uczy się bardzo skutecznie co widać po bardzo spłaszczonej płaszczyźnie.
WYKRES ZALEŻNOŚCI SSE OD ILOŚCI NEURONÓW NA WARSTWACH
Już najpierwszy rzut oka coś jest nie tak. Otóż wartości SSE osiągają nieskończoność przez co wykres jest niemal idealnie płaski. Sporo wartości SSE to bardzo duże liczby które powodują ustawianie przez środowisko bardzo niesprzyjającej skali która wypłaszcza nam wykres.
7.Wnioski i podsumowanie
Celem projektu było przetestowanie działania wielowarstwowej sztucznej sieci neuronowej mającej za zadanie rozpoznawać zwierzęta na podstawie podanych cech. W tym celu wykorzystana została funkcja trainbpx z pakietu MATLAB 4.0 . Dane uczące zostały pobrane z repozytorium uniwersytetu Kalifornijskiego w Irvine.
Zanim przystąpiono do badań dane musiały zostać znormalizowane. Gdy to już nastąpiło można było przystąpić do badań.
Pomiary były wykonywane dla następujących wartości:
S1 w przedziale od 1 do 101 (krok 10)
S2 w przedziale od 1 do S1 (krok 10)
lr_inc w przedziale 1.03 do 1.07 (krok 0.02)
lr_dec w przedziale 0.5 do 0.9 (krok 0.2)
er w przedziale 1.01 do 1.07 (krok 0.03)
mc w przedziale od 0.6 do 0.99 (krok 0.3)
dla podanych wyżej wartości wykonane zostały 2 eksperymenty. Najlepszy wynik został osiągnięty dla S1=91, S2=21, lr_inc=1,03, lr_dec=0,7, er=1,01, mc=0,9. Podczas badań można było zauważyć, że stała momentum ma znaczny wpływ na szybkość uczenia co widać przy 100 najlepszych wynikach z których większa część posiada wyższy współczynnik momentum równy 0,9. Można było zaobserwować, że w miarę zwiększania liczby neuronów na warstwach sieć uczy się skuteczniej i częściej osiąga zamierzony poziom nauczenia równy 100%. Sieć z dobrze dobranymi parametrami potrafi uczyć się bardzo szybko i wydajnie a co za tym idzie potrafi w krótkim czasie nauczyć się zadanego zbioru danych.
Obecnie sieci neuronowe znajdują coraz więcej zastosowań, oprócz rozpoznawana zwierząt mogą one rozpoznawać jakiekolwiek zadane obiekty na podstawie posiadanej bazy danych. Popularność sieci bierze się z ich możliwości uogólniania wiedzy i uczenia się nawet przy niekompletnych danych.
Bibliografia:
http://www.kik.pcz.czest.pl/nn/jednokier.php?art=4
http://www.ftj.agh.edu.pl/~stegowski/dydaktyka/neurony/OPISNT.htm#trainbpx
Marek Kasperski – Sztuczna inteligencja