Zadanie 2: Perceptron wielowarstwowy

Transkrypt

Zadanie 2: Perceptron wielowarstwowy
Informatyka, studia dzienne, inż. II st.
semestr VI
Inteligentna analiza danych
2010/2011
Prowadzący: mgr Michał Pryczek
środa, 8:30
Data oddania:
Ocena:
Grzegorz Graczyk 150875
Michał Moroz
150946
Zadanie 2: Perceptron wielowarstwowy∗
1. Cel
Celem zadania jest implementacja i zbadania prostej sieci neuronowej.
Implementacja składa się ze skalowalnej sieci neuronowej wykorzystującej
wsteczną propagację błędów jako metodę nauki. Celem części badawczej jest
zaproponowanie sieci zdolnej rozpoznawać zbiór danych Iris.
2. Wprowadzenie
2.1. Wstęp
Głównym elementem sieci neuronowych są neurony przetwarzające. Każdy neuron posiada dowolną liczbę wejść oraz jedno wyjście (które może jednak trafić na kilka wejść innych neuronów. Neurony są pogrupowane w warstwy, gdzie każde dwie sąsiednie warstwy są połączone iloczynem kartezjańskim - na wejście neuronu trafiają wyjścia wszystkich neuronów z warstwy
poprzedniej.
2.2. Oznaczenia
—
—
—
—
|x| - ilość wejść danego neuronu
xi - i-te wejście danego nauronu
Y - wyjście danego neuronu
wi - waga i-tego wejścia danego neuronu
∗
SVN: https://serce.ics.p.lodz.pl/svn/labs/iad/atmp_sr0830/bazant/lab2
1
— B - wartość błędu osiągniętego przez dany neuron
— |y| - ilość neuronów w warstwie następującej
— bi - wartość błędu osiągniętego przez i-ty neuron na którego wejście trafia
wyjście danego neuronu
— Wi - waga wejścia powiązanego z wyjściem danego neuronu i-tegu neuronu
w warstwie następującej
— f - funkcja aktywacji danego neuronu - w rozważanej sieci f (x) = 1+e1−x .
— f 0 - pochodna funkcji f
— Vi - wartość oczekiwana na i-tym wyjściu sieci
— η - współczynnik nauki
— µ - współczynnik momentum
2.3. Przetwarzanie
Proces przetwarzania każdego neuronu wymaga obliczonych wartości każdego wejścia. Wówczas wyjście danego neuronu dane jest wzorem
|x|
X
Y = f(
w i xi )
i=1
W wypadku neuronów wejściowych ich wyjście jest wejściem całej sieci,
zaś w wypadku neuronów wyjściowych - ich wyjście jest wyjściem sieci.
2.4. Wsteczna propagacja błędów
W wypadku wstecznej propagacji błędów proces nauki polega na poczliczeniu błędu każdego z neuronów poczynając od neuronów wyjściowych.
Wartość błędu w kolejnych warstwach jest zależna od błędów neuronów w
warstwie po niej następującej. Następnie wartość błędu jest wykorzystywana
do modyfikacji wag wejść danej warstwy. Ponieważ wagi są wykorzystywane
w czasie obliczania błędu należy wybrać czy błąd ma być liczony na wagach
początkowych dla procesu przetwarzania czy może już zmodyfikowanych.
Błąd dla neuronów warstwy wyjściowej jest liczony jako:
B = (Y − Vi ) · f 0 (
|x|
X
w i xi )
i=1
Błąd dla pozostałych neuronów przetwarzających:
|y|
X
B=(
0
|x|
X
Wi bi ) · f (
i=1
x i wi )
i=1
Następnie dla każdego i-tego wejścia modyfikujemy wagę używając wzorów:
∆wi = −ηBxi + µ∆wiprev
, gdzie ∆wiprev to wartość ∆wi z poprzedniej iteracji procesu nauki.
2
3. Opis implementacji
Implementacja została wykonana w języku python. Główną klasą jest
klasa Network która zawiera pewną ilość klas Layer, które zawierają klasy
Neuron. Taka struktura klas jest dosłowną interpretacją budowy sieci neuronowych. Ponadto program zawiera klasy Config oraz Logger, które są związane z interfejsem użytkownika.
W implementacji wszystkie neurony są traktowane jednakowo jako neurony przetwarzające. Klasa sieci wykonuje te operacje, które w teorii byłyby
przeznaczone dla neuronów wejściowych oraz część operacji neuronów wyjściowych. Również klasa sieci jest klasą, która nadzoruje cały proces uczenia.
Efektem tej implementacji jest całkowite zamknięcie warstw i neuronów neurony nie wiedzą nic o istnieniu innych neuronów, zaś warstwy wiedzą
tylko o neuronach z których się składają.
Sposób wywołania aplikacji został zaimplementowany prawie w całości
zgodnie z opisem polecenia. Jedyną różnicą jest działanie opcji -b/–bias. Jej
obecność jest nieistotna przy wczytywaniu sieci z pliku, zaś w wypadku generowania sieci powstaje sieć zawierająca jedynie jedną warstwę neuronów przetwarzających, zależna od opcji bias. Ponadto dodano opcję -p/–plot ¡ścieżka¿
zapisująca dane o błędzie w każdej badanej epoce bez żadnych komentarzy
co pozwala na generowanie wykresów.
Ponieważ podejście obiektowe jak i wykorzystanie języka skryptowego
wpłynęło na wydajność aplikacji została przygotowana i wykorzystana do
części obliczeń druga wersja aplikacji w języku c++. Dzięki potraktowaniu
sieci jako trójwymiarowej tablicy oraz zmniejszeniu funkcyjności aplikacja ta
mogła być użyta do zbadania większej ilości epok niż pierwsza wersja.
4. Materiały i metody
4.1. Część badawcza 1
Badanie polegało na nauce sieci rozpoznawania i kopiowania wzorców 4
bitowych z jednym bitem 1 oraz trzema 0.
Badania były wykonywane zgodnie z wymaganiami zadania: sieć składała
się 2 warstw neuronów przetwarzających - warstwy 2 neuronowej oraz warstwy z 4 neuronami wyjściowymi. Wszystkie wagi generowane były w sposób
losowy z przedziału (−1, 1).
Przeprowadzono 7 eksperymentów różniących się parametrem uczenia sieci, momentum oraz obecnością biasu. Poniższa tabelka przedstawia konfigurację eksperymentów:
3
Nr
1
2
3
4
5
6
7
Ni
0.9
0.6
0.2
0.9
0.2
0.9
0.9
Mi Bias
0.0
+
0.0
+
0.0
+
0.6
+
0.9
+
0.0
0.6
-
4.2. Część badawcza 2
Badanie polegało na nauce sieci rozpoznawania gatunku kwiatów używając dostępnej bazy danych ”Iris”. Baza zawiera 150 wpisów z których każdy
należy do jednego z 3 gatunków. Wejściem są parametry rzeczywiste opisujące
kolejno długość i szerokość działek kielicha oraz długość i szerokość płatków
korony. Jako wyjście oczekiwano 3 bitowego wektora z jednym bitem 1 odpowiadający danemu gatunkowi kwiatów. Przeprowadzano szereg badań,
który miał określić jaka sięć najlepiej rozwiąże ten problem.
Zbiór badawczy przedstawia ją następujące wykresy. Poza 3 gatunkami
kwiatów dodatkowo oznaczono 1 konkretny kwiat, który był problematyczny
dla badanych sieci.
4
Bazując na wynikach z pierwszej części badawczej wszystkie badania przeprowadzane były na sieciach z neuronem obciążającym. Przeprowadzone badania obejmowały sieci różnych konfiguracji i dla różnych parametrów nauki z
których duża część nie zakończyła się pełnym nauczeniem sieci. Z tego powodu w sprawozdaniu zostaną podane dokładne wyniki głównie tych testów dla
których nauka zakończyła się powodzeniem oraz mały podzbiór pozostałych
w celu stwierdzenia z jakich przyczyn nauka nie zakończyła się powodzeniem.
5
5. Wyniki
5.1. Część badawcza 1
Poniższe tabelki przedstawiają maksymalny błęd osiągniętegy w kolejnych epokach. Pierwsza tabelka przedstawia pełny zakres danych, zaś druga
zbiżenie fragmentu w którym nastąpiła główna część uczenia.
5.2. Część badawcza 2
Wszystkie obliczenia przy podawaniu danych w stałej kolejności zakończyły się niepowodzeniem. Każdą konfigurację sieci testowano po około 5 razy
- w większości przypadków jeśli nauczenie sieci udało się przynajmniej raz
udało się 2 lub 3 razy.
6
Budowa sieci
Współczynnik nauki
Współczynnik momentum
Średni błąd w 100000 epoce
Maksymalny błąd w 100000 epoce
4-2-3
0.2
0.6
0.012839
0.927193
Budowa sieci
Współczynnik nauki
Współczynnik momentum
Średni błąd w 100000 epoce
Maksymalny błąd w 100000 epoce
4-3-3
0.2
0.6
0.012846
0.930069
7
Budowa sieci
Współczynnik nauki
Współczynnik momentum
Średni błąd w 100000 epoce
Maksymalny błąd w 100000 epoce
4-4-3
0.2
0.6
0.005307
0.593558
Budowa sieci
Współczynnik nauki
Współczynnik momentum
Średni błąd w 100000 epoce
Maksymalny błąd w 100000 epoce
4-7-3
0.2
0.6
0.005297
0.586777
8
Budowa sieci
Współczynnik nauki
Współczynnik momentum
Średni błąd w 100000 epoce
Maksymalny błąd w 100000 epoce
4-15-3
0.3
0.6
0.000003
0.000140
Budowa sieci
Współczynnik nauki
Współczynnik momentum
Średni błąd w 100000 epoce
Maksymalny błąd w 100000 epoce
4-3-4-3
0.1
0.6
0.000004
0.000230
9
Budowa sieci
Współczynnik nauki
Współczynnik momentum
Średni błąd w 100000 epoce
Maksymalny błąd w 100000 epoce
4-3-4-3
0.1
0.8
0.168064
0.392982
6. Dyskusja
Pierwsza część pozwoliła stwierdzić, że obecność biasu jest niezbędna do
uzyskania w pełni poprawnych wyników sieci. Ponadto w wypadku prostych
problemów większe współczynniki poprawiały szybkość uczenia się sieci. Możemy domyślać się iż w tak prostych przypadkach sieć ma zbyt małą liczbę
możliwości błędnego uczenia się - w skomplikowanych przypadkach tak duże
współczynniki mogą prowadzić do uczenia się nowych rzeczy kosztem zapominania starych.
Wyniki otrzymane w części drugiej prowadzą do kilku wniosków. Ponieważ sieć nie uczyła się za każdym razem poprawnego rozpoznawania wszystkich danych możemy stwierdzić, że wynik w pewnym stopniu zależy od stanu
początkowego sieci. Z drugiej strony dla prostszego przypadku takiego jak
w części pierwszej sieć uczyła się bez większych problemów. Znając zasadę
działania sieci neuronowych możemy wysnuć teorię, że sieć mogłaby działać skuteczniej, gdyby zacząć od nauczenia jej rozpoznawania przeciętnych
przedstawicieli określonych gatunków.
Ponadto obserwacje jednoznacznie wskazywały iż ważna jest losowa kolejność podawania wzorców. Również zaobserwowano, że w wypadku sieci
posiadających jedną warstwę ukrytą skuteczność sieci była zależna od ilości neuronów, które ta warstwa zawierała. W wypadku sieci zawierających
2 lub 3 neurony sieć źle rozpoznawała kilka przypadków. W wypadku sieci
zawierającej 4 neurony sieć źle rozpoznawała pojedyńczy przypadek oznaczony na wykresach ze wszystkimi danymi (maksymalny błąd podzielony na
10
liczbę danych w jednym pokoleniu był niemal równy średniemu błędowi).
Podobnie sieci zawierającej 7 neuronów nie udało się poprawnie rozwiązać
tego przypadku. Dopiero sieci 4-15-3 w 70000 pokoleniu udało się rozpoznać
i zapamiętać ten przypadek.
Poprawnego rozpoznania udało się dokonać również sieci 4-3-4-3. Na tej
samej sieci sprawdzono jak zadziała zwiększenie współczynnika momentum
- okazało się, że zbyt duży współczynnik sprawia iż sieć nie będzie w stanie
się nauczyć zaś bład nawet przy 100000 epoce się nie stabilizował.
7. Wnioski
— Obecność biasu, podobnie jak losowanie przypadków testowych jest niemal niezbędne do poprawnego działania sieci.
— Współczynnik momentum wpływa na szybkość uczenia w większym stopniu niż współczynnik nauki.
— Wymagany stopień skomplikowania budowy sieci jest powiązany z trudnością problemu.
— Stan początkowy sieci wpływa w pewien sposób na możliwości jej nauki.
Zwiększenie ilości neuronów ułatwia jej uczenie się dzięki zwiększeniu
różnorodności w wagach początkowych.
— W wypadku nieprawidłowego doboru parametrów nauki i momentum proces nauki może uniemożliwić poprawną naukę. Zbyt wyokie momentum
może doprowadzić do rozbieżności poprzez przeskoczeni globalnego minimum funkcji błędu, zaś zbyt wysoki współczynnik nauki uniemożliwi
opuszczenie minimum lokalnego.
Literatura
[1] ”Algorytm wstecznej propagacji”, mgr inż Arkadiusz Tomczyk - dokument
dostępny w zasobach kursu.
11