Spis treści

Transkrypt

Spis treści
Spis treści
1. Wstęp ................................................................................................................................ 3
2. Od neuronów biologicznych po sztuczne sieci neuronowe .......................................... 4
2.1. Budowa neuronu biologicznego ................................................................................. 4
2.2. Sztuczny neuron .......................................................................................................... 5
2.3. Funkcje aktywacji ....................................................................................................... 6
2.4. Ogólny opis sieci neuronowej ..................................................................................... 8
3. Algorytm wstecznej propagacji błędu ........................................................................... 9
3.1. Ogólny opis ................................................................................................................. 9
3.2. Funkcja celu ................................................................................................................ 9
3.3. Uczenie ..................................................................................................................... 10
4. Algorytm Leabra ........................................................................................................... 12
4.1. Wstęp ........................................................................................................................ 12
4.2. Uczenie Hebbowskie ................................................................................................ 12
4.3. kWTA ....................................................................................................................... 17
4.4. Uczenie metodą korekcji błędów .............................................................................. 18
4.5. Leabra ....................................................................................................................... 19
5. Ogólne testy porównawcze obu sieci ............................................................................ 20
5.1. Wstęp ........................................................................................................................ 20
5.2. Rozpoznawanie linii ................................................................................................. 21
6. Problem parzystości wielowymiarowej ....................................................................... 24
6.1. Wstęp ........................................................................................................................ 24
6.2. Parzystość wielowymiarowa w sieciach Backprop .................................................. 26
6.2.1.
XOR 2D............................................................................................................. 26
6.2.2.
XOR 3D............................................................................................................. 29
6.2.3.
XOR 4D............................................................................................................. 33
6.2.4.
XOR 5D............................................................................................................. 36
6.2.5.
Próba poprawy wyników ................................................................................... 39
6.3. Parzystość wielowymiarowa w sieciach Leabra ....................................................... 39
6.3.1.
XOR 2D............................................................................................................. 40
6.3.2.
XOR 3D............................................................................................................. 42
6.3.3.
XOR 4D............................................................................................................. 45
6.3.4.
XOR 5D............................................................................................................. 47
6.3.5.
Próba poprawy wyników ................................................................................... 50
6.4. Wnioski ..................................................................................................................... 51
7. Problem rzeczywistych danych – spam ....................................................................... 53
7.1. Opis zbioru danych ................................................................................................... 53
7.2. Wyniki wstecznej propagacji .................................................................................... 53
7.3. Wyniki Leabry .......................................................................................................... 55
7.4. Wnioski ..................................................................................................................... 58
8. Wnioski końcowe ........................................................................................................... 59
9. Metody analizy danych użyte w pracy......................................................................... 60
9.1. Multi Dimensional Scaling ....................................................................................... 60
10. Spis ilustracji ................................................................................................................ 61
11. Literatura ..................................................................................................................... 62
12. Dodatek ......................................................................................................................... 63
12.1. Opis załączonych plików ........................................................................................ 63
Na dołączonej do pracy płycie zawarte są następujące informacje: ................................ 63

elektroniczna wersja niniejszej pracy w formatach Microsoft Word oraz PDF ....... 63

wszystkie dane zebrane w procesie uczenia i testowania sieci opisanymi
problemami ...................................................................................................................... 63

opisane poniżej programy, wykresy i rysunki .......................................................... 63
12.2. Program do generowania danych wejściowych dla problemu parzystości ............. 63
12.3. Program do analizy danych zebranych w trakcie uczenia ...................................... 63
2
1. Wstęp
Niniejsza praca poświęcona jest tematyce sztucznych sieci neuronowych. W
szczególności skupia się na algorytmie Leabra, który jest używany w środowisku
Emergent (następca PDP++), służącym do modelowania zachowania mózgu oraz
procesów
poznawczych.
Chciałbym
przedstawić
główne
mechanizmy
rządzące
algorytmem Leabra, sprawdzić jak zachowuje się w przypadku klasycznych problemów
klasyfikacyjnych stawianych przed sieciami neuronowymi oraz porównać go z
algorytmem
wstecznej
propagacji
poprzez
analizę
wewnętrznych
reprezentacji
wytworzonych przez obie sieci dla tych samych zestawów danych.
Na początku chciałbym przybliżyć ogólne podstawy funkcjonowania sztucznych
neuronów i ich analogii do neuronów biologicznych, pokazać jak sztuczne neurony są
łączone w sieci, po czym przybliżyć wspomniane algorytmy. Następnie przedstawić krótko
zachowanie algorytmu w typowych dla niego problemach, a dalej sprawdzić jak zachowuje
się w problemach klasyfikacji parzystości wielowymiarowej oraz identyfikacji maili ze
spamem i porównać wyniki z algorytmem wstecznej propagacji. Wszystkie testy
przeprowadzane zostały w środowisku Emergent (wersja 6.0.1), ze względu na dostępność
obu algorytmów i duże możliwości manipulowania parametrami sieci neuronowej.
3
2. Od neuronów biologicznych po sztuczne sieci neuronowe
2.1. Budowa neuronu biologicznego
Komórka nerwowa, zwana w skrócie neuronem, stanowi podstawę układu
nerwowego. Biorąc pod uwagę niewielkie rozmiary neuronów - od 4 - 150µm, mają one
stosunkowo
złożoną
budowę.
Poniżej
można
zobaczyć
pojedynczego neuronu:
Rys. 1. Schemat budowy neuronu
4
schematyczny rysunek
Z punktu widzenia algorytmu Leabra, najważniejsze dla nas jest to, co zachodzi wewnątrz
neuronu oraz w miejscu – reakcja na przychodzący impuls oraz komunikacja z innymi
neuronami, dlatego warto pokrótce zapoznać się z jego budową. W ciele neuronu (soma)
znajduje się jądro. Liczne i krótkie wypustki zwane dendrytami służą do doprowadzania
sygnałów wejściowych do neuronów. Pojedynczy, długi akson rozgałęzia się na liczne
kolaterale, które docierają do somy i dendrytów innych neuronów, tworząc kolejne
synapsy.
2.2. Sztuczny neuron
Modele sztucznych neuronów powstały w wyniku inspiracji działaniem i budową
neuronów biologicznych. Typowe sztuczne neurony posiadają wiele wejść będących
analogią dendrytów oraz jedno wyjście reprezentujące biologiczny akson. Siłę danego
połączenia określa się wagą, która zmienia się w trakcie procesu uczenia, pozwalając na
wzmacnianie bądź hamowanie połączeń między określonymi neuronami. W dużym
uproszczeniu sztuczny neuron zachowuje się jak procesor – sumuje sygnały wejściowe i
liczy wartość wyjścia używając pewnej funkcji aktywacji.
Wartość wyjścia i-tego neuronu przyjmującego sygnały od n-neuronów wejściowych
można opisać równaniem:
∑
(1)
– reprezentuje wagę połączeń synaptycznych, sygnał przepływa od neuronu i do j,
wartość dodatnia oznacza synapsę pobudzającą, ujemna hamującą,
f() – określa funkcję aktywacji, której dokładny opis znajduje się w rozdziale 3.2.
Suma liczona jest od 0, ponieważ pierwsze połączenie oznacza bias reprezentujący
próg aktywacji neuronu. Przyjmuje się, że jest to pojedynczy stały sygnał o wartości 1, dla
którego zmieniając wagę połączenia (
) mamy możliwość manipulowania aktywacją
neuronu. Jest to szczególnie przydatne w przypadkach, gdy sumaryczny sygnał wejściowy
jest bardzo duży, bądź bardzo mały i chcielibyśmy przesunąć go w obszar dużej
zmienności funkcji aktywacji.
Dla uproszczenia można wprowadzić sumaryczny sygnał wejściowy dany przez:
5
∑
(2)
Wartość wyjściową dla takiego sygnału wyznaczamy przez:
(3)
Mimo swojej początkowej prymitywnej architektury, sztuczne neurony potrafiły
realizować wiele zadań z dziedziny klasyfikacji i przewidywania. <dokończyć?>
2.3. Funkcje aktywacji
W zależności od modelu, funkcje aktywacji mogą być bardzo proste bądź
skomplikowane. Najprostsze są nieliniowe funkcje skokowe zwracające 0 bądź 1 w
zależności od tego, czy sygnał wejściowy przekroczył próg aktywacji δ czy nie.
{
(4)
Z powyższej zależności wynika, że progiem aktywności jest miejsce, powyżej którego
przyjmuje się, że neuron przechodzi w stan wzbudzony i generuje impuls wyjściowy. W
przypadku modeli sieci neuronowych jest to kwestia umowna, ponieważ zwykle nie
nakłada się takich ograniczeń, tylko propaguje aktualne wyjście z neuronu niezależnie od
tego, jakie ono jest.
Funkcja skokowa jest nieciągła, przez co nie można stosować różniczkowych
metod
uczenia.
W
przypadku
liniowych
funkcji
aktywacji
mamy
ciągłość,
różniczkowalność w ograniczonym zakresie (można wyliczyć pierwszą pochodną, która w
zasadzie sprowadza się do wyznaczenia znaku – kierunku zmiany wag):
(5)
6
Z reguły parametry charakteryzują się następującymi własnościami: 0 < α < 1, a β = 0.
Dodatkowo zwykle stosuje się ograniczenie by wartości funkcji mieściły się w przedziale
[-1, 1] bądź [0, 1].
Znacznie częściej stosuje się funkcje ciągłe, gładkie, które można różniczkować
oraz łatwo modelować ich charakterystykę – funkcje sigmoidalne. Ich dodatkową zaletą
jest asymptotyczna zbieżność do określonych wartości – najczęściej [0, 1] lub [-1, 1], przez
co nie trzeba nakładać dodatkowych ograniczeń na proces wyznaczania wartości
aktywacji. Jest wiele rodzajów funkcji sigmoidalnych, które mają różną charakterystykę
przebiegu czy zbiór wartości. Poniżej zaprezentowana typowa unipolarna funkcja
sigmoidalna:
( )
(6)
Parametrem α regulujemy kat nachylenia krzywej, natomiast zawarty w członie
bias
pozwala na dopasowanie funkcji do zbioru argumentów.
Funkcje aktywacji
1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
funkcja sigmoidalna
funkcja skokowa
0.1
0
-5
-4
-3
-2
-1
0
1
2
3
4
5
Wybór funkcji aktywacji i jej parametrów ma duży wpływ na proces uczenia jak i
samo zachowanie neuronów oraz całej sieci. Ostatnia z prezentowanych funkcji daje spore
7
możliwości, ze wzgędu na to, że największą dynamikę zmian ma w pobliżu 0 (w tym
konkretnym przypadku, za przesuwanie funkcji względem tego punktu odpowiada bias),
co pozwala na przyspieszenie procesu uczenia. Dodatkowo nie ma problemów z
wyznaczaniem pochodnych wyższych rzędów, co mocno przydaje się przy wstecznej
propagacji błędów wgłąb sieci.
2.4. Ogólny opis sieci neuronowej
Samotny, pojedynczy neuron nie jest w stanie zbyt wiele zrobić, dlatego używa się
neuronów najczęściej pogrupowanych w połączonych ze sobą warstwach, które tworzą
sieć. Są różne metody tworzenia sieci, warstw – jednak w przypadku tematu niniejszej
pracy wyróżniamy trzy grupy neuronów umieszczone w trzech warstwach. Warstwa
wejściowa odpowiada za przekazywanie sygnału w głąb sieci, nie podlega uczeniu.
Następnie umieszczona jest warstwa ukryta, której celem jest wytworzenie reprezentacji
mającej uprościć nauczenie się problemu warstwie ukrytej. Ostatnia warstwa zwana
wyjściową zawiera neurony, których zadaniem jest wygenerowanie finalnej odpowiedzi
sieci bazując na reprezentacji otrzymanej z warstwy ukrytej. W przypadku uczenia
nadzorowanego, po wyznaczeniu aktualnego sygnału wyjściowego sieci, do neuronów
wyjściowych podłączany jest oczekiwany rezultat na dany bodziec, co pozwala na
wyznaczenie błędu – rozbieżności między wartością otrzymaną a oczekiwaną – oraz dalszą
jego propagację w głąb sieci.
warstwa i
warstwa j
wij
wjk
8
warstwa k
W badanych przypadkach wszystkie połączenia międzyneuronowe są połączeniami
dwukierunkowymi symetrycznymi (waga jest taka sama niezależnie od kierunku
przesyłania informacji).
3. Algorytm wstecznej propagacji błędu
3.1. Ogólny opis
Algorytm wstecznej propagacji jest jednym ze skuteczniejszych algorytmów
uczenia sieci wielowarstwowych dzięki wykorzystaniu gradientowych metod uczenia.
Schemat jego działania wygląda następująco – po ustawieniu wektora danych wejściowych
propagujemy sygnał przez sieć, wyznaczając aktywację kolejnych warstw. Po dotarciu do
warstwy wyjściowej, porównujemy otrzymany rezultat z wartością oczekiwaną, po czym
wyznaczamy wartość funkcji celu
. Następnie stosując wsteczną propagację
przesyłamy informacje o błędach do neuronów warstwy wyjściowej oraz kolejno do
warstw ukrytych, po czym następuje proces aktualizacji wag. Ponieważ wagi
aktualizowane są w zależności od wartości różniczki
(bardzo małe wartości przez
większość czasu, dynamiczne zmiany na krótkich odcinkach), jest to algorytm wolno
zbieżny – mija wiele epok, zanim wartość błędu osiągnie minimum.
3.2. Funkcja celu
Funkcja celu (zwana także funkcją kosztu, funkcją błędu) ma za zadanie określić na
ile poprawnie sieć dopasowała sygnały wyjściowe do wejściowych, czyli wyznaczyć jak
dobrze poradziła sobie z problemem.
W standardowym algorytmie wstecznej propagacji stosuje się średniokwadratową
miarę błędu SSE1, dla pojedynczego wektora uczącego zadaną w postaci:
∑
(7)
gdzie k określa liczbę neuronów wyjściowych, tk wartość oczekiwaną na wyjściu k-tego
neuronu, a
1
jest wprowadzoną wcześniej aktualną wartością na wyjściu neuronu. W
Summed Squared Error
9
przypadku, gdy mamy więcej próbek (p) musimy posumować błędy otrzymane dla każdej
próbki z osobna:
∑∑
(8)
Mając określoną miarę błędu, możemy zdefiniować funkcję celu, która będzie podlegała
minimalizacji. Stosując wyżej wprowadzony błąd SSE definiujemy ją następująco:
∑∑
Czynnik
(9)
ma na celu eliminację stałej o wartości 2, która pojawi się w wyniku
różniczkowania powyższego równania.
3.3. Uczenie
W przypadku uczenia nadzorowanego (z nauczycielem) – gdy wiemy jaki rezultat
chcemy osiągnąć na wyjściu sieci dla konkretnego wzorca, uczenie polega na
minimalizacji funkcji błędu.
Błąd E(w) jest funkcją, której jedynym modyfikowalnym parametrem są wagi połączeń
międzyneuronowych. Ze względu na ciągłość i różniczkowalność funkcji możemy
stosować iteracyjną metodę gradientową największego spadku. W tym celu należy
wyznaczyć gradient:
(
)
(10)
Wagi połączeń musimy modyfikować w kierunku malejącego gradientu funkcji błędu, w
związku z czym otrzymujemy:
(11)
10
η oznacza współczynnik uczenia, dla którego najczęściej stosuje się wartości z przedziału
[0.001; 0.3].
Szukając minimum stosuje się różne kryteria końca procesu – może to być np.:
(12)
co jest tożsame z ograniczeniem wielkości zmiany pomiędzy dwoma kolejnymi krokami:
(13)
Powyższe warunki nie gwarantują znalezienia minimum globalnego, dlatego częściej
stosuje się kryteria dotyczące samej wartości błędu:
(14)
z dodatkowym zaznaczeniem, by powyższy warunek był spełniony przez k-kolejnych epok
(z reguły 5-10).
Rozwijając funkcję błędu korzystając
z
wcześniej
przedstawionych
zależności
otrzymujemy:
∑(
)
∑ ( (∑
)
)
(15)
Korzystając z reguły łańcuchowej liczenia pochodnych dla warstwy wyjściowej mamy:
(
)
(16)
Równanie (16) prowadzi do reguły delty:
(
)
∑(
)
(17)
Dla warstwy ukrytej natomiast otrzymujemy:
11
( )
(18)
Zastosowany w programie Emergent algorytm wstecznej propagacji implementuje jeszcze
jeden dodatkowy czynnik – tzw. bezwładność
, uwzględniający wartość ostatniej
zmiany wag, co pozwala na przyspieszenie uczenia na płaskich odcinkach gradientów
funkcji celu, czy też w pobliżu minimum lokalnego gdzie wartości gradientów są bliskie
zeru:
(
)
(19)
4. Algorytm Leabra
4.1. Wstęp
Algorytm Leabra (Local, Error-driven and Associative, Biologically Realistic
Algorithm) w uproszczeniu jest algorytmem łączącym uczenie metodą Hebba oraz
wsteczną propagację błędów (opisaną w poprzednim rozdziale) wzbogacone o
mechanizmy hamujące.
4.2. Uczenie Hebbowskie
Hebb w trakcie badań nad komórkami nerwowymi (1949r.), zauważył, że jeśli dwa
neurony są pobudzane w tym samym czasie, następuje wzmocnienie wiązania pomiędzy
nimi:
(20)
Ma to uzasadnienie biologiczne, zgodnie z odkrytym w 1966r. długotrwałym wzmocnieniu
synaptycznym (LTP)2 - stymulacje neuronu prądem o częstotliwości ~ 100Hz przez około
1 sekundy zwiększają sprawność synaptyczną o 50-100% i jest to efekt długotrwały.
2
Long-Term Potential
12
Analogicznie odkryto długotrwałe osłabienie synaptyczne (LTD) 3. Zaobserwowane w
korze mózgowej LTP/LTD mają postać asocjacyjną (Hebbowską), zależną od aktywności
pre- i postsynaptycznej neuronu.
(21)
Zgodnie z powyższą zależnością, wagi mogłyby rosnąć do nieskończoności, dlatego chcąc
to ograniczyć, często stosuje się normalizacje. W najprostszym przypadku może to być [6]:
(
)
(22)
Erikki Oja zaproponował zmodyfikowaną wersję [2],[3], dzięki której wektor wag
samoczynnie dąży do ‖ ‖
:
(
)
(23)
W uczeniu Hebbowskim głównym rezultatem jest dobry, wewnętrzny model
najważniejszych w statystycznym ujęciu cech struktury prezentowanego środowiska. Jest
to uczenie oparte o samoorganizację i odbywa się bez nadzoru. Dzięki właściwości
wzmacniania połączeń w dla wzajemnych pobudzeń, wykrywają się korelacje pomiędzy
sygnałami.
Hebbian PCA
Analiza głównych składowych (PCA4) – jest statystyczną metodą analizy czynnikowej,
która pozwala pomóc opisać jak neurony specjalizują się w wykrywaniu korelacji. PCA
jest procedurą przekształcającą zbiór domniemanie liniowo zależnych parametrów w zbiór
zmiennych liniowo niezależnych. Zmienne zbioru wyjściowego nazywane są głównymi
składowymi. Ich liczba jest mniejsza bądź równa liczbie oryginalnych parametrów. Po
transformacji parametry uszeregowane są względem malejącej wariancji.
3
4
Long-Term Depression
Principal Component Analysis
13
Poniżej można zobaczyć, jak pojedynczy liniowy neuron, przyjmujący sygnały od
szeregu wejść, przy użyciu uczenia Hebbowskiego realizuje PCA, a dokładniej znajduje
najsilniejszą główną składową.
Zbiorem wejściowym składającym się z 25 neuronów będzie pojedynczy wektor opisujacy
linię biegnącą po przekątnej kwadratu (5x5). Ponieważ neuron realizuje liniową funkcję
aktywacji, jego wartością wyjściową jest ważona suma sygnałów wejściowych:
∑
(24)
Wagi zmieniają się po każdym wektorze t używając prostej reguły Hebbowskiej:
(25)
Sumując powyższe równanie po wszystkich wektorach uczących t:
∑
(26)
Gdy dodatkowo przyjmiemy, że stała uczenia równa jest , gdzie N jest liczbą wektorów
uczących t, suma zmienia się w średnią:
〈
〉
(27)
Następnie rozwijając powyższe równanie otrzymujemy:
〈
〈
∑
〉
∑〈
〉〈
〉
∑
〈
〉
(28)
〉 jest elementem macierzy korelacji pomiędzy między wejściami i i k, gdzie
korelacja zdefiniowana jest jako ich średnia aktywność względem czasu.
Dla porównania, standardowa miara korelacji określona jest następująco:
14
〈
〉
√
Gdzie
oznacza wartość średnią, a
(29)
wariancję.
Głównym rezultatem wynikającym z powyższych równań jest to, że najsilniej zmieniają
się wagi dla najbardziej skorelowanych ze sobą wejść, poniżej kilka kolejnych epok
uczenia powyższym algorytmem:
Można zauważyć, jak skorelowane jednostki dominują w procesie uczenia, decydując o
kierunku i wartości zmiany wag. Gdyby kontynuwać proces uczenia, wagi dwóch
pierwszych połączeń cały czas by się zwiększały, podczas gdy ostatniego utrzymywała by
się na relatywnie niskim poziomie nie mając wpływu na osiągane rezultaty.
W dotychczasowym rozważaniu był brany pod uwagę jedynie jeden neuron ukryty.
W przypadku, gdybyśmy zastosowali kilka neuronów ukrytych o takich samych
parametrach (funkcja aktywacji i metoda uczenia) osiągnęlibyśmy dla wszystkich taki sam
rezultat, ponieważ zwykle dominuje jedna składowa. Aby zmusić sieć do wykrywania
także cech kolejnych rzędów potrzebne były zmiany.
Jednym rozwiązaniem byłoby zmuszenie neuronów do używania kolejnych słabszych
elementów macierzy korelacji [Sanger 1989, Oja 1989], co prowadziłoby do sekwencyjnej
metody PCA - SPCA5. Jednak metoda ta zakłada hierarchizację cech dominujących w
strukturach wejściowych. Alternatywą jest postrzeganie heterarchii cech, dzielących się na
5
Sequential Principal Component Analysis
15
odrębne kategorchie na tym samym poziomie – jest to także analogiczna metoda
dostrzeżona przez porównanie reprezentacji wytworzonych przez różne algorytmy uczące
(m.in. SPCA) oraz podstawowe reprezentacje kory wzrokowej.
W ten sposób doprowadzono do powstania uczenia Hebbowskiego realizującego
warunkowe PCA (CPCA6), które wykonywane jest dla ograniczonego zbioru wejść. W
tym celu wprowadzona została funkcja warunkująca, której zadaniem jest określenie kiedy
neuron powinien wykonać PCA. Ponieważ PCA wykonywane jest automatyczne, w
zasadzie ogranicza się to do włączania/wyłączania aktywności neuronu.
Hebbowskie CPCA
Metoda uczenia CPCA dosłownie interpretuje pomysł warunkowania uczenia.
Zakłada, że dla danego wektora uczącego, można interpretować wartość wagi wejściowe,
jako warunkowe prawdopodobieństwo tego, że neuron z którego pochodzi sygnał
aktywny gdy neuron docelowy
był
także był aktywny.
(
)
(
)
Reguła uczenia prowadząca do takich wag jest nazywana algorytmem CPCA.
Prawdopodobieństwo warunkowe wynoszące 0.5 oznacza brak korelacji – aktywność
danego neuronu wejściowego nie wpływa na aktywność neuronu docelowego. Gdy jest
większe od 0.5, mamy korelację dodatnią czyli najprawdopodobniej gdy aktywny jest
neuron docelowy, neuron wejściowy także będzie aktywny. W przypadku wartości
mniejszej od 0.5 jest większa szansa, że dla aktywnego neuronu docelowego neuron
wejściowy będzie nieaktywny. Należy zauważyć, że w ogólności
, a
korelacje zostają takie same niezaleznie od kierunku propagacji sygnału.
Poniższa reguła aktualizacji wag spełnia warunki prawdopodobieństwa warunkowego
CPCA z poprzedniego równania:
[
6
]
Conditional Principal Component Analysis
16
(
)
(30)
Oznaczając
(
) prawdopodobieństwo aktywacji neuronu
oraz
analogiczne prawdopodobieństwo aktywacji neuronu
bodźcem dla wektora t,
. Wstawiając do
równania (4.12) otrzymujemy:
∑[ (
)
(
)
]
∑ (
)
,
(31)
co prowadzi do:
(∑ (
)
Aby z powyższego wyznaczyć wartość wagi
(
∑
)
(
:
(
)
(32)
, musimy przyjąć, że stan równowagi
osiągnięty jest, gdy waga się nie zmienia, czyli
∑
)
)
( )
(
)
(33)
4.3. kWTA
W przypadku, gdy mamy wiele neuronów istnieje duże prawdopodobieństwo, że
będą uczyć się tych samych korelacji. Dlatego często dodaje się mechanizmy hamujące
czy też wymuszające konkurencję a zarazem większą specjalizację neuronów. Jednym z
takich mechanizmów jest kWTA7 – w dosłownym tłumaczeniu k-zwycięzców bierze
wszystko. Polega to na ograniczeniu liczby neuronów, którym pozwala się zmieniać wagi,
do k neuronów najsilniej reagujących na dany bodziec. Powoduje to jeszcze lepsze
dostosowanie się tych neuronów do bodźca. Czasem stosuje się dodatkowe mechanizmy,
ponieważ mogą zdarzyć się sytuacje, że pewna grupa neuronów będzie ciągle przegrywać i
nie będzie miała możliwości modyfikacji swoich wag. W tym celu stosuje się np. karanie
za zbyt dużą liczbę zwycięstw - po której następuje określona liczba epok, w której neuron
nie może aktualizować swoich wag. kWTA powoduje zawężenie badanej przestrzeni
rozwiązań. Emergent pozwala na określenie hamowania różnego typu – możemy określać
procentowo udział neuronów podlegających uczeniu, podać konkretną ich liczbę czy też w
ramach warstwy podzielić neurony na grupy w ramach której następuje inhibicja.
7
k-Winners Takes All
17
4.4. Uczenie metodą korekcji błędów
W przeciwieństwie do uczenia Hebbowskiego - modelowego, gdzie głównym zadaniem
jest odzwierciedlenie ogólnej struktury środowiska, potrzebna jest też metoda, która
pozwala generować odpowiednie wyjście na zadany wzorzec, która daje kontrolę nad
osiąganymi rezultatami.
Wielowarstwowym uogólnieniem reguły delty jest wsteczna propagacja opisana w
rozdziale 3, jednak jest to metoda nieodzwierciedlająca biologicznej natury tego procesu.
Metoda zwana GeneRec8 oddaje właśności LTP/D i w ogólności lepiej reprezentuje
procesy zachodzące w korze mózgowej.
GeneRec – Generalized Recirculation; approximates Almeida-Pineda recurrent backprop.
Symmetric, midpoint version of GeneRec is used, which is equivalent to the contrastive
Hebbian Learning (CHL) [O’Reilly Neural Computation]
[(
(
)
[
]
Miara błędu Cross Entropy
∑∑
Pochodna CE
8
GeneRec – Generalised Recurculation
18
)
]
(34)
4.5. Leabra
Ponieważ nie mamy wpływu na rezultat uczenia metodą Hebba, z drugiej strony reguła
delty dobra do nauki warstwy wyjściowej, nie do końca sprawdza się w warstwach
ukrytych ze względu na konieczność wskazania celu, Leabra używa kombinacji metody
Hebba, hamowania wewnątrz warstw oraz korekcji błędów. Jest to uczenie zorientowane
zadaniowo.
Uczenie Hebbowskie połączone z konkurencją opartą na hamowaniu ograniczają korekcję
błędów tak, by tworzyły się sensowne reprezentacje lub atraktory częściowo
zlokalizowane (componential attractors).
Mechanizm uczący jest kombinacją metody Hebba (CPCA) i oraz korekcji błędów poprzez
wersję CHL algorytmu GeneRec w postaci:
(35)
Co po podstawieniu odpowiednich równań daje:
[
(
)
(
)]
(36)
Połączenie obu algorytmów można podsumować przez sześć podstawowych zasad, które
prowadziły do jego sformułowania:
1)
Realizm biologiczny
2)
Rozproszona reprezentacje – wiele aktywnych neuronów
3)
Hamowanie współzawodnictwem (kWTA) – powoduje ograniczenie aktywnych
neuronów a zarazem lepszą ich specjalizację
4)
Dwukierunkowa propagacja sygnału
5)
Uczenie propagacją błędów (GeneRec) – wpływa na reprezentację przekazując
różnicę między spodziewanym wynikiem i aktualnie otrzymanym (człon błędu )
19
6)
Uczenie Hebbowskie – kształtuje własne reprezentacje w nawiązaniu do korelacji
pomiędzy danymi wejściowymi, wyszukuje wspólne cechy
5. Ogólne testy porównawcze obu sieci
5.1. Wstęp
….
W celu dokładniejszej analizy algorytmów do programów uczących obu sieci został
dodany fragment zapisujący wszystkie dane z procesu uczenia po każdej epoce:
// SaveTrialOutputData
// args: global script parameters (arguments)
trial_mon_data = TrialOutputData (DataTable)
network = XOR_5D (Network)
// vars: global (non-parameter) variables
fname = data\TOD_0001.dat (String)
epoch = 0001 (String)
// data\\
folder = data\ (String)
save_interval = 1 (int)
is_active = true (bool)
// init_code: code to initialize the program
epoch=network->epoch
fname="TOD"->cat(epoch)->cat(".dat")
// prog_code: main code to run program
if (is_active)
epoch=taMisc::LeadingZeros(network.epoch, 4)
fname=folder+"TOD_"+epoch+".dat"
if ((network->epoch % save_interval) == 0)
trial_mon_data->SaveData(fname, , , )
Dane zachowywane były co save_interval epok – w przypadku wstecznej propagacji, która
jest wolno zbieżna, nie było sensu zapisywania danych co epokę – wystarczyło co 5-10.
Wynikowe pliki automatycznie były numerowane aktualną liczbą epok. Powyższy skrypt
był wywoływany po każdej zakończonej epoce w programie LeabraEpoch (analogicznie
dla wsteczne propagacji był to BPEpoch).
20
Dodatkowo w celu monitorowania reprezentacji, jakie wytwarzają się wewnątrz sieci, do
listy standardowo monitorowanych parametrów, które trafiają do tabeli TrialOutputData,
został dopisany act_m, odpowiadający za wartość aktywacji w fazie minus (w przypadku
wstecznej propagacji był to zwykły act).
5.2. Rozpoznawanie linii
Przykładowy projekt „04 self_org.proj” z pakietu symulacji Emergenta pokazuje wpływ
członu Hebbowskiego - CPCA oraz kWTA w algorytmie Leabra. Jest to uczenie bez
nauczyciela, gdzie warstwie wejściowej przedstawiane są linie pionowe, poziome oraz ich
kombinacje, a warstwa ukryta tworzy swoją ich reprezentację.
Sieć składająca się z 25 neuronów wejściowych oraz 20 neuronów ukrytych była
początkowo uczona zestawem danych zawierającym kombinację 2 linii poziomych bądź
pionowych, a następnie przetestowana zbiorem składającym się z linii pojedynczych:
21
Oraz wynik testowania zbiorem linii pojedynczych:
22
Na powyższych rysunkach na dole jest warstwa wejściowa, powyżej warstwa ukryta.
Widać wyraźnie, że mimo uczenia sieci zbiorem składającym się z kombinacji linii, sieć
wyspecjalizowała neurony w rozpoznawaniu poszczególnych linii.
Ponieważ wsteczna propagacja jest uczeniem z nauczycielem, nie jesteśmy w stanie
przeprowadzić analogicznego testu. Gdyby jednak chcieć wymusić na sieci określone
reakcje w zależności od rodzaju prezentowanych linii na pewno nie byłyby one tak
jednoznaczne jak w przypadku uczenia Hebbowskiego z hamowaniem kWTA.
23
6. Problem parzystości wielowymiarowej
6.1. Wstęp
Problem wielowymiarowej parzystości nie jest liniowy, przez co stwarza spore problemy
w trakcie uczenia. W ramach projektu badana była parzystość n-wymiarowa (
)–
zrezygnowano z analizy wyższych wymiarów ze względu na słabe wyniki we
wspomnianym przedziale. W programie Emergent zostały stworzone dwa projekty o takiej
samej strukturze warstw, liczbie neuronów – jeden dla sieci z algorytmem wstecznej
propagacji, drugi dla sieci Leabra. Przyjęto następującą strukturę sieci:

5 neuronów wejściowych w warstwie wejściowej

25 neuronów ukrytych w jednej warstwie ukrytej

2 neurony wyjściowe w warstwie wyjściowej
Wektor wejściowy był 5-bitowy dla wszystkich wymiarów. Obie sieci były uczone takimi
samymi danymi wejściowymi. W przypadku badania parzystości o niższej liczbie
wymiarów pierwsze pozycje wektora były zerowane. Poniżej przykład jeden z
przykładowych wektorów dla trzech wymiarów:
Jest to minimalny wektor dla problemu trójwymiarowego XOR. Dla każdego wymiaru
było przygotowanych kilka zbiorów danych wejściowych z różną liczbą wektorów.
Poniżej przykład dla XOR dwuwymiarowego, który składa się z 40 wektorów. Na każdy z
24
czterech możliwych punktów problemu przypada 10 wektorów, które zostały losowo
rozmieszczone w ich pobliżu.
XOR 2D
1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
Class 1
Class 2
0.1
0
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Aby wykluczyć możliwość wpływu struktury wektora wejściowego przez wypełnienie
zerami nieużywanych pozycji, analizowane były także projekty o sieciach konstruowanych
pod konkretne problemy. Wszystkie miały taką samą ilość neuronów ukrytych oraz
wyjściowych (odpowiednio 25 i 2) i różniły się liczbą neuronów wejściowych – w
zależności od ilości wymiarów analizowanego problemu. Jednak różnic w wynikach nie
było.
Obie sieci były uczone takimi samymi zbiorami danych, były to odpowiednio wersje
dokładne, gdzie punkty wypadały w rogach wielowymiarowych kwadratów i zawierały
następujące liczby wektorów dla poszczególnych wymiarów:
Liczba wymiarów
Liczba wektorów dokładnych
Liczba wektorów rozmytych
2
4
40
3
8
40
4
16
48
5
32
64
25
W przypadku wstecznej propagacji kryterium zatrzymania uczenia było osiągnięcie
średniego błędu SSE na poziome nieprzekraczającym 0.1 przez co najmniej 10 kolejnych
epok. Dla sieci Leabra kryterium było podobne, tylko błąd musiał być równy 0.00 przez
minimum 10 epok (z reguły było to więcej 20-25).
6.2. Parzystość wielowymiarowa w sieciach Backprop
6.2.1. XOR 2D
Pierwszym badanym przypadkiem jest parzystość dwuwymiarowa, w przypadku
której praktycznie zawsze można osiągnąć sukces. Do nauczenia tego problemu zwykłą
siecią neuronową wystarczy mieć 1 neuron ukryty oraz 1 neuron wyjściowy, więc w
przypadku sieci zbudowanej z 25 neuronów ukrytych i 2 wejściowych tym bardziej nie ma
problemu z uczeniem. Poniżej umieszczony jest wykres błędu (SSE) dla uczenia sieci o
wspomnianej strukturze:
Oś pionowa oznacza aktualną wartość błędu w danej epoce, której numer charakteryzuje
oś pozioma. Jest to konwencja stosowana dla wszystkich tego typu wykresów.
Oraz MDS wartości aktywacji neuronów warstwy ukrytej w epoce 1300:
26
Poniżej wartość aktywacji neuronów wszystkich warstw dla wszystkich wektorów
wejściowych, T oznacza numer wzorca, SSE wartość błędu w danym przypadku. Każdy
kwadrat reprezentuje jeden neuron, neurony pogrupowane są w warstwy – kolejno od góry
są to warstwa wyjściowa, ukryta i wejściowa. Intensywność koloru odwzorowuje wartość
– biały oznacza kompletny brak wzbudzenia, czarny – maksymalną wartość funkcji
aktywacji. Takie samo oznaczenie stosowane jest we wszystkich tego typu obrazach:
27
Poniżej zsumowane i znormalizowane aktywacje neuronów warstwy ukrytej względem
klas. Dane zostały wygenerowane na podstawie aktywacji pochodzącej od wszystkich
neuronów danej klasy a następnie znormalizowane do 1. Wyniki dla każdego wykresu
normalizowane były osobno.
28
6.2.2. XOR 3D
W porównaniu do XOR2D, ten problem można powiedzieć, że jest optymalny do
testowania sieci ze względu na to, że nie jest już taki prosty, ale z drugiej strony nie jest też
nadmiernie skomplikowany jak wyższe wymiary parzystości.
Poniżej wykres uczenia sieci, w której było 6 neuronów ukrytych, zbiorem
podstawowym XOR3D składającym się z 8 wektorów:
Oraz poniżej MDS aktywacji neuronów warstwy ukrytej z epoki 14725:
29
Poniżej wartość aktywacji poszczególnych warstw dla wszystkich wektorów uczących:
Poniżej analogiczne wykresy dla sieci o standardowej strukturze opisanej w rozdziale 6.1,
uczonej lekko rozmytym problemem XOR 3D składającym się z 80 punktów.
Wykres błędu:
30
MDS wartości aktywacji neuronów warstwy ukrytej w epoce 1500:
Zwiększenie liczby wektorów uczących pozytywnie wpłynęło na zmniejszenie liczby epok
potrzebnych do nauczenia problemu. Jednak wzrost liczby neuronów ukrytych a zarazem
brak mechanizmów współzawodnictwa wpływa negatywnie na zbieżność procesu uczenia
– widać wyraźnie sporą liczbę skoków na wykresie błędów.
Dla ostatniego przypadku można zobaczyć dokładnie jak wygląda zawartość warstw dla
wszystkich wektorów uczących:
31
32
Przy takiej liczbie neuronów ukrytych Emergent wielokrotnie nie potrafił znaleźć
rozwiązania bądź z niego wypadał – poniżej kilka przykładów:
Poniższy przykład jest dla takiej samej sieci tyle, że do parametrów został dodany czynnik
momentum o wartości 0.1.
6.2.3. XOR 4D
Poniżej wykres funkcji błędu udanego uczenia sieci zbiorem 47 wektorów opisujących
problem XOR 4D (rozmyty wokół punktów):
33
Poniżej grafiki prezentująca MDS a następnie aktywację poszczególnych warstw dla
powyższego zbioru danych w epoce 7150, dla której wartość błędu SSE wyniosła 0.052:
34
Na wykresie MDS widać separację klas, jednak można zauważyć po lewej stronie u dołu
jak dwie grupy wektorów należących do różnych klas prawie się przecinają, skutkuje to
tym, że sieć próbując się uczyć często błędnie klasyfikuje wektory należące do tej właśnie
grupy. Powyżej można też zaobserwować, że część neuronów warstwy ukrytej stała się
wyraźnie aktywniejsza od reszty, czego nie widać w przypadku XOR 3D –
prawdopodobnie spowodowane jest to ponad czterokrotnie dłuższym czasem uczenia.
35
W przypadku XOR 4D, podobnie jak we wcześniejszym wiele prób nauczenia sieci
kończyło się wypadaniem z rozwiązań. Dane dokumentujące te przypadki można znaleźć
w zbiorach dołączonych do pracy.
6.2.4. XOR 5D
Problem z pięcioma wymiarami sprawiał już całkiem sporo problemów, co można
zaobserwować na poniższym wykresie wartości funkcji błędu:
Rys. 2. Wykres wartości błędów SSE
Poniżej MDS aktywacji warstwy ukrytej gdzie znowu widać separację, ale widać też na
środku po lewej stronie miejsce sprawiające problemy. Na następnej grafice pokazującej
36
aktywację neuronów poszczególnych warstw zaznaczone są 2 wzorce, które zostały
nieprawidłowo sklasyfikowane. Należą one właśnie do tego miejsca.
Rys. 3. MDS wartości aktywacji neuronów warstwy ukrytej
Rys. 4. Wykres wartości błędów
37
Rys. 5. Wykres wartości aktywacji neuronów wszystkich warstw
38
Jak widać, przy 5 wymiarach problem ten angażuje wiele neuronów ukrytych i mimo
upływu wielu epok wciąż nie udało się osiągnąć stuprocentowej skuteczności. Powyższy
przykład jest jedną z niewielu udanych prób nauczenia sieci danymi XOR 5D. W
przypadku, gdy jako dane wejściowe stosowany był zbiór dokładny, składający się z 32
wzorców wyniki były jeszcze gorsze i ani razu nie udało się osiągnąć (i utrzymać)
zakładanego pułapu błędu.
6.2.5. Próba poprawy wyników
W celu spróbowania poprawienia otrzymanych rezultatów – chodzi o liczbę epok
potrzebnych do nauczenia jak i sam fakt znalezienia rozwiązania – w przypadku wstecznej
propagacji poniżej opisano zmieniane parametry.
Współczynnik uczenia. Domyślnie przyjmuje wartość 0.2, w przypadku zmniejszenia tej
wartości do poziomu 0.1 czy 0.005
6.3. Parzystość wielowymiarowa w sieciach Leabra
W przypadku uczenia sieci Leabra, trzeba zwrócić uwagę na inne kryterium
kończenia uczenia. Dla wstecznej propagacji jest to osiągnięcie pewnego progu błędu SSE
i utrzymanie go przez określoną liczbę epok. W Leabrze tym kryterium jest parametr
cnt_err określający liczbę wektorów, dla których błąd wynosi 0.00, czyli jest to dużo
bardziej restrykcyjne kryterium.
39
6.3.1. XOR 2D
Wyniki uczenia sieci problemem dwuwymiarowym:
Rys. 6. Aktywacje neuronów poszczególnych warstw w epoce 130
Jak widać, problem dwuwymiarowy raczej nie stwarzał problemów i sieć bardzo szybko
uczyła się problemu. Jednak jak widać, mimo znalezienia rozwiązania sieć z
potrafiła gwałtownie wypaść.
Poniżej przykład uczenia większym zestawem danych:
40
niego
I jeszcze jeden rezultat dla takiego samego zestawu:
W przypadku wczesnych wersji Emergenta z serii 5.0 były problemy nawet z XOR 2D,
przykład wykres błędów:
Jak widać z powyższych testów zwiększenie liczby wektorów uczących w przeciwieństwie
do wstecznej propagacji skutkuje pogorszeniem i wydłużeniem procesu uczenia.
41
6.3.2. XOR 3D
Wyniki uczenia zbiorem opisującym problem trójwymiarowy:
Rys. 7. Wartość aktywacji neuronów, epoka 220
Powtórny test dla współczynnika uczenia zmniejszonego o połowę, do 0.005:
42
Rys. 8. Wartość aktywacji neuronów, epoka 349
Kolejny rezultat, dla współczynnika uczenia 0.005 i rozszerzonego zbioru uczącego:
43
I wartość aktywacji w epoce 875:
44
6.3.3. XOR 4D
Wyniki uczenia zbiorem czterowymiarowym zbiorem danych:
45
Inny przypadek:
I aktywacja w 2990:
46
6.3.4. XOR 5D
Poniżej wyniki jednej z nielicznych prawie udanych prób uczenia tego problemu.
Kryterium końca zostało jednak zmienione na to, by w ciągu 5 kolejnych epok średni błąd
był na poziomie 0.00. Widać dużą zmienność wartości funkcji błędów. Jednak warto
zauważyć, że sieć kilkunastokrotnie na kilka epok osiągnęła poziom, gdy wartość błędu
wynosiła 0.
47
48
Oraz drugi przypadek gdzie uczono większym zestawem danych:
49
6.3.5. Próba poprawy wyników
W celu poprawy rezultatów modyfikowana była cała gama parametrów sieci,
neuronów jak i parametrów uczących. Podstawowymi parametrami mającymi wpływ na
proces uczenia były współczynnik uczenia jak i kWTA. Współczynnik uczenia,
domyślnie dla Leabry wynoszący 0.01 ustawiano na wartości od 0.0001 do 0.2. Stosowano
także mechanizmy Emergenta pozwalające na zmniejszenie wartości współczynnika
uczenia co określoną liczbę epok (lrate schedule), gdzie próbowano zmieniać wartości
logarytmicznie od 0.1 do 0.0001 co 25 bądź 50 epok, albo z 0.2 do 0.005 w takich samych
interwałach. W celu poprawy stabilizacji w trakcie normalnego procesu uczenia, po
osiągnięcia błędu na poziomie 0, próbowano także ręcznie zmniejszyć współczynnik
uczenia np. 100- bądź 1000-krotnie tak, by sieć nie wypadała ze znalezionego rozwiązania.
Jednak nie przyniosło to spodziewanych efektów, a stabilizacja była pozorna i chwilowa.
Następnym modyfikowanym parametrem była wartość kWTA – części hamującej.
50
Domyślnie wynosi ona 25%, co oznacza, że jedynie 25% neuronów warstwy ukrytej
osiągającej najlepsze wyniki podlega dalszemu uczeniu. Ponieważ w części problemów
problemem była nadmierna aktywacja (gdzie całe grupy neuronów reagowały
maksymalnym pobudzeniem na różne grupy sygnałów), poprzez zmniejszenie kWTA
próbowano wpłynąć na aktywację. Sprawdzone były wartości 10% oraz sztywne
ograniczenie do 2,3 i 5 neuronów. Mimo, że aktywność neuronów warstwy ukrytej
zmalała, nie wpłynęło to na poprawę wyników. Dlatego, w kolejnym kroku zmniejszono
udział części Hebbowskiej (parametr k_hebb) odpowiedzialnej za samoorganizację z
0.001 do 0.0001, a nawet do 0.00001 jednak to także nie poprawiło rezultatów. Ostatnimi z
modyfikowanych parametrów były te, modelujące kształt funkcji aktywacji. Poprzez
zmianę w_gain została ona rozciągnięta i wygładzona, dzięki czemu powinna lepiej
reagować w szerszym zakresie danych wejściowych. Poniżej wykresy przed i po
zmianach:
Mimo zastosowania zmian wielu parametrów nie udało się rozwiązać kluczowych
problemów dotykających sieci Leabra w przypadku problemu parzystości.
6.4. Wnioski
Z przedstawionych wyżej wyników nie można powiedzieć, by którakolwiek implementacja
dobrze radziła sobie z problemem parzystości wielowymiarowej. W badanych przy innych
okolicznościach projektach, wsteczna propagacja po wielu cyklach uczących z reguły
osiągała zadowalające rezultaty. Tutaj oba algorytmy cechowały się dużą zmiennością. Na
pewno można zauważyć znaczne przyspieszenie procesu uczenia w algorytmie Leabra,
jednak jego niestabilność w obecnej implementacji nie pozwala jednoznacznie potwierdzić
skuteczności. Duże wahania błędu pomiędzy kolejnymi epokami, wypadanie daleko poza
rozwiązanie nawet przy ograniczeniu współczynnika uczenia do poziomu 1e-6 raczej
zniechęcają do używania. Nie sposób jednak nie zauważyć wpływu wszystkich
zastosowanych do konstrukcji algorytmu elementów, które kilkusetkrotnie przyspieszają
proces uczenia, a otrzymane w ich wyniku reprezentacje dzięki stosowaniu inhibicji są
bardzo spójne. Dodatkowo w warstwie ukrytej możemy zaobserwować wyraźne
aktywacje, których brak w przypadku wstecznej propagacji – gdzie większość neuronów
jest aktywna a ich aktywności nieznacznie się od siebie różnią. Potrzeba wielu tysięcy
epok by to zmienić.
51
Zastanawiający jest fakt, że dla problemów parzystości Emergent bardzo źle zachowuje się
w przypadku przeuczenia sieci. Gdybyśmy zatrzymali się przy z góry ustalonym kryterium
można by próbować opisywać ten stan, jednak po przeuczeniu nawet wsteczna propagacja
cechuje się dużymi skokami i nieuzasadnionym wypadaniem z rozwiązania, by wpaść w
odległe minimum lokalne, z którego nie potrafi wybrnąć. Analogicznie w przypadku
Leabry – z reguły wartości błędu stopniowo maleją, by po osiągnięciu i trwaniu w
minimum przez kilka epok gwałtownie z niego wypaść. Dlatego spore wątpliwości budzi
implementacja algorytmu wstecznej propagacji oraz CHL, które w dużej mierze
odpowiadają za zmierzanie w kierunku malejącego błędu. Nie ma żadnych zastrzeżeń do
implementacji części uczenia Hebbowskiego jak i hamowania kWTA, co oddaje przykład
reprezentacji wytworzonej po uczeniu zbiorem linii.
Co do wstecznej propagacji, należy zauważyć, że brak mechanizmu konkurencji (np.
kWTA) powodował, że neurony wyjściowe dostawały bardzo dużo sygnałów z warstwy
ukrytej. Mogło to utrudniać znajdywanie odpowiedniego kierunku poszukiwania
rozwiązania. W przypadkach, gdy liczba neuronów ukrytych została odgórnie ograniczona
do np. 6 wykres błędu był o wiele bardziej spójny i nie zawierał nagłych skoków.
Algorytm Leabry, czy też pomijając część Hebbowską – CHL wydaje się być obiecującym
ze względu na szybkość osiągania wyników. Plusem jest także analogia do neuronów
biologicznych, jednak spowodowane tym skomplikowanie procesu uczenia jak i samej
budowy neuronów, może być powodem, dla którego trudno osiągnąć zadowalającą
zbieżność.
52
7. Problem rzeczywistych danych – spam
7.1. Opis zbioru danych
Spam jest zbiorem 4601 wektorów, zebranym i opracowanym przez HewlettPackard Labs, które opisują e-maile oznaczone jako spam bądź nie spam. Dane opisane są
poprzez 57 parametrów opisujących występowanie określonych słów bądź znaków w
mailu. 2788 wektorów opisuje maile nie będące spamem, a pozostałe 1813 będące.
Docelowym przeznaczeniem była konstrukcja filtrów antyspamowych.
W celu zastosowania danych w programie Emergent zostały one poddane
procesowi normalizacji względem kolumn, tak, by wartości przedstawiane neuronom
wejściowym należały do przedziału [0,1].
7.2. Wyniki wstecznej propagacji
Do badania została skonstruowana sieć o 19x3 = 57 neuronów wejściowych, 6x6 =
36 neuronów ukrytych oraz 2 neurony wyjściowe. Żadne pozostałe parametry nie były
modyfikowane – współczynnik uczenia pozostawiono na wartości 0.2.
Wykres błędów:
53
Oraz seria wykresów aktywacji neuronów warstwy ukrytej po transformacji MDS w
epokach 0, 1, 5 i 100 (są to dane zebrane po epoce, czyli w przypadku epoki 0 nastąpił
jeden pełen cykl uczący).
Oraz finalny dla epoki 999:
54
Wyraźnie widać stopniowo postępującą coraz wyraźniejszą separację klas. Dla ostatniego
wykresu błąd SSE wynosił 0.067.
Jak można zaobserwować, wsteczna propagacja od samego początku bardzo sprawnie
radziła sobie z problemem, by osiągnąć całkiem zadowalający wynik jak dla takiego
problemu.
7.3. Wyniki Leabry
Do badania Leabry została zbudowana analogiczna sieć jak we wstecznej
propagacji, o takiej samej liczbie neuronów i ich rozmieszczeniu. Jednak w tym przypadku
ze względu na niezadowalające wyniki modyfikowanych było kilka parametrów.
W celu poprawy zbieżności modyfikowane były parametry dotyczące kWTA – wartość
została zmniejszona z 25% do 10% oraz sprawdzono także dla wartości 2 oraz 5
neuronów. Wartość współczynnika uczenia zredukowano z 0.01 do 0.005. Poniżej wykresy
błędów SSE:
55
Jak widać, w pierwszym przypadku (co zdarzało się dość często przy ponownych próbach)
sieć całkowicie wypadła z rozwiązania, w drugim natomiast nie potrafiła spaść poniżej
wartości 0.35, co w porównaniu z wsteczną propagacją nie jest zbyt zadowalającym
rezultatem.
Próbowano także zmniejszyć wpływ części Hebbowskiej z 0.001 do 0.0001 oraz 0.00001,
jednak to także nie przyniosło żadnych rezultatów.
Ostatnim z modyfikowanych parametrów były kształt funkcji aktywacji jak i parametry
połączeń neuronów. Zmieniając parametr gain w LeabraUnitSpec ze 100 na 4 (co
powoduje wygładzenie funkcji aktywacji), oraz wt sig gain w LeabraConSpec z 6 na 3 i
stosując wcześniej opisane metody odnośnie kWTA, wpływu części Hebbowskiej udało
się nieznacznie poprawić wyniki Leabry.
Poniżej rezultaty uczenia dla tak ustawionej sieci – na początek wykres błędów:
56
MDSy aktywacji neuronów warstwy ukrytej po 0 i 1 epoce:
Oraz analogiczny wykres dla epoki 999, której SSE wynosiło 0.229:
57
Trudno mówić tu o diametralnej poprawie, jednak pozwoliło to nieco ustabilizować proces
uczenia i z wartościami błędów SSE osiągnąć poziom o ponad 0.1 niższy niż poprzednio.
7.4. Wnioski
W powyższych rezultatach nie został ujęty czas uczenia, ograniczone zostało to
tylko do liczby epok, natomiast czas trwania jednej epoki w przypadku tego problemu nie
był jednoznaczny dla obu algorytmów. Uczenie 1000 epok wsteczną propagacją trwało
niecałą godzinę, natomiast w przypadku Leabry i takiej samej konfiguracji sprzętowosystemowej zajęło to ponad dobę (około 28h). Co więcej, mimo znacznie większego
nakładu obliczeniowego wyniki Leabry nie były wcale zadowalające, wręcz przeciwnie.
Sieć wstecznej propagacji osiągała zdecydowanie lepsze rezultaty po kilku epokach niż
Leabra po całym cyklu. Ponadto Leabra cechowała się wypadaniem z dobrego kierunku
poszukiwania rozwiązania podobnie, jak to miało miejsce w przypadku problemów
parzystości.
58
8. Wnioski końcowe
Z wcześniej przedstawionych badań można zaobserwować, że skuteczność Leabry
w przypadku realnych problemów klasyfikacyjno-obliczeniowych jest niewielka. O tyle, o
ile w przypadku parzystości wielowymiarowej Leabra bardzo szybko znajdywała
rozwiązanie, martwiące było nagłe i nieuzasadnione wypadanie z niego by ostatecznie
osiągnąć całkowicie błędny stan. Leabra lepiej radziła sobie na małych zbiorach danych,
gdy liczba wektorów uczących była niewielka, niż gdy prezentowano wiele bardzo
podobnych wektorów należących do danej klasy. Jest to zachowanie całkiem przeciwne od
rezultatów osiąganych przez wsteczną propagację, gdzie duży zbiór uczący znacznie
poprawiał szybkość znajdywania rozwiązania. Jak pokazał problem spamu, dodatkowo w
przypadku dużych zbiorów danych czas uczenia był wielokrotnie dłuższy niż to samo
zadanie w sieci wstecznej propagacji. W związku z tym, można stwierdzić, że Leabra w
dobry sposób modeluje wybrane zagadanienia z dziedziny psychologii, neurologii czy
neuropsychologii, których nie sposób byłoby przedstawić wsteczną propagacją, jednak w
obecnym
stanie
nie
nadaje
się
do
rozwiązywania
klasyfikacyjnych.
59
rzeczywistych
problemów
9. Metody analizy danych użyte w pracy
9.1. Multi Dimensional Scaling
60
10. Spis ilustracji
Rys. 1. Schemat budowy neuronu ......................................................................................... 4
Rys. 2. Wykres wartości błędów SSE ................................................................................. 36
Rys. 3. MDS wartości aktywacji neuronów warstwy ukrytej ............................................. 37
Rys. 4. Wykres wartości błędów ......................................................................................... 37
Rys. 5. Wykres wartości aktywacji neuronów wszystkich warstw ..................................... 38
Rys. 6. Aktywacje neuronów poszczególnych warstw w epoce 130 .................................. 40
Rys. 7. Wartość aktywacji neuronów, epoka 220................................................................ 42
Rys. 8. Wartość aktywacji neuronów, epoka 349................................................................ 43
61
11. Literatura
[1]
R. O’Reilly, Computational Explorations in Cognitive Neuroscience:
Understanding the Mind by Simulating the Brain, The MIT Press, 2000
[2]
S. Osowski, Sieci neuronowe do przetwarzania informacji, Oficyna Wydawnicza
Politechniki Warszawskiej, Warszawa 2000
[3]
http://grey.colorado.edu/emergent/index.php/Leabra - dokumentacja Emergent na
temat algorytmu Leabra
[4]
R. O’Reilly, The Leabra Model of Neural Interactions and Learning in the
Neocortex, Phd Thesis, Carnegie Mellon University, Pittsburgh, PA, 1996
[5]
R. O’Reilly, Computational Cognitive Neuroscience Lectures, University of
Colorado – Boulder, 2006 (http://psych.colorado.edu/~oreilly/cogsim.html)
[6]
W. Duch, Modelowanie funkcji mózgu – wykład, Uniwersytet Mikołaja Kopernika,
Toruń, 2008 (http://www.is.umk.pl/~duch/Wyklady/Mozg-model_plan.html)
[7]
R. Rojas, Neural Networks – A Systematic Introduction, Spring-Verlang, Berlin,
New York, 1996 (http://page.mi.fu-berlin.de/rojas/neural/chapter/K7.pdf)
62
12. Dodatek
12.1. Opis załączonych plików
Na dołączonej do pracy płycie zawarte są następujące informacje:
 elektroniczna wersja niniejszej pracy w formatach Microsoft Word oraz PDF
 wszystkie dane zebrane w procesie uczenia i testowania sieci opisanymi
problemami
 opisane poniżej programy, wykresy i rysunki
12.2. Program do generowania danych wejściowych dla problemu parzystości
Program gen_new.py jest programem napisanym w języku Python 2.7 i służy
generowaniu danych uczących dotyczących problematyki parzystości wymiarowej.
Wewnątrz programu zmienna input_length określa długość generowanych wektorów
wejściowych, a dimensions liczbę aktualnie używanych wymiarów. Z założenia
dimensions ≤ input_lenght. Dane wygenerowane przez program są przygotowane do
bezpośredniego użycia w programie Emergent, jako dane wejściowe (InputData). Zmienna
exact określa, czy generowane dane są wielkością całkowitą (0 lub 1) czy rzeczywistą (dla
0 losowa liczba należącą do przedziału [0.0; 0.2], dla 1 [0.8; 1.0]).
Generowane są dane w postaci pliku *.dat w formacie Emergent’a oraz *.csv do
MatLab’a.
12.3. Program do analizy danych zebranych w trakcie uczenia
Program Emergent Data Viewer został napisany w Visual Studio 2008 w języku
C#. Jego zadaniem jest analiza plików zawierających dane z tabeli TrialOutputData
programu Emergent (dodatkowo program wymaga, by w danych zapisywane były wartości
aktywacji wszystkich warstw – czyli monitorowane były parametry act dla wstecznej
propagacji i act_m dla Leabry).
63
Program potrafi wczytać dane pochodzące z wielu epok, a następnie na ich podstawie
wygenerować wykres błędu SSE, wykres aktywacji neuronów w poszczególnych
warstwach (wykresy dla pojedynczych wektorów oraz zbiorcze dla całej epoki) oraz
wykres sumarycznej znormalizowanej aktywacji warstwy ukrytej w podziale na klasy.
Wykresy wygenerowane przez program były używane w niniejszej pracy.
W niniejszej pracy do analizy danych wejściowych zostały napisane także inne
programy mające przyspieszyć proces. Program eod.py służy do konwersji danych z tabeli
EpochOutputData wygenerowanych w programie Emergent. Program zamienia wskazany
plik w plik *.csv zawierający numer epoki i jej wartość błędu SSE.
Bardziej złożonym programem jest tod.py, którego zadaniem jest ekstrakcja oraz
sortowanie danych pochodzących z tabeli TrialOutputData programu Emergent. Tabela
powinna zawierać także informacje o wartości aktywacji neuronów wszystkich warstw
poprzez monitorowanie parametru act dla wstecznej propagacji oraz act_m dla Leabry.
Utrudnieniem jest to, że w danych wynikowych nie ma informacji o tym, do której klasy
należy dany wektor – jest tylko informacja o tym jak został sklasyfikowany przez sieć. W
tym celu do przeprowadzenia analizy należy wskazać także plik zawierający informacje o
zbiorze wektorów, którym sieć jest uczona. Program wczytuje informację z tego pliku i
zapamiętuje, który wektor powinien należeć do danej klasy, po czym zapisuje wynik w
dwóch kolumnach odpowiadającym klasom wynikowym. Pozwala to na stwierdzenie (bez
patrzenia na błąd SSE), jakie wektory zostały nieprawidłowo sklasyfikowane oraz na
generowanie wykresów jak i obliczenia MDS. Bez tego nie byłoby możliwości
zaznaczenia przynależności punktów do klas.
64

Podobne dokumenty

Spis treści

Spis treści przesyłamy informacje o błędach do neuronów warstwy wyjściowej oraz kolejno do warstw ukrytych, po czym następuje proces aktualizacji wag. Ponieważ wagi aktualizowane są w zależności od wartości ró...

Bardziej szczegółowo