learnbpm choroba nerek

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ą momentum (learnbpm) uczącą się diagnozowania chorób nerek.

Piotr Galbas

II EFDI

P03

Przedstawienie problemu.

Celem projektu było sklasyfikowanie na podstawie serii danych 120 pacjentów, posiadających objawy chorób zapalenia pęcherza moczowego oraz ostrego zapalenia nerek. Została w tym celu stworzona sieć neuronowa, uczona algorytmem wstecznej propagacji błędu, z użyciem metody momentum.

Przykładowe dane oraz opis problemu przedstawiony został na stronie http://archive.ics.uci.edu/ml/datasets/Acute+Inflammations przez pana doktora Jacka Czerniaka, z Polskiej Akademii Nauk.

Wykorzystane w projekcie dane charakteryzowały się wielkowymiarowością. Każdy pacjent charakteryzował się sześcioma atrybutami, przyjmujących wartości logiki boolowskiej lub liczby zmiennoprzecinkowej. Dane były pełne, nie brakowało żadnych wartości, każdy wiersz danych przedstawiał potencjalnego chorego.

Przykładowa linia danych wraz z opisem:

35,9 no no yes yes yes yes no

35,9 - temperatura pacjenta. Wartość ta mogła należeć do przedziału 35-42°C

Kolejne atrybuty mogły przyjąć wartości prawda/fałsz (yes/no).

no - występowanie nudności

no - ból lędźwi

yes - ciągła potrzeba oddawania moczu

yes - występowanie bólu podczas oddawania moczu

yes - zapalenie cewki moczowej, świąd lub obrzęk wylotu cewki moczowej

Ostatnie dwie wartości były odpowiedzią eksperta z dziedziny badanych chorób:

yes - wystąpienie zapalenie pęcherza moczowego

no - wystąpienie ostrego zapalenia nerek

W celu przeprowadzenia doświadczenia z użyciem sieci neuronowej wielowarstwowej, należało znormalizować dane do właściwego zakresu.

Wartości yes/no, przekształcone zostały w liczby 1/0, natomiast temperatura została znormalizowana wg wzoru:


$$N_{i} = \ \frac{D_{i} - D_{\min}}{D_{\max} - D_{\min}}$$

gdzie:

Di - I-ta dana ze zbioru

Dmin - wartość najmniejsza ze zbioru danych

Dmax - wartość największa ze zbioru danych

Ni - I-ta znormalizowana dana

Dane wyjściowe sprowadzone zostały do wartości z przedziału <1,4> przedstawiających następujące możliwości:

Zapalenie pęcherza moczowego Zapalenie nerek Otrzymana kombinacja
No No 1
Yes No 2
No Yes 3
Yes Yes 4

Omówienie budowy sieci.

Sieci neuronowe są modelami matematycznymi stworzonymi na wzór połączeń nerwowych ludzkiego mózgu. Charakteryzują się możliwością przetwarzania informacji, generalizacji wyników oraz posiadają możliwość samodzielnej nauki. Dzięki temu są w stanie pracować na niepełnych zbiorach danych oraz potrafią zwrócić prawidłowy wynik nawet dla nieznanych wcześniej danych. Są więc szczególnie przydatne podczas rozwiązywania problemów, niemożliwych do rozwiązania tradycyjnymi metodami.

W celu rozwiązania problemu klasyfikacji pacjentów, stworzona została trójwarstwowa sieć neuronowa, przyjmująca różną liczebność neuronów w warstwach pierwszej oraz drugiej. Trzecia warstwą była warstwą wyjścia, posiadającą jeden neuron, ze względu na występowanie tylko jednej wartości wyjścia.

Neuron

Podstawą istnienia sieci neuronowych, także w mózgu człowieka, jest neuron. Jego budowę oraz sposób jego działania przedstawia poniższy schemat:

X1,…Xn są wejściami neuronu. Neuron posiada ich skończoną liczbę, przy czym źródło, z jakiego pochodzą dane są znane. Mogą pochodzić one albo z wejścia systemu, albo są to wyjścia innych neuronów.

Każde z wejść posiada pewną wagę, określającą istotność informacji otrzymywanej z danego źródła. Wszystkie wejścia są sumowane w sumatorze i przekazywane dalej. Występuje tutaj dodatkowa wartość, jaką jest wektor przesunięcia w0 – bias. Wzór sumatora wygląda więc następująco:


$$s = \sum_{i = 1}^{n}{(x_{i}w_{i})} + w_{0}$$

Otrzymana wartość wprowadzona zostaje do elementu nieliniowego, jakim jest funkcja aktywująca. Decyduje ona, czy otrzymana przez neuron informacja jest na tyle istotna, żeby przesłać ją dalej. W projekcie wykorzystywane zostały funkcja liniowa oraz tangensa hiperbolicznego. Przyjęło się, że wartością progową jaką musi przekroczyć s jest wartość 0. Wartość wyjścia neuronu wyraża się wzorem:


y = f(s)

Sieć jednokierunkowa wielowarstwowa

Posiadając wiele neuronów, możliwe jest skonstruowanie wielu rodzajów sieci, posiadających zwartą strukturę. W utworzonej sieci wielowarstwowej, uwzględniony został jednostronny przepływ informacji. Połączenia między kolejnymi warstwami neuronów konstruuje się na zasadzie każdy z każdym, co przedstawia poniższy diagram.

Można wyróżnić tutaj model warstwowy sieci, przy czym poszczególne warstwy nazywane są wejściową, ukrytymi oraz wyjściową. Do działania sieci wykorzystuje się budowę neuronu, a więc każda ze strzałek przedstawia kierunek przepływu informacji, a także posiada swoją wagę. Wykorzystany zostaje również wektor przesunięcia. Wyjście neuronu z poprzedniej warstwy, staje się wejściem wszystkich neuronów warstwy następnej, przy czym do wszystkich rozsyłana jest ta sama informacja. Neuron otrzymujący informację określa jej istotność.

Omówienie metody uczenia się sieci.

Sieci neuronowe potrafią przyjąć pewne dane, przetworzyć je i zwrócić wynik, jednak ich przydatność jest niewielka, jeśli wynik ten będzie niepoprawny. Dlatego też, sieci zostają poddane procesowi uczenia, mającemu na celu poprawę ich skuteczności.

Metoda wstecznej propagacji błędu

Jedną z podstawowych metod uczenia się sieci jest metoda wstecznej propagacji błędu. Poniżej zostały przedstawione wszystkie wzory użyte do tej metody wraz z komentarzami.

Wyjścia każdego z neuronów oznaczone zostaną jako yik. Wzór na wyjście neuronu brzmi:


$$y_{i}^{(k)}\left( t \right) = f\left( s_{i}^{(k)}\left( t \right) \right),\ \ gdzie\ s_{i}^{(k)}\left( t \right) = \sum_{j = 0}^{N_{k}}{w_{\text{ij}}^{(k)}(t)x_{j}^{(k)}(t)}$$

We wzorach jest mowa o i-tym neuronie, znajdującym się w k-tej warstwie, natomiast j jest indeksem sygnału wejściowego. Każdy neuron posiada swoje wagi, stąd wij(k), natomiast sygnały wejściowe występują te same dla całej warstwy, stąd xj(k). Nk oznacza tutaj ilość neuronów warstwy k-tej.

Błąd całej sieci obliczony zostaje wzorem na błąd średniokwadratowy wyrażony wzorem:


$$Q\left( t \right) = \sum_{j = 1}^{P}{\sum_{i = 0}^{N_{L}}{(d_{i}^{(L)} - y_{i}^{(L)})}^{2}}$$

gdzie:

P – ilość wszystkich rekordów danych wejściowych

NL – ilość wszystkich neuronów z warstwy wyjściowej L

Natomiast dla wyznaczenia wartości błędu każdego z neuronów stosuje się jeden z następujących wzorów.


$$Q_{i}^{\left( k \right)}\left( t \right) = \left\{ \begin{matrix} d_{i}^{\left( L \right)}\left( t \right) - y_{i}^{\left( L \right)}\left( t \right),\ \ dla\ k = L \\ \sum_{m = 0}^{N_{k + 1}}{\delta_{m}^{\left( k + 1 \right)}\left( t \right)w_{\text{mi}}^{\left( k + 1 \right)}\left( t \right),\ \ dla\ k = 1,\ldots,L - 1} \\ \end{matrix} \right.\ $$

Warto zauważyć, że w celu obliczenia błędu warstwy poprzedniej, brane są pod uwagę wagi oraz delta δ warstwy następnej. Wzór ten pozwala określić zależność pomiędzy otrzymanym błędem od użytej wagi.


δi(k)(t) = Qi(k)(t)f(si(k)(t))

Dla każdej oprócz ostatniej warstwy neuronów, następuje w tym wzorze rekurencyjne wywołanie błędu Qi(k) dla warstw następnych.

Pochodna bipolarnej funkcji aktywacyjnej tangensa hiperbolicznego przedstawia się następująco:


f(x) = β(1−f2(x))

gdzie β jest współczynnikiem nachylenia funkcji. Im jego wartość jest większa, tym kształt funkcji ma bardziej strome zbocze.

W celu obliczenia nowych wartości wag dla i-tego neuronu, j-tego wejścia, k-tej warstwy, stosuje się następujący wzór:


wij(k)(t+1) = wij(k)(t) + 2ηδi(k)(t)xj(k)(t)

gdzie η jest tutaj współczynnikiem uczenia się sieci.

Należy wspomnieć, iż to właśnie wartości wag są wiedzą jaka została zawarta w danej sieci, dlatego są one tak istotne.

Proces uczenia przebiega według następującego algorytmu:

  1. Na wejście sieci zostają podane wartości rekordu wejściowego. Neurony przetwarzają otrzymane informacje i przekazują dalej do kolejnej warstwy. Procedura trwa, aż wszystkie rekordy danych zostaną przetworzone i na wyjście zostanie zwrócony wektor wyjściowy y.

  2. Obliczony zostaje błąd QiL(t), dla warstwy wyjściowej L.

  3. Korzystając ze wzoru na błąd warstw poprzednich, błąd QiL(t) jest propagowany do tyłu zgodnie z połączeniami neuronów i z uwzględnieniem ich funkcji aktywacji. Czynność trwa, aż zostanie on policzony dla wszystkich neuronów.

  4. Następuje uaktualnienie wag dla wszystkich neuronów.

Algorytm powtarzany jest, aż błąd całej sieci osiągnie ustalony na początku poziom.

Metoda momentum

Z uwagi na fakt, iż metoda wstecznej propagacji błędu jest mało dokładna i trudna do ustabilizowania. W celu zachowania większej stabilności wzbogaca się ją o tzw. momentum. Jest to miara bezwładności zmian opisana wzorem:


ηm(wmn(t) − wmn(t−1))

Przy czym ηm jest tutaj współczynnikiem uczenia momentum, przyjmującym wartości z przedziału [0,1]. Wzór ten dodaje do wzoru na nową wagę w’mn różnicę między wagą obecną a poprzednią, pomnożoną przez ηm. Jeżeli w kolejnych iteracjach kierunek zmiany wagi był ten sam, zmiana zostanie przyśpieszona. Natomiast w przypadku odwrotnym składnik momentum spowoduje zahamowanie gwałtownych zmian. Sieć zyskuje na stabilności i dla pewnych przypadków pozwala szybciej osiągnąć zamierzony rezultat. Składnik ten jest szczególnie zauważalny, gdy podczas procesu nauki błąd zbliża się do minimum lokalnego gradientu funkcji. Jego wartość jest wówczas tak niska, że człon ten staje się dominującym. Pozwala to na wyjście z minimum i kontynuowanie procesu uczenia.

W różnych źródłach przyjęło się, że współczynnik ηm powinien przyjmować wartość 0,95 lub 1-ηlr. Podczas doświadczenia jednak, w celach eksperymentalnych przyjmuje on różne wartości.

Kod programu, faza uczenia się sieci.

%wyczyszczenie środowiska, wyłączenie ostrzeżeń oraz uruchomienie skróconego zapisu liczb

clear all

nntwarn off

format compact

%wczytanie danych, zapis do zmiennych P danych wejściowych, T danych wyjściowych

file = dlmread ('dane4.txt');

P = file(:,1:6)';

T = file(:,7)';

%zapis do zmiennej R ilości wejść na podstawie ilości wierszy w macierzy P

[R,Q] = size(P);

%zapis do zmiennej S3 ilości neuronów warstwy wyjściowej na podstawie ilości wierszy w macierzy T

[S3,Z] = size(T);

%zadeklarowanie maksymalnej liczby epok, oraz błędu docelowego

max_epoch=10000;

err_goal=.25;

%zapis w pętlach wartości dla poszczególnych zmiennych lr,S1,S2,mc

for lr=[0.1 0.01 0.001 0.0001],

for S1=10:10:120,

for S2=10:10:S1,

for mc=[0.01 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.99],

%zainicjowanie poszczególnych warstw neuronów oraz macierzy ich wag i biasów

[W1,B1] = nwtan(S1,R);

[W2,B2] = nwtan(S2,S1);

[W3,B3] = rands(S3,S2);

%stworzenie i wyzerowanie macierzy zmian wag i biasów dla poszczególnych warstw

dW1=zeros(size(W1)); dB1=zeros(size(B1));

dW2=zeros(size(W2)); dB2=zeros(size(B2));

dW3=zeros(size(W3)); dB3=zeros(size(B3));

%główna pętla ucząca

for epoch=1:max_epoch,

%obliczenie odpowiedzi neuronów kolejnych warstw

A1 = tansig(W1*P,B1);

A2 = tansig(W2*A1,B2);

A3 = purelin(W3*A2,B3);

%obliczenie różnicy błędu oczekiwanego od otrzymanego

E = T -A3;

%obliczenie delty dla wszystkich neuronów kolejnych warstw

D3 = deltalin(A3,E);

D2 = deltatan(A2,D3,W3);

D1 = deltatan(A1,D2,W2);

%wyliczenie nowych różnic wag i biasów dla neuronów warstwy pierwszej

[dW1,dB1] = learnbpm(P,D1,lr,mc,dW1,dB1);

%uaktualnienie wag i biasów

W1 = W1 + dW1;

B1 = B1 + dB1;

%wyliczenie nowych różnic wag i biasów dla neuronów warstwy drugiej

[dW2,dB2] = learnbpm(A1,D2,lr,mc,dW2,dB2);

%uaktualnienie wag i biasów

W2 = W2 + dW2;

B2 = B2 + dB2;

%wyliczenie nowych różnic wag i biasów dla neuronów warstwy trzeciej

[dW3,dB3] = learnbpm(A2,D3,lr,mc,dW3,dB3);

%uaktualnienie wag i biasów

W3 = W3 + dW3;

B3 = B3 + dB3;

%obliczenie sumy kwadratów błędów

SSE = sumsqr(E);

%sprawdzenie warunku zakończenia procesu uczenia

if SSE < err_goal,

epoch = epoch - 1;

break,

end,

end

%obliczenie procentowej wartości uczenia się sieci

ans = 100*(1-sum((abs(T-A3)>.5)')/length(T));

%zapis do zmiennej vars wszystkich zmiennych potrzebnych oraz uzyskanych podczas

%procesu uczenia

vars = [S1 S2 lr mc epoch SSE ans];

%wypisanie powyższych zmiennych na ekran, zapis do pliku

[S1 S2 lr mc epoch SSE ans]

dlmwrite('WynikiEkspZnormalizowane.txt', vars, '-append', 'delimiter', '\t', ...

'precision', 4);

end

end

end

end

Opis użytych funkcji:

nwtan – wygenerowanie macierzy losowych wartości przy użyciu metody Nguyen-Widrowa, stosując funkcję tangensa hiperbolicznego.

[W1,B1] = nwtan(S1,R);

Zwraca dwie macierze: W1 o wymiarze S1xR, oraz B1 o wymiarze S1x1

rands – wygenerowanie macierzy losowych wartości o jednorodnym rozkładzie z zakresu [-1,1]

[W3,B3] = rands(S3,S2);

Zwraca dwie macierze: W3 o wymiarze S3xS2, oraz B3 o wymiarze S3x1

purelin – funkcja liniowa stosowana jako f. aktywacji neuronów warstwy wyjściowej

tansig – funkcja tangensa hiperbolicznego stosowana jako f. aktywacji neuronów warstw ukrytych

A2 = tansig(W2*A1,B2);

A3 = purelin(W3*A2,B3);

gdzie:

A – macierze wartości wyjściowych poszczególnych warstw neuronów

W – macierze wag

B – wektor biasu

deltalin – liniowa funkcja delta

deltatan – funkcja delta dla funkcji tangensa hiperbolicznego

D3 = deltalin(A3,E);

D2 = deltatan(A2,D3,W3);

gdzie:

A – macierze wartości wyjściowych poszczególnych warstw neuronów

D – macierze pochodnych błędów poszczególnych warstw

E – macierz błędu sieci

W3 – macierz wag warstwy trzeciej

learnbpm – funkcja ucząca metodą wstecznej propagacji błędu z metodą momentum

[dW1,dB1] = learnbpm(P,D1,lr,mc,dW1,dB1);

gdzie,

P – macierz wartości wejściowych sieci

D1 – macierz pochodnych błędów dla warstwy pierwszej neuronów

lr – współczynnik uczenia się sieci

mc – współczynnik momentum

dW1 – macierz przyrostów wag dla warstwy pierwszej neuronów

dB1 – macierz biasu dla warstwy pierwszej neuronów

Faza eksperymentów, przedstawienie wyników.

Z uwagi na stosunkowo niewielką liczbę rekordów danych wejściowych, sprawdzone zostało całe możliwe spektrum zmian zmiennych S1,S2,lr,mc. Miało to na celu łatwiejszą zauważalność zależności pomiędzy ich wartościami, a wynikiem.

Eksperyment podstawowy

Pomiary przeprowadzone zostały dla poniższych założeń:

S1 – ilość neuronów warstwy wejściowej wybierana z zakresu <10,20,…,120>

S2 – ilość neuronów warstwy ukrytej wybierana z zakresu <10,20,…,S1>

lr – współczynnik uczenia przyjmował jedną z czterech wartości: 0.1, 0.01, 0.001, 0.0001

mc – współczynnik momentum przyjmował wartości 0.01, 0.1, 0.2, … , 0.8, 0.9, 0.99

Ważnym założeniem było, aby ilość neuronów w. ukrytej była nie większa od ilości w warstwie wejściowej. Poniżej przedstawione zostały dane statystyczne zgromadzone podczas analizy zgromadzonych informacji, a po nich prezentacja wyników na wykresach.

Ilość uzyskanych wyników: 4576 (1144 rekordy na każdy ze współczynników uczenia lr).

Skutecznością nazwana została liczba prób, które zwróciły wynik, dzieloną przez ilość prób.

Średnia liczba epok jest to suma liczby epok dla każdej próby przez ilość prób.

lr 0,1 lr 0,01 lr 0,001 lr 0,0001
najmniejszy błąd 54,099 0,0516 0,1344 0,1777
najmniejsza liczba epok 10000 29 24 26
skuteczność [w %] 5,7692308 19,75524 68,26923 98,3391608
średni wynik [w %] 2,443042 17,30834 67,34701 97,989493
średnia liczba epok 10000 8600,507 3587,298 1545,14161
10 najmniejszych błędów
lr
1
2
3
4
5
6
7
8
9
10
10 najmniejszych epok
1
2
3
4
5
6
7
8
9
10

Najlepsze kombinacje:

S1 S2 lr mc epoki SSE wynik
80 20 0,1 0,99 10000 54,099 50,83 %
90 10 0,01 0,9 71 0,208 100 %
50 40 0,001 0,6 24 0,1557 100 %
120 60 0,0001 0,7 26 0,2072 100 %

Wykres przedstawiających 100% nauczenie się danych przez sieć wygląda następująco:

S1 = 120, S2 = 120, lr = 0,001, mc = 0,9

Na wykresach przedstawiających wartość błędu w czasie trwania doświadczenia, można wyraźnie zauważyć jaki wpływ na jego zmianę ma współczynnik momentum. Liczba epok podana na górze przedstawia długość trwania symulacji do momentu osiągnięcia założonego błędu.

S1=90,S2=10,lr=0,001, mc = 0,1 S1=90,S2=10,lr=0,001, mc = 0,4

S1=60,S2=60,lr=0,001, mc = 0,6 S1=60,S2=60,lr=0,001, mc = 0,8

S1=120,S2=120,lr=0,001, mc = 0,9 S1=60,S2=60,lr=0,001, mc = 0,99

Lr 0,1, podane wartości są maksymalnymi z pośród znalezionych:

Lr 0,01, podane wartości są maksymalnymi z pośród znalezionych:


Lr 0,001, podane wartości są średnią z pośród znalezionych:

Lr 0,0001, podane wartości są średnią z pośród znalezionych:

Wnioski:

Ze względu na bardzo niską skuteczność oraz średni wynik dla pierwszych dwóch serii, ich wykresy narysowane zostały w oparciu o najwyższą znalezioną wartość. Na podstawie powyższych danych zauważyć można, że pomimo iż próby zawierające najmniejszy błąd oraz najmniejszą ilość epok występują dla współczynnika uczenia lr=0,001, to dla lr=0,0001 uzyskana została dużo większa skuteczność, zaś średnia ilość potrzebnych epok jest ponad dwukrotnie mniejsza.

Inną obserwacją jaką można zaobserwować jest fakt, iż dla większego współczynnika uczenia, sieci odzyskiwała stabilność dopiero dla momentum równego 0,99. Poziom ten zmniejszał się, gdy malała liczba neuronów warstwy ukrytej. Dla lr=0,1, powyżej 30 neuronów na pierwszej warstwie niemożliwe było uzyskanie wyniku dla mc=0,99 jeżeli ilość neuronów w warstwie ukrytej była większa niż 30.

Dla lr=0,01 tylko w niektórych przypadkach współczynnik mc=0,99 nie zwrócił żadnego rezultatu. Natomiast dla odpowiednio niskiej liczby neuronów warstwy ukrytej także niższe wartości momentum dają rezultat.

Dla lr=0,001 występuje warte dostrzeżenia zjawisko. Otóż, wraz ze wzrostem liczby neuronów na warstwie wejściowej, poziom momentum dla którego sieć uzyskuje stabilność rośnie. Przykładowo dla (S1/S2) 100/30 sieć odzyskuje stabilność dla mc=0,3, natomiast dla 100/100 dopiero dla mc=0,8.

Neurony z zakresu 1-25.

Kolejnym przeprowadzonym eksperymentem było zbadanie procesu uczenia się sieci dla małej ilości neuronów: z zakresu 1-5, a także 5-25. Celem tego doświadczenia było sprawdzenie, czy sieć neuronowa potrzebuje dużej ilości neuronów, aby poprawnie rozwiązywać postawiony przed nią problem klasyfikacji. Większa ilość neuronów zwiększa bowiem ilość potrzebnych do wykonania obliczeń oraz wydłuża się czas oczekiwania na odpowiedź.

lr 0,1 lr 0,01 lr 0,001 lr 0,0001
najmniejszy błąd 0,0827 0,0999 0,2245 0,1777
najmniejsza liczba epok 172 29 31 45
skuteczność [w %] 11,912226 43,88715 84,95298 94,0438871
średni wynik [w %] 5,67116 39,39897 82,97539 92,789906
średnia liczba epok 9908,0251 6699,197 2327,708 4113,84326

lr = 0,1, dla najwyższych wyników w serii:

lr = 0,01, dla średnich, a następnie najwyższych i zarazem jedynych wartości:

lr = 0,001, dla średnich wartości prób:


lr = 0,0001, dla średnich wartości prób:

Najlepsze kombinacje dla 1-5:

S1 S2 Lr mc epoki SSE wynik
3 3 0,1 0,99 10000 6,552 91,6699 %
4 3 0,01 0,5 29 0,2101 100 %
4 4 0,001 0,9 122 0,25 100 %
5 3 0,0001 0,8 45 0,2112 100 %

Najlepsze kombinacje dla 5-25:

S1 S2 lr mc epoki SSE wynik
20 15 0,1 0,99 172 0,0971 100 %
10 10 0,01 0,8 39 0,2335 100 %
15 15 0,001 0,1 31 0,2462 100 %
5 5 0,0001 0,6 75 0,2462 100 %

Wnioski:

Przyglądając się wynikom można zauważyć, że kilka z pośród najlepszych wyników z eksperymentu podstawowego mieści się w badanym powyżej przedziale. Znajdują się one jednak w górnej części badanego przedziału i w porównaniu z pozostałymi wynikami z tej serii są to wyjątki. Można przypuszczać, że przedział dla którego sieć pracuje na wysokim poziomie znajduje się powyżej zakresu 25 neuronów na warstwę.

Dodatkową obserwacją jest trudność w uzyskaniu stabilności sieci dla małych ilości neuronów. Bardzo łatwo można ją natomiast stracić, toteż współczynnik uczenia dla tego typu sieci musi być stosunkowo mały. Przyglądając się wysokim wynikom statystycznym należy pamiętać, że na każdy z badanych współczynników uczenia przypada tylko 319 rekordów, a więc prawie czterokrotnie mniej niż w eksperymencie podstawowym.

Zależność S2 ≥ S1.

Trzeci eksperyment polegał na zaprezentowaniu efektów zastosowania większej ilości neuronów na warstwie ukrytej w stosunku do warstwy wejściowej. Symulacja została przeprowadzona dla ilości neuronów z zakresu 1-25 na warstwę, ponieważ wraz ze zbliżaniem się do końca badanego zakresu można zauważyć w jakim kierunku będzie podążać dalszy rozwój sieci.

lr 0,1 lr 0,01 lr 0,001 lr 0,0001
najmniejszy błąd 0,07219 0,08878 0,1961 0,2478
najmniejsza liczba epok 201 40 50 299
skuteczność [w %] 10,03135 39,4984326 100 100
średni wynik [w %] 5,684263 32,9020376 98,82699 99,75705
średnia liczba epok 9817,781 7399,95298 1442,906 4777,361
10 najlepszych błędów
lr
1
2
3
4
5
6
7
8
9
10
10 najlepszych epok
1
2
3
4
5
6
7
8
9
10


lr = 0,1, dla najwyższych wyników w serii:

lr = 0,01, dla średnich wartości prób:


lr = 0,001, dla średnich wartości prób:

lr = 0,0001, dla średnich wartości prób:

Najlepsze kombinacje dla 1-5:

S1 S2 Lr mc epoki SSE wynik
3 3 0,1 0,99 387 0,133 100
4 4 0,01 0,8 40 0,2368 100
3 5 0,001 0,2 92 0,2315 100
4 4 0,0001 0,1 938 0,2498 100

Najlepsze kombinacje dla 5-25:

S1 S2 lr mc epoki SSE wynik
5 20 0,1 0,99 201 0,1913 100
10 10 0,01 0,8 44 0,2232 100
20 25 0,001 0,7 52 0,2415 100
20 25 0,0001 0,2 299 0,2491 100

Wnioski:

Porównując powyższe dane z poprzednim eksperymentem, otrzymane zostały zaskakujące wnioski. O ile dla liczby neuronów 1-5 i lr= 0,1-0,01 wyniki są podobne, to dla lr= 0,001-0,0001 oraz tej samej liczby neuronów duże lepsze wyniki osiąga eksperyment w którym S2≥S1.

Najlepsze kombinacje wyłonione podczas próby wykazują tendencję do równej bądź niewiele większej liczby neuronów na warstwie ukrytej. Chociaż dla mniejszych wartości lr wyniki są lepsze, to ilość epok potrzebna do sukcesu bywa bardzo zróżnicowana, średnia wynosi bowiem 6610 epok. W porównaniu z wynikami uzyskanymi dla większego zakresu liczba ta jest duża.

Podczas gdy dla lr=0,001, S1=5 i zależności S1≥S2 sieć ma trudności z odzyskaniem stabilności, sieć o S2=5 i zależności S2≥S1 radzi sobie wzorcowo. Nie występują w nim żadne problemy ze stabilnością. Dodatkowo średnia liczba epok w przedziale 1-5 wynosi 4158 dla S1≥S2, oraz 2474 dla S2≥S1. Uzyskanie mniejszego błędu dla eksperymentu S2≥S1 wiąże się zaś ze zjawiskiem interpolacji pośród neuronów, bowiem nadmiarowe neurony warstwy ukrytej wspomagają proces uczenia się neuronów warstwy poprzedniej.

Podsumowując, dla małej liczby neuronów eksperyment w którym S2≥S1 uzyskuje dużo lepsze wyniki. Dla pełnego przedziału 1-25 neuronów na warstwę następuje natomiast podział: lepszą skuteczność oraz wyniki uzyskuje S2≥S1, natomiast mniejszą liczbę epok (nawet o 85% dla lr=0,0001) i mniejszy błąd S1≥S2. Przy większej ilości neuronów i danych mniejsza liczba epok przekłada się na krótszy czas uzyskania odpowiedzi, toteż w celu otrzymania dokładniejszych wyników w krótszym czasie autor polecałby zastosowanie zależności S1≥S2. Pełne porównanie obu eksperymentów przedstawione zostało poniżej:

Przedział 1-25 neuronów lr 0,1 lr 0,01 lr 0,001 lr 0,0001
S1≥S2 S2≥S1 S1≥S2 S2≥S1
najmniejszy błąd 0,0827 0,07219 0,0999 0,08878
najmniejsza liczba epok 172 201 29 40
skuteczność 11,912 10,031 43,887 39,498
średni wynik 5,671 5,684 39,399 32,902
średnia liczba epok 9908,025 9817,781 6699,197 7399,953

Dane nieznormalizowane

Wszystkie powyższe eksperymenty zostały wykonane dla danych znormalizowanych. Następny etap polegał na sprawdzeniu odpowiedzi sieci dla danych nieznormalizowanych. Miał on na celu podkreślić jak dużą wagę na poprawność wyników mają prawidłowo znormalizowane dane wejściowe. Zwiększona została również górna granica liczby epok do 20000.

lr 0,1 lr 0,01 lr 0,001 lr 0,0001
najmniejszy błąd 29,99 0,2497 0,2079 0,2496
najmniejsza liczba epok 20000 20000 668 5289
skuteczność [w %] 10,03135 46,39498 99,37304 93,73041
średni wynik [w %] 5,098934 23,89605 53,88931 69,03959
średnia liczba epok 20000 20000 19184,98 19104,27
10 najlepszych błędów
lr
1
2
3
4
5
6
7
8
9
10
10 najlepszych epok
1
2
3
4
5
6
7
8
9
10

Wnioski:

Na podstawie danych statystycznych można zauważyć, iż wymagany jest tutaj bardzo ostrożny proces uczenia, bowiem dla zbyt dużego współczynnika uczenia praktycznie niemożliwe jest uzyskanie przez sieć poprawnej odpowiedzi. Większość z nich znajduje się na granicy stabilności sieci. Dodatkowo w przeważającej liczbie przypadków sieć potrzebowała kilku do kilkunastu tysięcy epok, aby nauczyć się danych.

W eksperymencie tym można bardzo wyraźnie zauważyć, że każdy kto przeprowadza doświadczenia z użyciem sieci neuronowych, powinien w pierwszej kolejności zwrócić uwagę na format danych wejściowych, bowiem brak normalizacji lub ich błędna normalizacja potrafi zwiększyć potrzebną ilość epok wielokrotnie, a także łatwo całkowicie zdestabilizować cały układ.

Podsumowanie, wnioski, przemyślenia.

Podczas przeprowadzania doświadczenia pojawiły się duże problemy z uzyskaniem stabilności obliczeń sieci. Bardzo dużo prób dla lr=0,1-0,01 dawało wynik negatywny, ponieważ błąd SSE przyjmował wartość NaN. Uznane zostało to za brak stabilności sieci dla zastosowanych konfiguracji. Główną przyczyną tej sytuacji była nieadekwatna wartość momentum do zastosowanego współczynnika nauczania lr. Dla wielu przypadków poprawna jest zależność mc = 1-lr. Odniesiono również wrażenie, iż współczynnik momentum pomimo iż służy do uzyskania większej stabilności sieci, w wielu przypadkach przysparzał również wielu trudności z otrzymaniem pozytywnych rezultatów. Dodatkowo, znacznie zwiększał ilość możliwych kombinacji, ponieważ każda z kombinacji S1,S2 i lr wymagała sprawdzenia aż 11 przypadków. Dało to w sumie 7128 prób które należało skatalogować, sformatować i wykonać na nich operacji.

Liczba ta powstała w wyniku redukcji rozpatrywanych przypadków, ponieważ początkowo krok zmiany ilości neuronów wynosił 5, co w rezultacie dałoby 13200 rekordów jedynie dla głównego doświadczenia. Chcąc przeprowadzić również pozostałe doświadczenia liczbę tą należy szacować na około 20 tysięcy rekordów. Biorąc pod uwagę ograniczony czas na wykonanie projektu, bowiem uzyskanie obecnych wyników zajęło około 14 dni całodniowych obliczeń, autor był zmuszony zwiększyć wartość kroku zmiany liczby neuronów.

Analizując otrzymane wyniki, można dojść do wniosku, iż liczba 120 neuronów na warstwę była wystarczająca, ponieważ dla ostatnich badanych kombinacji można było zauważyć rosnącą liczbę epok potrzebną do nauczenia sieci.

Podsumowując, eksperyment ten miał za zadanie poprawnie sklasyfikować otrzymane w ciągu uczącym dane pacjentów, u których występowało podejrzenie jednej z chorób nerek. Po przeprowadzeniu dokładnych i wyczerpujących badań stwierdza się zrealizowanie postawionego zadania. Dodatkowo zostały zbadane wszelkie możliwości alternatywnego podejścia do przedstawionego problemu. Uzasadniony został powód ich niestosowania podczas rozwiązywania podobnych do przedstawionego wyżej problemu. Należy jednak pamiętać, że nauka o sieciach neuronowych rozwija się bardzo szybko, stąd też nie istnieją jak dotąd sformułowane zasady dotyczące ich budowy oraz zależności zachodzących między poszczególnymi elementami. Każdy problem należy rozpatrywać indywidualnie, ponieważ w niektórych przypadkach niezalecane metody mogą okazać się skuteczniejsze od powszechnie stosowanych.

Bibliografia

  1. Leszek Rutkowski, „Metody i techniki sztucznej inteligencji”, wydawnictwo PWN

  2. http://www.neuron.kylos.pl/pliki/jednokier/jednokier4.html

  3. http://home.agh.edu.pl/~vlsi/AI/backp_t/backprop.html

  4. http://sztuczna-inteligencja.co-za.info.pl/Sieci%20neuronowe.html


Wyszukiwarka

Podobne podstrony:
Dieta w chorobach nerek
III WWL DIAGN LAB CHORÓB NEREK i DRÓG MOCZ
Choroby nerek w ciąży
1 Podstawy diagnostyki w chorobach nerek 2005
Podział chorób nerek z elementami patofizjologii
ciaza u kobiet z chorobami nerek
Wybrane choroby nerek i uk adu oddechowego
Choroby nerek i PIH
Cukrzycowa choroba nerek
diagnostyka chorob nerek id 134 Nieznany
Przewlekła choroba nerek profilaktyka i hamowanie progresji
Choroby nerek, Pielęgniarstwo, Nefrologia i dialozoterapia
Białko Klotho a przewlekła choroba nerek
Choroby nerek
Żywienie w chorobach nerek
Przewlekła Choroba Nerek (2)
Przewlekla Choroba Nerek Transplantacje nerek 2013
Groźne choroby nerek

więcej podobnych podstron