Zrealizować sieć neuronową (learnbpm) uczącą się odwzorowania z = x 2 + y 2 dla x i y zmieniających się od -1 do 1.



Podobne dokumenty
Sztuczna Inteligencja Tematy projektów Sieci Neuronowe

Inteligentne systemy decyzyjne: Uczenie maszynowe sztuczne sieci neuronowe

Zastosowania sieci neuronowych

IMPLEMENTACJA SIECI NEURONOWYCH MLP Z WALIDACJĄ KRZYŻOWĄ

Uczenie sieci typu MLP

WYKORZYSTANIE SIECI NEURONOWEJ DO BADANIA WPŁYWU WYDOBYCIA NA SEJSMICZNOŚĆ W KOPALNIACH WĘGLA KAMIENNEGO. Stanisław Kowalik (Poland, Gliwice)

Algorytmy sztucznej inteligencji

Optymalizacja ciągła

Temat: Sieci neuronowe oraz technologia CUDA

ZACHODNIOPOMORSKI UNIWERSYTET TECHNOLOGICZNY W SZCZECINIE

Rozdział 1 Sztuczne sieci neuronowe. Materiały do zajęć dydaktycznych - na podstawie dokumentacji programu Matlab opracował Dariusz Grzesiak

Temat: Sztuczne Sieci Neuronowe. Instrukcja do ćwiczeń przedmiotu INŻYNIERIA WIEDZY I SYSTEMY EKSPERTOWE

Algorytm wstecznej propagacji błędów dla sieci RBF Michał Bereta

Podstawy Sztucznej Inteligencji

Sztuczne siei neuronowe - wprowadzenie

Podstawy Sztucznej Inteligencji (PSZT)

Uczenie sieci neuronowych i bayesowskich

Identyfikacja obiektów dynamicznych za pomocą sieci neuronowych

Sztuczne sieci neuronowe

Wstęp do teorii sztucznej inteligencji Wykład III. Modele sieci neuronowych.

Zagadnienia optymalizacji i aproksymacji. Sieci neuronowe.

Techniki Optymalizacji: Stochastyczny spadek wzdłuż gradientu I

WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA

Widzenie komputerowe

PROGNOZOWANIE OSIADAŃ POWIERZCHNI TERENU PRZY UŻYCIU SIECI NEURONOWYCH**

8. Neuron z ciągłą funkcją aktywacji.

wiedzy Sieci neuronowe (c.d.)

1. Historia 2. Podstawy neurobiologii 3. Definicje i inne kłamstwa 4. Sztuczny neuron i zasady działania SSN. Agenda

Uczenie sieci radialnych (RBF)

Temat: ANFIS + TS w zadaniach. Instrukcja do ćwiczeń przedmiotu INŻYNIERIA WIEDZY I SYSTEMY EKSPERTOWE

Zastosowania sieci neuronowych - automatyka identyfikacja sterowanie

Metody Sztucznej Inteligencji II

Rozwiązywanie równań różniczkowych cząstkowych metodą elementów skończonych - wprowadzenie

Elementy inteligencji obliczeniowej

Zastosowania sieci neuronowych

Sieci neuronowe w Statistica. Agnieszka Nowak - Brzezioska

Definicja perceptronu wielowarstwowego

Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Elektroniki

SIEĆ NEURONOWA DO OCENY KOŃCOWEJ PRZEDSIĘWZIĘCIA (PROJEKTU)

ALGORYTMY SZTUCZNEJ INTELIGENCJI

Wstęp do teorii sztucznej inteligencji Wykład II. Uczenie sztucznych neuronów.

Elementy metod numerycznych - zajęcia 9

do MATLABa programowanie WYKŁAD Piotr Ciskowski

Politechnika Warszawska

HAŁASU Z UWZGLĘDNIENIEM ZJAWISK O CHARAKTERZE NIELINIOWYM

Sieci neuronowe w Statistica

SIECI REKURENCYJNE SIECI HOPFIELDA

Oprogramowanie Systemów Obrazowania SIECI NEURONOWE

Przykładowe funkcje przejścia używane przy budowie sztucznych neuronów

Metody sztucznej inteligencji Zadanie 3: (1) klasteryzacja samoorganizująca się mapa Kohonena, (2) aproksymacja sieć RBF.


Rozpoznawanie obrazów

Sieci obliczeniowe poprawny dobór i modelowanie

Podstawy sztucznej inteligencji

Inteligentne systemy przeciw atakom sieciowym

Wstęp do sieci neuronowych, wykład 6 Wsteczna propagacja błędu - cz. 3

Sztuczne sieci neuronowe

Rys Wykres kosztów skrócenia pojedynczej czynności. k 2. Δk 2. k 1 pp. Δk 1 T M T B T A

ĆWICZENIE 5: Sztuczne sieci neuronowe

Laboratorium Przetwarzania Sygnałów

Wprowadzenie do Sieci Neuronowych Laboratorium 05 Algorytm wstecznej propagacji błędu

SZTUCZNA INTELIGENCJA

Estymacja wektora stanu w prostym układzie elektroenergetycznym

INTERPOLACJA I APROKSYMACJA FUNKCJI

Metody systemowe i decyzyjne w informatyce

Obrona rozprawy doktorskiej Neuro-genetyczny system komputerowy do prognozowania zmiany indeksu giełdowego

Sieć Hopfielda. Sieci rekurencyjne. Ewa Adamus. ZUT Wydział Informatyki Instytut Sztucznej Inteligencji i Metod Matematycznych.

Inteligentne systemy decyzyjne: Uczenie maszynowe sztuczne sieci neuronowe

Sztuczne sieci neuronowe (SNN)

1. Logika, funkcje logiczne, preceptron.

sieci jednowarstwowe w MATLABie LABORKA Piotr Ciskowski

METODY INŻYNIERII WIEDZY KNOWLEDGE ENGINEERING AND DATA MINING

Podstawy Robotyki Określenie kinematyki oraz dynamiki manipulatora

Uczenie się pojedynczego neuronu. Jeśli zastosowana zostanie funkcja bipolarna s y: y=-1 gdy z<0 y=1 gdy z>=0. Wówczas: W 1 x 1 + w 2 x 2 + = 0

MATLAB Neural Network Toolbox uczenie sieci (dogłębnie)

Laboratorium MATLA. Ćwiczenie 4. Debugowanie. Efektywności kodu. Wektoryzacja.

Rys 1 Schemat modelu masa- sprężyna- tłumik

SIECI NEURONOWE Liniowe i nieliniowe sieci neuronowe

BIOCYBERNETYKA SIECI NEURONOWE. Akademia Górniczo-Hutnicza. Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej.

Aproksymacja funkcji a regresja symboliczna

Macierzowe algorytmy równoległe

I EKSPLORACJA DANYCH

Wstęp do sieci neuronowych, wykład 02 Perceptrony c.d. Maszyna liniowa.

Aproksymacja. funkcji: ,a 2. ,...,a m. - są funkcjami bazowymi m+1 wymiarowej podprzestrzeni liniowej X m+1

7. Szybka transformata Fouriera fft

wiedzy Sieci neuronowe

Lokalna odwracalność odwzorowań, odwzorowania uwikłane

METODY INŻYNIERII WIEDZY

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Obliczenia inteligentne Zadanie 4

1. PODSTAWY TEORETYCZNE

Podstawy MATLABA, cd.

SZTUCZNA INTELIGENCJA

PRÓBA ZASTOSOWANIA SIECI NEURONOWYCH DO PROGNOZOWANIA OSIADAŃ POWIERZCHNI TERENU POWSTAŁYCH NA SKUTEK EKSPLOATACJI GÓRNICZEJ**

Sztuczne sieci neuronowe Ćwiczenia. Piotr Fulmański, Marta Grzanek

Interpolacja, aproksymacja całkowanie. Interpolacja Krzywa przechodzi przez punkty kontrolne

Wstęp do sieci neuronowych, wykład 04. Skierowane sieci neuronowe. Algorytmy konstrukcyjne dla sieci skierowanych

SIEĆ NEURONOWA JAKO NARZĘDZIE APROKSYMACJI I KLASYFIKACJI DANYCH. Jakub Karbowski Gimnazjum nr 17 w Krakowie

xx + x = 1, to y = Jeśli x = 0, to y = 0 Przykładowy układ Funkcja przykładowego układu Metody poszukiwania testów Porównanie tabel prawdy

Ćwiczenie 3. MatLab: Algebra liniowa. Rozwiązywanie układów liniowych

Transkrypt:

Politechnika Rzeszowska Wydział Elektrotechniki i Informatyki Mateusz Błażej Nr albumu: 130366 Zrealizować sieć neuronową (learnbpm) uczącą się odwzorowania z = x 2 + y 2 dla x i y zmieniających się od -1 do 1. Projekt zaliczeniowy z przedmiotu: Sztuczna Inteligencja Praca wykonana pod kierunkiem dr. inż. Romana Zajdla z Katedry Informatyki i Automatyki WEiI PRz Rzeszów, kwiecień 2014

SPIS TREŚCI WSTĘP... 2 ROZDZIAŁ I. Opis teoretyczny... 3 1.1. Model neuronu... 3 1.2. Sieć jednokierunkowa wielowarstwowa... 4 1.3. Metoda momentum... 7 ROZDZIAŁ II. Rozwiązanie problemu... 9 2.1. Wybór funkcji... 9 2.2. Korekta kodu i wybór parametrów... 10 ROZDZIAŁ III. Eksperymenty i rezultaty... 13 3.1. Wstępny eksperyment... 13 3.2. Rezultaty i dodatkowe eksperymenty... 13 ZAKOŃCZENIE... 25 BIBLIOGRAFIA... 26 ZESTAWIENIE SPISÓW... 27 1

WSTĘP Celem projektu jest słowny opis działań, jakie zostały wykonane w celu zbudowania sieci aproksymującej funkcję dwóch zmiennych, tj. zrealizowania zagadnienia z przedmiotu Sztuczna Inteligencja pt.: Zrealizować sieć neuronową (learnbpm) uczącą się odwzorowania z = x 2 + y 2 dla x i y zmieniających się od -1 do 1. Do wykonania tego projektu został użyty program firmy MathSoft MATLAB w wersji: 7.0.1. Z racji prac przeprowadzonych na systemie operacyjnym Windows 8.1 x64 konieczne było ustawienie trybu zgodności z Windows Vista (Service Pack 2). Maszyna wykorzystana do obliczeń miała parametry: procesor Intel T9500 2x 2,6GHz oraz pamięć ram Kingston HyperX 4GB 667MHz CL4. Wykonanie skryptów zajęło około 50 godzin. Rys. 1. Aproksymowana funkcja z = x 2 + y 2 dla x i y zmieniających się od -1 do 1 Źródło: Opracowanie własne przy użyciu oprogramowania MATLAB. 2

ROZDZIAŁ I Opis teoretyczny 1.1. Model neuronu Rys. 2. Model neuronu Źródło: Opracowanie własne na podstawie: PRz, KIiA, Sztuczna inteligencja, Laboratorium, Ćw6 Model neuronu, Roman Zajdel [online] [dostęp: 2 kwietnia 2014 r.]. Dostępne w Internecie: http://materialy.prz-rzeszow.pl/pracownik/pliki/34/sztuczna-inteligencja-cw6-model-neuronu.pdf. Sygnał wyjściowy neuronu y określony jest zależnością: gdzie xj jest j tym (j = 1, 2,, L) sygnałem wejściowym, a wj współczynnikiem wagowym (wagą). Ze względu na skrócenie zapisu wygodnie będzie stosować zapis macierzowy do opisu, 3

działania neuronu. Niech x = [x1, x2,, xl] T będzie wektorem sygnałów wejściowych, w = [w1, w2,, wl] - macierzą wierszową wag, a y i b skalarami. Wówczas y = f (wx + b). Ważona suma wejść wraz z przesunięciem często bywa nazywana łącznym pobudzeniem neuronu i w dalszych rozważaniach oznaczana będzie symbolem z 1 :. 1.2. Sieć jednokierunkowa wielowarstwowa Sieć jednokierunkowa wielowarstwowa ma zwykle jedną warstwę neuronów ukrytych między warstwą wejściową a wyjściową. Rys. 3. Sieć jednokierunkowa wielowarstwowa Źródło: PRz, KIiA, Sztuczna inteligencja, Laboratorium, Ćw9 Sieć jednokierunkowa wielowarstwowa, Roman Zajdel [online] [dostęp: 2 kwietnia 2014 r.]. Dostępne w Internecie: http://materialy.prz-rzeszow.pl/pracownik/pliki/34/sztuczna-inteligencja-cw9-siec-wielowarstw.pdf. 1 PRz, KIiA, Sztuczna inteligencja, Laboratorium, Ćw6 Model neuronu, Roman Zajdel [online] [dostęp: 2 kwietnia 2014 r.]. Dostępne w Internecie: http://materialy.prz-rzeszow.pl/pracownik/pliki/34/sztuczna-inteligencja-cw6-model-neuronu.pdf. 4

Taką sieć nazywa się trójwarstwową. Występują tu połączenia pomiędzy warstwami neuronów typu każdy z każdym. Sygnały wejściowe podawane są do warstwy wejściowej neuronów, których wyjścia stanowią sygnały źródłowe dla kolejnej warstwy. Można wykazać, że sieć trójwarstwowa nieliniowa jest w stanie odwzorować praktycznie dowolne odwzorowanie nieliniowe. Każda warstwa neuronów posiada swoją macierz wag w, wektor przesunięć b, funkcje aktywacji f i wektor sygnałów wyjściowych y. Działanie poszczególnych warstw dane jest przez: Działanie całej sieci można więc opisać jako:. W przypadku sieci trójwarstwowej, błąd średniokwadratowy wyliczany jest następująco:. gdzie: j = 1,, L oznacza numer wejścia warstwy pierwszej, i1 = 1,, K1, i2 = 1,, K2, i3 = 1,, K3 oznaczają odpowiednio numer wyjścia warstwy pierwszej, drugiej i trzeciej., 5

Obliczanie wag neuronów rozpoczyna się od warstwy wyjściowej, dla której mamy: gdzie:, jest łącznym pobudzeniem i3 tego neuronu warstwy wyjściowej. Stosując podstawienie: zależność przyjmuje postać: Podobnie wyznacza się elementy gradientu względem wag warstw ukrytej i wejściowej 2 :. 2 PRz, KIiA, Sztuczna inteligencja, Laboratorium, Ćw9 Sieć jednokierunkowa wielowarstwowa, Roman Zajdel [online] [dostęp: 2 kwietnia 2014 r.]. Dostępne w Internecie: http://materialy.prz-rzeszow.pl/pracownik/pliki/34/sztuczna-inteligencja-cw9-siec-wielowarstw.pdf. 6

. 1.3. Metoda momentum Z praktycznego punktu widzenia istotne znaczenie ma szybkość uczenia. Metoda wstecznej propagacji błędu jest bardzo czasochłonna. W literaturze poświęconej sieciom neuronowym spotyka się szereg metod pozwalających na znaczne przyśpieszenie procesu uczenia. Można wyróżnić dwa podejścia. Jedno z nich polega na wprowadzeniu do wzoru na korektę wag dodatkowego składnika będącego miarą bezwładności zmiany wag, zwanego momentum. W przypadku uczenia pod nadzorem pojedynczej warstwy sieci reguła uczenia z momentum może wyglądać następująco: gdzie momentum M(k)ij jest wyliczane z zależności, η ɛ [0,1] jest współczynnikiem uczenia momentum. Jeżeli η = 1, to nowa waga jest równa ostatniej zmianie wagi. Jeżeli η = 0, to zmiana wagi oparta jest tylko na składowej gradientowej. 7

Najczęściej przyjmuje się η = 0.95. Wprowadzenie składnika momentum zdecydowanie wpływa na zwiększenie szybkości uczenia. 3 3 PRz, KIiA, Sztuczna inteligencja, Laboratorium, Ćw10 Przyśpieszanie procesu uczenia, Roman Zajdel [online] [dostęp: 2 kwietnia 2014 r.]. Dostępne w Internecie: http://materialy.prz-rzeszow.pl/pracownik/pliki/34/sztuczna-inteligencja-cw10-przysp-uczenia.pdf. 8

ROZDZIAŁ II Rozwiązanie problemu 2.1. Wybór funkcji Funkcja odpowiadająca nauczaniu wielowarstwowej sieci neuronowej ze wsteczną propagacją błędu przyspieszoną metodą momentum w programie MATLAB nosi nazwę learnbpm. Wywołanie: [dw,db] = learnbpm (P,D,LR,MC,dW,dB) Argumenty: P - macierz wektorów wejściowych (wymiar R*Q, R - liczba wejść warstwy, Q - ilość wektorów), D - macierz pochodnych błędów warstwy (wymiar S*Q, S - liczba neuronów w warstwie), LR - współczynnik prędkości uczenia, MC - wartość stałej momentum, dw - macierz przyrostów współczynników wagowych warstwy w poprzednim kroku (wymiar S*R), db - wektor przyrostów współczynników progowych warstwy w poprzednim kroku (wymiar S*1). Wielkości zwracane: dw - nowa macierz przyrostów współczynników wagowych warstwy (wymiar S*R), db - nowa macierz przyrostów współczynników progowych warstwy (wymiar S*1). 4 4 Sztuczne sieci neuronowe [online] [dostęp: 3 kwietnia 2014 r.]. Dostępne w Internecie: http://ssn.elektrotechnika.ip.pwsz.edu.pl/nnt/nnt1.php. 9

2.2. Korekta kodu i wybór parametrów W celu zrealizowania zadania konieczna była korekta wstępnie napisanego kodu oraz ustalenie idealnych wartości parametrów S1, S2, lr (współczynnik uczący) i mc (współczynnik momentum). Dobór dokonywany jest na podstawie SSE (błędu średniokwadratowego) - pożądana jest wartość minimalna. Kod wstępny wygląda następująco (istotne zmiany zostały opisane w dalszej części projektu): clear all; nntwarn off; X=-1:.1:1; Y=-1:.1:1; Z=zeros(length(X), length(y)); XX = []; YY = []; ZZ = []; SSES =[]; EEE=[]; for i = 1 : length(x), for j = 1 : length(y), XX = [XX X(i)]; YY = [YY Y(j)]; Z(i, j) = ((X(i)^2 + Y(j)^2)); ZZ = [ZZ Z(i, j)]; ; P = [XX; YY]; [R, Q] = size(p); max_epoch = 20000; disp_freq = 100; for S1 = 1:10, for S2 = 1:S1, for lr=[1e-5 1e-4 1e-3 1e-2] for mc=[.001.01.1:.1:.9.95.99], [S3, Q] = size(zz); 10

error = []; [W1, B1] = nwtan (S1, R); [W2, B2] = nwtan (S2, S1); [W3, B3] = rands (S3, S2); dw1 = zeros (size (W1)); db1 = zeros (size (B1)); dw2 = zeros (size (W2)); db2 = zeros (size (B2)); dw3 = zeros (size (W3)); db3 = zeros (size (B3)); A1 = tansig (W1*P, B1); A2 = tansig (W2*A1, B2); A3 = purelin (W3*A2, B3); E = ZZ - A3; SSE = sumsqr (E); for epoch = 1 : max_epoch, if isnan(sse) break; D3 = deltalin (A3, E); D2 = deltatan (A2, D3, W3); D1 = deltatan (A1, D2, W2); [dw1, db1] = learnbpm (P, D1, lr, mc, dw1, db1); [dw2, db2] = learnbpm (A1, D2, lr, mc, dw2, db2); [dw3, db3] = learnbpm (A2, D3, lr, mc, dw3, db3); W1 = W1 + dw1; B1 = B1 + db1; W2 = W2 + dw2; B2 = B2 + db2; W3 = W3 + dw3; B3 = B3 + db3; A1 = tansig (W1*P, B1); A2 = tansig (W2*A1, B2); A3 = purelin (W3*A2, B3); E = ZZ - A3; 11

SSE = sumsqr(e); error = [error, SSE]; if (rem (epoch, disp_freq) == 0), epoch SSE S1 S2 lr mc SSES=[SSES ; SSE S1 S2 lr mc]; Główne modyfikacje polegały na wprowadzeniu czterech dodatkowych pętli for: - S1 od 1 do 10, - S2 od 1 do S1, - lr dla wartości 1e-5, 1e-4, 1e-3, 1e-2, - mc dla wartości 0.001, 0.01 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95, 0.99, skutkiem czego znacznie wydłużył się czas wykonywania skryptu. Dla parametrów komputera przedstawionych we wstępie wyniósł on blisko 25 godzin. Dodatkowo usunięto przerwanie wykonywania pętli po osiągnięciu żądanego błędu średniokwadratowego. Kolejną modyfikacją było wprowadzenie macierzy, do których zapisywanie były pożądane wyniki: - SSES błąd średniokwadratowy dla każdej kombinacji parametrów S1, S2, lr i mc, Ostatnią ciekawą korektą było dodanie warunku if isnan(sse) powodującego przy spełnieniu przerwanie wykonywania pętli. Zaobserwowano, że dalsze zwiększanie współczynnika epoch przy pojawieniu się parametru SSE=NaN powoduje znaczne spowolnienie wykonywania pętli, a co za tym idzie bardzo duży wzrostu czasu realizacji całego skryptu. Dodatnie tego warunku wyeliminowuje ten problem. 12

ROZDZIAŁ III Eksperymenty i rezultaty 3.1. Wstępny eksperyment Pierwszym z przeprowadzonych eksperymentów było zapisanie błędów średniokwadratowych dla każdej kombinacji: - S1 od 1 do 10, - S2 od 1 do S1, - lr dla wartości 1e-5, 1e-4, 1e-3, 1e-2, - mc dla wartości 0.001, 0.01 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95, 0.99. Powyższy eksperyment wygenerował 55 kombinacji S1 i S2. Po włączeniu możliwych kombinacji lr i mc liczba obserwacji wzrosła do 2860. Dalsze eksperymenty opierały się na wynikach otrzymanych we wcześniej wygenerowanej próbie. 3.2. Rezultaty i dodatkowe eksperymenty Dla żadnej z wygenerowanych sieci błąd średniokwadratowy nie spadł poniżej 0.05. Posortowano otrzymane rezultaty rosnąco według SSE (błędu średniokwadratowego). Poniżej przedstawiono 20 pierwszych wyników: SSE S1 S2 lr mc 0.0014 10.0000 9.0000 0.0100 0.9500 0.0016 8.0000 5.0000 0.0100 0.9500 0.0017 7.0000 3.0000 0.0100 0.9500 0.0019 8.0000 3.0000 0.0100 0.9500 0.0019 8.0000 7.0000 0.0100 0.9500 0.0020 9.0000 8.0000 0.0100 0.9900 0.0020 10.0000 6.0000 0.0100 0.9900 0.0020 7.0000 3.0000 0.0100 0.9000 0.0021 10.0000 7.0000 0.0100 0.9900 0.0021 7.0000 7.0000 0.0100 0.9500 0.0022 7.0000 7.0000 0.0100 0.9900 0.0024 6.0000 6.0000 0.0100 0.9500 0.0024 10.0000 5.0000 0.0100 0.9000 0.0025 7.0000 7.0000 0.0100 0.9000 13

0.0025 10.0000 10.0000 0.0100 0.9000 0.0026 10.0000 9.0000 0.0100 0.9900 0.0026 6.0000 5.0000 0.0100 0.9500 0.0026 9.0000 8.0000 0.0100 0.9500 0.0026 8.0000 3.0000 0.0100 0.9000 0.0026 8.0000 5.0000 0.0100 0.9000 Zauważono, że dla każdej z 89 pierwszych obserwacji lr (współczynnik uczenia) wyniósł 0.01. Dalszą aproksymację postanowiono ograniczyć do lr równego 0.01, gdyż wydaje się on wpływać najkorzystniej na efektywność sieci. Dodatkowo zwiększono ilości neuronów S1 i S2 w warstwach. Ostatecznie otrzymano następujące kombinacje: - S1 od 1 do 20, - S2 od 1 do S1, - lr dla wartości 0.01, - mc dla wartości 0.001, 0.01 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95, 0.99. Po wprowadzeniu zmian, kod ma postać: clear all; nntwarn off; X=-1:.1:1; Y=-1:.1:1; Z=zeros(length(X), length(y)); XX = []; YY = []; ZZ = []; SSES =[]; EEE=[]; for i = 1 : length(x), for j = 1 : length(y), XX = [XX X(i)]; YY = [YY Y(j)]; Z(i, j) = ((X(i)^2 + Y(j)^2)); ZZ = [ZZ Z(i, j)]; ; P = [XX; YY]; [R, Q] = size(p); 14

max_epoch = 20000; err_goal =.002; disp_freq = 100; lr=.01; for S1 = 1:20, for S2 = 1:S1, for mc=[.001.01.1:.1:.9.95.99], [S3, Q] = size(zz); error = []; [W1, B1] = nwtan (S1, R); [W2, B2] = nwtan (S2, S1); [W3, B3] = rands (S3, S2); dw1 = zeros (size (W1)); db1 = zeros (size (B1)); dw2 = zeros (size (W2)); db2 = zeros (size (B2)); dw3 = zeros (size (W3)); db3 = zeros (size (B3)); A1 = tansig (W1*P, B1); A2 = tansig (W2*A1, B2); A3 = purelin (W3*A2, B3); E = ZZ - A3; SSE = sumsqr (E); for epoch = 1 : max_epoch, if SSE < err_goal, epoch = epoch - 1; EEE=[EEE ; SSE S1 S2 mc epoch/10000]; break; if isnan(sse) break; D3 = deltalin (A3, E); D2 = deltatan (A2, D3, W3); D1 = deltatan (A1, D2, W2); 15

[dw1, db1] = learnbpm (P, D1, lr, mc, dw1, db1); [dw2, db2] = learnbpm (A1, D2, lr, mc, dw2, db2); [dw3, db3] = learnbpm (A2, D3, lr, mc, dw3, db3); W1 = W1 + dw1; B1 = B1 + db1; W2 = W2 + dw2; B2 = B2 + db2; W3 = W3 + dw3; B3 = B3 + db3; A1 = tansig (W1*P, B1); A2 = tansig (W2*A1, B2); A3 = purelin (W3*A2, B3); E = ZZ - A3; SSE = sumsqr(e); error = [error, SSE]; if (rem (epoch, disp_freq) == 0), epoch SSE S1 S2 mc EEE SSES=[SSES ; SSE S1 S2 mc]; Powyższy eksperyment wygenerował 210 kombinacji S1 i S2. Po włączeniu możliwych kombinacji mc liczba obserwacji wzrosła do 2730. Dodatkowo wprowadzono przerwanie wykonywania pętli po osiągnięciu żądanego błędu średniokwadratowego. Kolejną modyfikacją było wprowadzenie macierzy EEE, do której zapisywanie były pożądane wyniki: - EEE błąd średniokwadratowy i parametry SSES + parametr epoch, dla którego można przyjąć, że sieć została nauczona, tj. błąd średniokwadratowy był mniejszy od err_goal = 0.002. 16

Po wykonaniu skryptu, macierz EEE zawierała następujące wyniki: SSE S1 S2 mc epoch 0.0020 8.0000 7.0000 0.9500 11674 0.0020 20.0000 9.0000 0.9000 13523 0.0020 9.0000 9.0000 0.9000 14298 0.0020 17.0000 16.0000 0.9500 14837 0.0020 18.0000 11.0000 0.9500 15161 0.0020 10.0000 7.0000 0.9000 16054 0.0020 12.0000 4.0000 0.9500 16290 0.0020 15.0000 15.0000 0.9500 16540 0.0020 6.0000 5.0000 0.9500 16643 0.0020 14.0000 5.0000 0.9000 16839 0.0020 12.0000 9.0000 0.9500 17384 0.0020 8.0000 4.0000 0.9500 17412 0.0020 18.0000 15.0000 0.9500 17934 0.0020 10.0000 8.0000 0.9500 17992 0.0020 5.0000 5.0000 0.9500 18033 0.0020 15.0000 10.0000 0.9000 18088 0.0020 20.0000 11.0000 0.9500 18411 0.0020 16.0000 12.0000 0.9900 19464 0.0020 15.0000 12.0000 0.9500 19504 Pożądany SSE (błąd średniokwadratowy) osiągnięty został tylko dla parametrów mc (momentum) równych 0.9, 0.95 oraz 0.99. Tabela 1 obrazuje rozkład osiągniętych rezultatów wg. parametru mc: Tabela 1. Rozkład rezultatów wg. parametru mc Lp. mc Ilość 1. 0.9 5 2. 0.95 13 3. 0.95 1 Źródło: Opracowanie własne na podstawie wygenerowanej macierzy EEE przy użyciu programu MATLAB. Podana w tabeli 1 ilość rezultatów wg. parametru mc sugeruje ograniczenie wykonywania pętli dla parametru mc równego 0.95., gdyż blisko 70% pożądanych rezultatów zostało osiągniętych dla tego parametru. Co więcej najmniej epok (11674) do osiągnięcia SSE równego 0.002 zostało wykonanych również dla tego parametru. Również najmniejszy rozmiar S1 (warstwy wyjściowej) (5) dotyczył parametru mc równego 0.95. 17

Biorąc pod uwagę powyższe eksperymenty, ostatecznie kod obejmuje następujące parametry: - S1 od 1 do 20, - S2 od 1 do S1, - lr dla wartości 0.01, - mc dla wartości 0.95. Po wprowadzeniu zmian, kod finalny ma postać: clear all; nntwarn off; X=-1:.1:1; Y=-1:.1:1; Z=zeros(length(X), length(y)); XX = []; YY = []; ZZ = []; SSES =[]; EEE=[]; for i = 1 : length(x), for j = 1 : length(y), XX = [XX X(i)]; YY = [YY Y(j)]; Z(i, j) = ((X(i)^2 + Y(j)^2)); ZZ = [ZZ Z(i, j)]; ; P = [XX; YY]; [R, Q] = size(p); max_epoch = 20000; err_goal =.002; disp_freq = 100; lr=.01; mc=.95; for S1 = 1:20, for S2 = 1:S1, [S3, Q] = size(zz); 18

error = []; [W1, B1] = nwtan (S1, R); [W2, B2] = nwtan (S2, S1); [W3, B3] = rands (S3, S2); dw1 = zeros (size (W1)); db1 = zeros (size (B1)); dw2 = zeros (size (W2)); db2 = zeros (size (B2)); dw3 = zeros (size (W3)); db3 = zeros (size (B3)); A1 = tansig (W1*P, B1); A2 = tansig (W2*A1, B2); A3 = purelin (W3*A2, B3); E = ZZ - A3; SSE = sumsqr (E); for epoch = 1 : max_epoch, if SSE < err_goal, epoch = epoch - 1; EEE=[EEE ; SSE S1 S2 epoch/10000]; break; if isnan(sse) break; D3 = deltalin (A3, E); D2 = deltatan (A2, D3, W3); D1 = deltatan (A1, D2, W2); [dw1, db1] = learnbpm (P, D1, lr, mc, dw1, db1); [dw2, db2] = learnbpm (A1, D2, lr, mc, dw2, db2); [dw3, db3] = learnbpm (A2, D3, lr, mc, dw3, db3); W1 = W1 + dw1; B1 = B1 + db1; W2 = W2 + dw2; B2 = B2 + db2; W3 = W3 + dw3; B3 = B3 + db3; 19

A1 = tansig (W1*P, B1); A2 = tansig (W2*A1, B2); A3 = purelin (W3*A2, B3); E = ZZ - A3; SSE = sumsqr(e); error = [error, SSE]; if (rem (epoch, disp_freq) == 0), epoch SSE S1 S2 EEE A3_ = zeros (size (Z)); error_ = zeros (size (Z)); for i = 1 : length(x), for j = 1 : length(y), A1_ = tansig(w1*[x(i); Y(j)], B1); A2_ = tansig(w2*a1_, B2); A3_(i, j) = purelin(w3*a2_,b3); error_(i,j)=z(i,j)-a3_(i,j); figure (1) subplot (1, 2, 1), mesh (X, Y, Z); subplot (1, 2, 2), mesh (X, Y, A3_); figure (2) mesh (X, Y, error_); pause (1e-200); SSES=[SSES ; SSE S1 S2]; 20

Powyższy eksperyment wygenerował jedynie 210 kombinacji, co pozwoliło znacznie skrócić czas generowania pożądanych sieci neuronowych. Najszybciej ucząca się sieć miała następujące parametry: - S1 równe 8, - S2 równe 7, - lr równe 0.01, - mc równe 0.95. Poniżej przedstawiono grafikę porównującą aproksymowaną funkcję z wygenerowaną dla parametrów podanych powyżej. Rys. 4. Porównanie aproksymowanej funkcji z wygenerowaną 2 2 1.8 1.8 1.6 1.6 1.4 1.4 1.2 1.2 1 1 0.8 0.8 0.6 0.6 0.4 0.4 0.2 0.2 0 1 0.8 0.6 0.4 0.2 0-0.2-0.4-0.6-0.8-1 -1-0.5 0 0.5 1 0 1 0.8 0.6 0.4 0.2 0-0.2-0.4-0.6-0.8-1 -1-0.5 0 0.5 1 Źródło: Opracowanie własne przy użyciu oprogramowania MATLAB. Wykres obrazujący błąd średniokwadratowy przedstawiono poniżej. 21

Rys. 5. Błąd średniokwadratowy 8 x 10-3 6 4 2 0-2 -4-6 -8 1 0.8 0.6 0.4 0.2 0-0.2-0.4-0.6-0.8-1 -1-0.8-0.6-0.4-0.2 0 0.2 0.4 0.6 0.8 1 Źródło: Opracowanie własne przy użyciu oprogramowania MATLAB. Dla parametrów lr i mc uznanych za idealne (0.01 i 0.95 kolejno) wygenerowano wykres obrazujący zmianę SSE w zależności od S1 i S2 w przedziale S1 od 1 do 10 i S2 od 1 do S1. Skorzystano ze stworzonej macierzy pomocniczej o wymiarach 10x10: 80.5439 0 0 0 0 0 0 0 0 0 76.9831 30.1446 0 0 0 0 0 0 0 0 94.2172 0.0947 0.0211 0 0 0 0 0 0 0 94.2173 0.1756 0.0211 0.0085 0 0 0 0 0 0 0.0353 0.0148 0.2234 0.0202 0.0048 0 0 0 0 0 0.0411 0.0567 0.0051 0.0109 0.0026 0.0024 0 0 0 0 0.0510 0.0230 0.0017 0.0082 0.0032 0.0086 0.0021 0 0 0 0.0951 0.0077 0.0019 0.0078 0.0016 0.0133 0.0019 0.3216 0 0 0.0244 0.0062 0.0046 0.0027 0.8184 0.0079 0.0030 0.0026 0.0037 0 0.0176 0.0315 0.0092 0.0067 0.0028 0.0027 0.0049 0.0028 0.0014 0.0036 Grafika została przedstawiona poniżej. 22

Rys. 6. Zależność SSE od S1 i S2 100 90 80 70 60 50 40 30 20 10 0 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 Źródło: Opracowanie własne przy użyciu oprogramowania MATLAB. Rysunek 6 obrazuje, że przy wzroście S1 powyżej 4, SSE gwałtownie maleje. W celu zobrazowania dokładniejszej zależności, przeskalowano współrzędne, korzystając z polecenia: axis([1,10,1,10,0,0.3217]) Wynik przekształcenia przedstawiony został na rysunku 7. 23

Rys. 7. Zależność SSE od S1 i S2 po przeskalowaniu współrzędnych 0.3 0.25 0.2 0.15 0.1 0.05 0 1 2 3 4 5 6 7 8 9 2 3 4 5 6 7 8 9 10 101 Źródło: Opracowanie własne przy użyciu oprogramowania MATLAB. Wykres 7 potwierdza, że przy wzroście S1 powyżej 4, SSE gwałtownie maleje. Jedynie dla kilku kombinacji S1 i S2 następuje wzrost SSE, np. S1 = 9 i S2 = 5. 24

ZAKOŃCZENIE Celem projektu było zbudowanie jak najdokładniejszej sieci aproksymującej funkcję dwóch zmiennych z = x 2 + y 2 dla x i y zmieniających się od -1 do 1. Zadanie zostało zrealizowane i otrzymano kilkanaście kombinacji parametrów S1, S2, lr i mc, dla których SSE (błąd średniokwadratowy) był zadowalająco niski. Głównym utrudnieniem technicznym był długi czas realizacji skryptów obciążonych głównie przez 4 pętle, co skutkowało realizacją trwającą około 50 godzin. 25

BIBLIOGRAFIA PRz, KIiA, Sztuczna inteligencja, Laboratorium, Ćw6 Model neuronu, Roman Zajdel [online] [dostęp: 2 kwietnia 2014 r.]. Dostępne w Internecie: http://materialy.przrzeszow.pl/pracownik/pliki/34/sztuczna-inteligencja-cw6-model-neuronu.pdf PRz, KIiA, Sztuczna inteligencja, Laboratorium, Ćw9 Sieć jednokierunkowa wielowarstwowa, Roman Zajdel [online] [dostęp: 2 kwietnia 2014 r.]. Dostępne w Internecie: http://materialy.prz-rzeszow.pl/pracownik/pliki/34/sztuczna-inteligencja-cw9-siecwielowarstw.pdf PRz, KIiA, Sztuczna inteligencja, Laboratorium, Ćw10 Przyśpieszanie procesu uczenia, Roman Zajdel [online] [dostęp: 2 kwietnia 2014 r.]. Dostępne w Internecie: http://materialy.prz-rzeszow.pl/pracownik/pliki/34/sztuczna-inteligencja-cw10-przyspuczenia.pdf Sztuczne sieci neuronowe [online] [dostęp: 3 kwietnia 2014 r.]. Dostępne w Internecie: http://ssn.elektrotechnika.ip.pwsz.edu.pl/nnt/nnt1.php 26

ZESTAWIENIE SPISÓW Spis tabel Tabela 1. Rozkład rezultatów wg. parametru mc... 17 Spis rysunków Rys. 1. Aproksymowana funkcja z = x 2 + y 2 dla x i y zmieniających się od -1 do 1. 2 Rys. 2. Model neuronu... 3 Rys. 3. Sieć jednokierunkowa wielowarstwowa... 4 Rys. 4. Porównanie aproksymowanej funkcji z wygenerowaną... 21 Rys. 5. Błąd średniokwadratowy... 23 Rys. 6. Bezrobocie zróżnicowane sezonowo... 24 27