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