Laboratorium sztucznych sieci neuronowych

Transkrypt

Laboratorium sztucznych sieci neuronowych
Sztuczna inteligencja w identyfikacji i sterowaniu
Uczenie konkurencyjne w sieciach
samoorganizujących się
Cel ćwiczenia
Celem ćwiczenia jest poznanie samoorganizującej się sieci neuronowej Kohonena oraz algorytmu jej
uczenia.
Wstęp teoretyczny
Wstęp
Metoda propagacji wstecznej błędu wykorzystana w celu uczenia sieci neuronowych posiada istotną
niedogodność, a mianowicie wymaga ona w trakcie uczenia pomocy tzw. nauczyciela, którego
zadaniem jest podawanie dla każdego wzorca wejściowego wzorca oczekiwanej odpowiedzi sieci i
porównywanie oczekiwanych odpowiedzi z rzeczywistymi odpowiedziami generowanymi przez sieć.
Jednakże układ biologiczny jakim jest mózg, w wielu przypadkach jest w stanie uczyć się bez pomocy
nauczyciela, rozpoznając świat na podstawie wrażeń zmysłowych bez żadnych bezpośrednich
instrukcji. Przykładem może być uczenie się noworodka rozpoznawania twarzy swoich najbliższych
lub otaczających przedmiotów. Wielu badaczy w celu zrozumienia procesów zachodzących w sieciach
biologicznych, podjęło się zadania opracowania sieci, która potrafiłaby wykorzystać informacje
zawarte w dużym zestawie wzorców, będąc pozbawioną wiedzy a priori o tym , co one reprezentują.
Sieć powinna odkryć bez zewnętrznej pomocy wzory, cechy , wzajemne zależności, uporządkowanie
danych wejściowych, a następnie podać taką informację na wyjście.
Sieci Kohonena i uczenie konkurencyjne Kohonena
Wśród sieci samoorganizujących się istotną klasę stanowią sieci, których podstawą działania jest
konkurencja między neuronami. Są to zwykle sieci jednowarstwowe, w których każdy neuron jest
połączony ze wszystkimi składowymi wektora wejściowego x (Rys. 1).
Rys.1 Przykładowa struktura sieci Kohonena
Na poszczególnych wejściach każdego neuronu znajdują się wagi tworząc wektor wag wi.
Poszczególne neurony znajdujące się w sieci współzawodniczą ze sobą poprzez porównywanie
swoich wag z odpowiednim składowymi wektora wejściowego x. Zwycięzcą zostaje neuron, którego
wagi najmniej różnią się od wektora wejściowego x. W celu wyznaczenia neuronu zwycięzcy oblicza
się dla każdego neuronu odległość d(x,w) w sensie wybranej metryki między wektorem wag danego
wektora a wektorem sygnałów wejściowych x. Neuron zwycięzca spełnia następujący warunek
d (x, w zwyciezca ) = min d ( x, w i )
1≤i ≤ n
Poniżej zaprezentowano najczęściej stosowane miary odległości w procesie samo organizacji:
Miara euklidesowa
d ( x, w i ) =
iloczyn skalarny
∑ (x
− wi , j )
N
j =1
2
j
d ( x, w i ) = x w i cos( x, w i )
miara Manhattan
d ( x, w i ) =
N
∑x
j =1
j
− wi , j
Neuron zwycięzca wraz z neuronami znajdującymi się w jego sąsiedztwie podlega uczeniu według
reguły Kohonena przedstawionej wzorem 1 (wagi pozostałych neuronów nie są modyfikowane).
Poprzez sąsiedztwo rozumiane jest topologiczne rozmieszczenie neuronów w sieci w pobliżu neuronu
zwycięzcy. Przykład takiego sąsiedztwa został przedstawiony na rys. 2.
w(k+1)=w(k)+η(k)[x-w(k)]
(1)
Rys. 2 Przykładowa sieć Kohonena, neuron nr 13 wygrał współzawodnictwo z innymi neuronami, neurony o nr 8, 14, 18,12 są
sąsiadami neuronu zwycięzcy i ich wagi również podlegają procesowi uczenia.
Modyfikacja wag według reguły danej wzorem 1 powoduję coraz większe upodobnienie zwycięskiego
wektora wag i wektorów wag neuronów sąsiednich do wektora wejściowego czego efektem w
kolejnych iteracjach jest jeszcze większa aktywność zwycięskiego neuronu dla danego zestawu
sygnałów wejściowych.
Zastosowania i ograniczenia
Sieci konkurencyjne używane są między innymi do kompresji i kodowania danych, aproksymacji
funkcji, w analizie statystycznej i optymalizacji kombinatorycznej. Podstawowe ograniczenia to
niemożliwość rozróżnienia większej liczby klas niż liczba neuronów, brak odporności na uszkodzenia
sieci i zakłócenia, niemożliwość porządkowania rozpoznawanych klas.
Praktyczne wskazówki odnośnie symulacji sieci Kohonena w programie Matlab
1. Tworzenie sieci konkurencyjnej
W celu stworzenia sieci konkurencyjnej należy skorzystać z funkcji newc, która posiada następującą
strukturę
net= newc(PR,S,lr)
gdzie net to obiekt opisujący stworzoną sieć, PR macierz z wartościami minimalnymi i maksymalnymi
dla kolejnych wejść, S liczba neuronów, lr krok uczenia.
Stworzona sieć składa się z jednej warstwy neuronów, które nie są w żaden sposób połączone między
sobą. Tylko jeden z neuronów po podaniu sygnałów wejściowych może stać się aktywny i
wygenerować na wyjściu wartość 1 pozostałe neurony w tym czasie są nieaktywne i generują na
swoich wyjściach wartość zero. Każdy neuron posiada wagi, których liczba równa się liczbie wejść
sieci plus bias. Wagi inicjalizowane są za pomocą funkcji midpoint automatycznie w trakcie tworzenia
sieci. Funkcja midpoint rozmieszcza wagi dla poszczególnych neuronów dokładnie w środkach
przedziałów podanych w macierzy PR, czego efektem są takie same sekwencje wag dla wszystkich
neuronów (jeżeli potraktować wagi poszczególnych neuronów jako współrzędne punktów w
przestrzeni sygnałów wejściowych, to punkty te będą leżały w tym samym miejscu). Wszystkie
neurony w sieci po podaniu sygnałów wejściowych współzawodniczą ze sobą, zwycięzcą zostaje
neuron, którego wektor wag jest najbliższy wektorowi danych wejściowych. Aby wyznaczyć zwycięzcę
liczona jest odległość wektora wag poszczególnych neuronów od wektora danych uczących. Wielkość
ta jest zawsze ujemna lub równa zero (gdy wartości danych wejściowych pokrywają się z wagami
badanego neuronu). Z niniejszego faktu wynika, że wygrywa zawsze neuron z największą wartością
odległości d. Aby usprawnić działanie sieci konkurencyjnej specjalne zadanie przydzielono biasom. A
mianowicie może zdarzyć się taka sytuacja, że część zadeklarowanych neuronów będzie leżała
dostatecznie daleko od danych uczących i nigdy nie będzie miała szans wygrać w procesie
współzawodnictwa neuronów. W takim przypadku takie neuronu są neuronami tzw. martwymi
ponieważ nie reprezentują żadnej klasy danych. Aby umożliwić wygraną we współzawodnictwie
neuronom niefortunnie rozmieszczonym daleko od danych uczących systematycznie zwiększa się w
trakcie uczenia bias neuronom, które nie wygrywają w konkurencji z innymi neuronami a zmniejsza się
wartość biasu dla neuronów systematycznie wygrywających. Dzięki niniejszemu podejściu rozwiązuje
się problem martwych neuronów a dodatkowo zyskuje się równomierne rozmieszczenie neuronów na
całej przestrzeni danych wejściowych.
Przykład
P = [.1 .8 .1 .9; .2 .9 .1 .8];
net = newc([0 1; 0 1],2);
net = train(net,P);
a = sim(net,P)
ac = vec2ind(a)
2. Dostęp do wag i biasów sieci odbywa się identycznie jak w sieci perceptronowej.
3. Uczenie sieci konkurencyjnej odbywa się za pomocą funkcji train. W zaimplementowanej dla tej
sieci metodzie uczenia wykorzystano regułę Kohonena, jednakże modyfikacji podlegają wagi
wyłącznie neuronu zwycięskiego. W opisywanym typie sieci nie istnieje pojęcie sąsiedztwa.
net = train(net,P);
Przykład
net.trainParam.epochs=100; % Ustalenie liczby epok uczących
net = train(net,p);
4. Symulacja sieci konkurencyjnej za pomocą funkcji sim
a = sim(net,p);
ac = vec2ind(a);
w wektorze ac otrzymujemy numery aktywnych neuronów dla kolejnych danych z macierzy p
5. Tworzenie mapy Kohonena za pomocą funkcji newsom
net = newsom(PR,D,TFCN,DFCN,OLR,OSTEPS,TLR,TND)
gdzie net to obiekt opisujący stworzoną sieć, PR macierz z wartościami minimalnymi i maksymalnymi
dla kolejnych wejść, D wektor opisujący strukturę fizyczną sieci czyli rozmieszczenie neuronów w sieci
np. wektor [4 3] oznacza siatkę neuronów 4*3, TFCN definiuje fizyczną topologię rozmieszczenia
neuronów, przy czym istnieją trzy możliwe do wyboru struktury: gridtop, hextop i randtop, DFCN
definiuje metodę obliczania odległości w fizycznym rozmieszczeniu neuronów w celu określenia
sąsiedztwa neuronów, użytkownik sieci może wybierać pomiędzy następującymi metrykami dist,
linkdist, mandist, boxdist, gdzie dist to miara euklidesowa, miara linkdist liczy odległość pomiędzy
neuronami jako liczbę połączeń jakie należy przejść od neuronu źródłowego do docelowego, miara
mandist zdefiniowana jest za pomocą następującego wzoru D = sum(abs(x-y)), miara boxdist
zdefiniowana jest za pomocą następującego wzoru Dij = max(abs(Pi-Pj)), OLR to krok uczenia dla
fazy porządkowania, OSTEPS to liczba epok fazy porządkowania, TLR to krok uczenia dla właściwej
fazy uczenia, TND to dystans definiujący sąsiedztwo w fazie właściwego uczenia (proces uczenia dla
opisywanej sieci opisany jest szerzej w podpunkcie opisującym funkcje train). Parametrami mapy
Kohonena są wyłącznie wagi, niniejsza struktura nie posiada biasów. Wagi inicjalizowane są za
pomocą funkcji midpoint. Dystans potrzebny do wyznaczenia zwycięzcy liczony jest identycznie jak w
przypadku sieci konkurencyjnych, jednakże w przypadku omawianej sieci w trakcie, uczenia oprócz
modyfikacji wag neuronu wygrywającego uczeniu podlegają również wagi neuronów które fizycznie
sąsiadują z nim (granicę sąsiedztwa wyznacza parametr TND).
Przykład
P = [rand(1,400)*2; rand(1,400)];
net = newsom([0 2; 0 1],[3 5]);
plotsom(net.layers{1}.positions)
net.trainParam.epochs = 25;
net = train(net,P);
plot(P(1,:),P(2,:),'.g','markersize',20)
hold on
plotsom(net.iw{1,1},net.layers{1}.distances)
hold off
6. Uczenie mapy Kohonena odbywa się za pomocą funkcji train
net = train(net,P);
Proces uczenia mapy Kohonena przebiega dwuetapowo, w pierwszej fazie tzw. fazie porządkowania,
wagi modyfikowane są przy użyciu kroku uczenia zdefiniowanego dla tej fazy, który w kolejnych
krokach systematycznie zmniejsza się aby po ustalonej dla fazy porządkowania liczbie epok osiągnąć
krok uczenia zdefiniowany dla właściwej fazy uczenia. Sąsiedztwo w pierwszej epoce fazy
porządkowania obejmuje swoim zasięgiem wszystkie neurony, ale systematycznie zmniejsza się aby
po ustalonej liczbie epok fazy porządkowania osiągnąć zakres sąsiedztwa zdefiniowany dla fazy
właściwego uczenia. Po fazie porządkowania następuje faza właściwego uczenia, do tego momentu
wagi w przestrzeni wag powinny stworzyć strukturę przypominającą fizyczne rozmieszczenie
neuronów. Krok uczenia w drugiej fazie jest znacznie mniejszy niż w drugiej, ponieważ przewidywane
są jedynie drobne korekty w wartościach wag poszczególnych neuronów. Jednocześnie sąsiedztwo
neuronów dotyczy najczęściej tylko najbliższych zwycięskiemu neuronowi sąsiadów. Uczenie
neuronów sąsiednich przebiega z krokiem o połowę mniejszym niż neuronu zwycięskiego a wagi
pozostałych neuronów nie są modyfikowane.
Zadania
Zbudować system kompresji plików graficznych formatu BMP za pomocą sieci konkurencyjnej oraz
mapy Kohonena.
a) wybrać 3 struktury sieci konkurencyjnej następnie przeprowadzić uczenie każdej sieci, wybrać
sieć która skompresowała obrazek w największym stopniu (zdefiniować i policzyć
współczynnik kompresji) oraz wybrać sieć, która odtwarza obrazek z najlepszym efektem
(każdą sieć uczyć przy takich samych ustawieniach)
b) powtórzyć operacje wymienione w podpunkcie a dla mapy Kohonena
c) wybrać jedną sieć konkurencyjną dającą najlepsze efekty wizualne a następnie zbadać wpływ
wielkości wzorca kompresji poprzez wybór trzech wzorców i porównanie stopnia kompresji
oraz jakości odtwarzania uzyskanych dla wzorców o wybranych rozmiarach
d) powtórzyć ćwiczenie z podpunktu c dla mapy Kohonena
e) porównać stopień kompresji sieci konkurencyjnej, która odtwarza obrazek z najlepszym
efektem ze stopniem kompresji mapy Kohonena, która odtwarza obrazek z najlepszym
efektem wizualnym