Ćwiczenie 5: UCZENIE SIECI WIELOWARSTWOWYCH. METODA
Transkrypt
Ćwiczenie 5: UCZENIE SIECI WIELOWARSTWOWYCH. METODA
Nowoczesne techniki informatyczne - Ćwiczenie 5: UCZENIE WIELOWARSTWOWEJ SIECI JEDNOKIERUNKOWEJ Ćwiczenie 5: str. 1 UCZENIE SIECI WIELOWARSTWOWYCH. METODA WSTECZNEJ PROPAGACJI BŁĘDU WYMAGANIA 1. Sztuczne sieci neuronowe • budowa sieci jednokierunkowych, • metoda wstecznej propagacji błędu, • rola funkcji celu podczas uczenia sieci 2. Środowisko Matlab, w szczególności z zakresu: • tworzenia sieci jednokierunkowej (newff), znaczenia parametrów tworzonego obiektu net • uczenia sieci (train) • symulacja pracy sieci (sim) WPROWADZENIE TEORETYCZNE MoŜliwości pojedynczych sztucznych neuronów są bardzo ograniczone, jednak poprzez połączenie sztucznych neuronów w sieci ich moŜliwości bardzo gwałtownie wzrastają i ujawnia się rzeczywista moc obliczeń neuronowych. Jest ona wynikiem jednoczesnej (równoległej) pracy wielu neuronów połączonych w sieci tworzące róŜnorodne struktury (architektury). Ze względu na architekturę wyróŜnia się: • sieci jednokierunkowe (jednowarstwowe i wielowarstwowe) • sieci rekurencyjne • sieci komórkowe Sieci jednokierunkowe (feedforward) Sieci jednokierunkowe wielowarstwowe cieszą się największym zainteresowaniem spośród wszystkich znanych architektur sztucznych sieci neuronowych. Spowodowane jest to prostą ich strukturą - łatwą do opisania, jak równieŜ prostymi i łatwymi do realizacji metodami uczenia tychŜe sieci. NaleŜy podkreślić, Ŝe taka struktura sieci jest zbliŜona do budowy mózgu, który równieŜ posiada strukturę warstwową, w duŜej części jednokierunkową. Rys. 5.1 Schemat sieci jednokierunkowej wielowarstwowej Nowoczesne techniki informatyczne - Ćwiczenie 5: UCZENIE WIELOWARSTWOWEJ SIECI JEDNOKIERUNKOWEJ str. 2 W sieciach jednokierunkowych moŜna wyróŜnić uporządkowane warstwy neuronów (w tym warstwę wejściową i warstwę wyjściową). Liczba neuronów w kaŜdej z warstw moŜe być róŜna, przy czym w danej warstwie wszystkie neurony maja taką sama funkcję przejścia – neurony z róŜnych warstw mogą mieć róŜne funkcje przejścia. Połączenia występują tylko pomiędzy neuronami z sąsiednich warstw, wg zasady „kaŜdy z kaŜdym” i mają one charakter asymetryczny. Sygnały przesyłane są od warstwy wejściowej poprzez warstwy ukryte (jeśli występują) do warstwy wyjściowej (w jednym kierunku). Neurony warstwy wejściowej posiadają tylko jedno wejście i uproszczoną funkcję przejścia (umownie jest to warstwa zerowa sieci). Zadaniem neuronów z warstwy wejściowej jest wstępna obróbka sygnału (np.: normalizacja, kodowanie itp.). Z kolei za przetwarzanie decyzyjne odpowiedzialne są neurony warstw ukrytych i warstwy wyjściowej, a odpowiedź udzielana jest przez neurony warstwy wyjściowej. WaŜnym problem jest dobór właściwych funkcji aktywacji dla neuronów w poszczególnych warstwach wielowarstwowej sieci jednokierunkowej. Najczęściej w warstwach ukrytych wykorzystuje się funkcje aktywacji typu sigmoidalnego (sinus hiperboliczny, tangens hiperboliczny). Natomiast typ funkcji aktywacji neuronów warstwy wyjściowej zaleŜy od przeznaczenia sieci – konieczne jest dostosowanie typu funkcji przejścia do wartości odpowiedzi jakich spodziewamy się na wyjściu sieci. Funkcje sigmoidalne ograniczają wartości wyjścia do przedziału (0,1) lub (-1,1) dlatego teŜ bardzo często konieczne jest zastosowanie w warstwie wyjściowej neuronów z liniową funkcją przejścia, gdyŜ nie limituje ona w Ŝaden sposób wartości odpowiedzi. Zbudowanie sieci wielowarstwowej, w której neurony, kaŜdej warstwy posiadają liniowe funkcje przejścia jest bezcelowe, gdyŜ złoŜenie funkcji liniowych jest funkcją liniową i taka sieć wielowarstwową moŜna zastąpić siecią jednowarstwową. Uczenie sieci jednokierunkowych Uczenie sieci jednokierunkowych moŜe być realizowane w trybie nadzorowanym (z nauczycielem) i trybie nienadzorowanym (bez nauczyciela). Uczenie w trybie nadzorowanym wymaga znajomości oczekiwanych odpowiedzi neuronów poszczególnych warstw. Niestety znane są one tylko dla warstwy wyjściowej, dla warstw ukrytych nie są one określone! Problem ten przez wiele lat stawiał pod znakiem zapytania moŜliwość efektywnego uczenia sieci wielowarstwowych. Dopiero opracowanie metody, która pozwalała matematycznie wyznaczyć błąd popełniany przez neurony warstw ukrytych - na podstawie błędu warstwy wyjściowej - i wykorzystanie go do korekty wag neuronów tychŜe, warstw umoŜliwił efektywne wykorzystanie reguł uczenia nadzorowanego do treningu sieci wielowarstwowych. Metoda ta nosi nazwę metody wstecznej propagacji błędu (backpropagation) i jej idea jest powszechnie stosowana do uczenia sieci wielowarstwowych. Istnieje wiele metod uczenia sieci jednokierunkowych wielowarstwowych. Do najwaŜniejszych naleŜy zaliczyć: • Back Propagation (metoda wstecznej propagacji błędów), • Quick Propagation (metoda szybka propagacji błędów). • Conjugate Gradients (metoda gradientów sprzęŜonych), • Quasi-Newton (metoda zmiennej metryki), • Levenberg – Marquardt (metoda paraboloidalnych modeli funkcji błędów), Algorytm wstecznej propagacji błędu Algorytm wstecznej propagacji błędu zdecydowanie dominuje wśród metod uczenia jednokierunkowych sieci wielowarstwowych. Nazwa metody oddaje zasadę jej Nowoczesne techniki informatyczne - Ćwiczenie 5: UCZENIE WIELOWARSTWOWEJ SIECI JEDNOKIERUNKOWEJ str. 3 działania, która polega na „przenoszeniu" błędu, jaki popełniła sieć, w kierunku od warstwy wyjściowej do warstwy wejściowej (a więc wstecz w stosunku do kierunku przepływu informacji). Rys. 5.2. Schemat sieci realizującej uczenie metodą wstecznej propagacji błędu. Cykl uczenia metodą wstecznej propagacji błędu (backpropagation) składa się z następujących etapów: 1. Wyznaczenie odpowiedzi neuronów warstwy wyjściowej oraz warstw ukrytych na zadany sygnał wejściowy. 2. Wyznaczenie błędu popełnianego przez neurony znajdujące się w warstwie wyjściowej i przesłanie go w kierunku warstwy wejściowej. 3. Adaptacja wag. Algorytm wstecznej propagacji błędu (backpropagation) określa procedurę korekty wag w sieci wielowarstwowej przy wykorzystaniu gradientowych metod optymalizacji. Korekta wektora wag sieci oparta jest na minimalizacji funkcji miary błędu (funkcji celu), którą określono jako sumę kwadratów błędów na wyjściach sieci. JeŜeli aktualizacja wag uczonych neuronów odbywać się będzie po prezentacji kaŜdego elementu wówczas funkcja celu ma postać: 2 E= 1 m ∑ (zk (t ) − y k (t )) 2 k =1 Alternatywnym podejściem jest korekta wag po prezentacji całego ciągu uczącego wówczas w funkcji celu naleŜy uwzględnić liczbę wektorów wejściowych. W celu minimalizacji błędu średniokwadratowego moŜna wykorzystać regułę najszybszego spadku. ∆w kj = −η ∂ E ∂ w kj Po przekształceniach uzyskujemy zaleŜności na wielkość korekty wag: • dla warstwy wyjściowej sieci: ∆w kjwyj = η (zk − y kwyj ) d f wyj xj du kwyj = zk − y kwyj określa błąd popełniany przez k-ty neuron warstwy gdzie: czynnik δwyj k wyjściowej sieci: Nowoczesne techniki informatyczne - Ćwiczenie 5: UCZENIE WIELOWARSTWOWEJ SIECI JEDNOKIERUNKOWEJ • str. 4 dla warstw ukrytych: ∆w = η∑ (z m 1 ji k −y wyj k k =1 ) d f(u du wyj k wyj k ) w wyj kj d f(u 1j ) wej xi du 1j Szukając analogii pomiędzy wzorami opisującymi korektę wag w warstwie wyjściowej i warstwach ukrytych moŜna określić błąd popełniany poprzez neurony analizowanej warstwy ukrytej: δ1i = ∑ (zk − y kwyj ) m k =1 d f(u 1j ) wyj w kj du 1j Błąd ten moŜna uzaleŜnić bezpośrednio od błędu popełnianego poprzez neurony warstwy wyjściowej: m d f(u 1j ) k =1 du 1j δ 1j = ∑ δwyj k w kjwyj Równanie powyŜsze pozwala wyznaczyć błąd dla dowolnego neuronu warstwy ukrytej w funkcji błędów neuronów, które on pobudza. Innymi słowy umoŜliwia przenoszenie błędu wstecz (od warstwy wyjściowej ku wejściowej). MoŜna więc dla kaŜdego neuronu sieci określić błąd, jaki on popełnia, a jest to niezbędne, jeŜeli chce się zastosować regułę Delty. Podsumowując, algorytm wstecznej propagacji błędu moŜna zapisać następująco: 1. Wygeneruj losowo wektory wag. 2. Podaj wybrany wzorzec na wejście sieci. 3. Wyznacz odpowiedzi wszystkich neuronów wyjściowych sieci: l −1 y kwyj = ∑ w kjwyj y wyj j j =1 f 4. Oblicz błędy wszystkich neuronów warstwy wyjściowej: δwyj = zk − y kwyj k 5. Oblicz błędy w warstwach ukrytych (pamiętając, Ŝe, aby wyznaczyć błąd w warstwie h - 1, konieczna jest znajomość błędu w warstwie po niej następującej - h): δ hj−1 = d f(u hj−1 ) l h h ∑ δkw kj du hj−1 k =1 6. Zmodyfikuj wagi wg zaleŜności: w hji −1 = w hji −1 + ηδ hj −1y ih −1 7. JeŜeli wartość funkcji celu jest zbyt duŜa wróć do punktu 2. W praktyce metoda wstecznej propagacji błędu okazuje się bardzo skuteczna, niestety, charakteryzuje się ona długim czasem uczenia. Przebieg procesu uczenia sieci backpropagation silnie zaleŜy od wielkości współczynnika uczenia η, zbyt duŜa Nowoczesne techniki informatyczne - Ćwiczenie 5: UCZENIE WIELOWARSTWOWEJ SIECI JEDNOKIERUNKOWEJ str. 5 jego wartość prowadzi często do rozbieŜności tego procesu, a zbyt mała bardzo go wydłuŜa. Niestety, nie ma reguł które potrafiłyby określić precyzyjnie jego wartość. Dobór architektury sieci i danych uczących Dobór odpowiedniej struktury wielowarstwowej sieci neuronowej oraz dobór danych do jej uczenia są podstawowymi zadaniami, z jakimi stykamy się chcąc wykorzystać sieci neuronowe do rozwiązywania jakiegokolwiek problemu. Zaprojektowana sieć musi być dopasowana do zadania, które ma rozwiązywać, dane uczące muszą zawierać wszystkie cechy charakterystyczne dla problemu (populacji generalnej). W praktyce oznacza to wybór liczby warstw sieci i ilości neuronów w tych warstwach oraz ustalenie długości ciągu uczącego. Dodatkowo trzeba odpowiedzieć na pytanie jak długo sieć naleŜy uczyć. Rozwiązanie niektórych z tych problemów w pewnych przypadkach moŜna wykonać w oparciu o twierdzenia matematyczne, inne moŜna jedynie oszacować. Dobór danych uczących Najczęstszym stwierdzeniem przy doborze długości ciągu uczącego jest określenie, iŜ powinien on być reprezentatywny, tzn. powinien dobrze oddawać charakterystyczne cechy analizowanych danych. Dzięki temu sieć nauczona na takim ciągu wykorzystując zdolność do generalizacji powinna charakteryzować się wysoką efektywnością pracy. Istnieje wiele sposobów liczbowej oceny generalizacji, jej miarą moŜe być np.: średnia liczba alternatywnych generalizacji zbioru treningowego, prawdopodobieństwo, Ŝe trenowana sieć generuje prawidłowy sygnał wyjściowy dla losowo wybranego wejścia w sensie średnim, prawdopodobieństwo, Ŝe trenowana sieć generuje w najgorszym przypadku prawidłowy sygnał wyjściowy dla losowo wybranego wejścia. Liczba warstw ukrytych Sieć wielowarstwowa moŜe posiadać teoretycznie kilka lub nawet kilkanaście warstw ukrytych; w praktyce jednak stosuje się sieci z jedną a rzadziej dwoma warstwami ukrytymi. O tym, iŜ dwie warstwy ukryte wystarczają, świadczą analizy matematyków zajmujących się aproksymacją funkcji wielu zmiennych. NaleŜy zauwaŜyć jedynie, Ŝe sztuczna sieć neuronowa pełni funkcję układu aproksymującego dane uczące. Proces uczenia zapewnia dobór współczynników tej funkcji aproksymującej (są to wektory wag poszczególnych neuronów). Na etapie odtwarzania przy ustalonych wartościach wag, następuje jedynie proste obliczanie wartości funkcji aproksymującej. W myśl twierdzenia Kołmogorowa aproksymacja dowolnej funkcji ciągłej jest moŜliwa przy uŜyciu sieci z jedną warstwą ukrytą, a w celu aproksymacji funkcji nieciągłej konieczne jest uŜycie dwóch warstw ukrytych. Oczywiście przytoczone twierdzenie stawia tylko minimalne warunki na liczbę warstw sieci gwarantującą rozwiązanie. Zastosowanie więc większej liczby niŜ wynikająca z twierdzenia jest dopuszczalne, ale naleŜy pamiętać, Ŝe kaŜda dodatkowa warstwa mocno wydłuŜa czas uczenia sieci, a ponadto wzrasta liczba minimów lokalnych, w których sieć moŜe utknąć podczas procesu uczenia. JeŜeli jednak uczenie sieci o liczbie warstw dobranej tak, aby spełnić minimum postawione przez twierdzenie Kołmogorowa przebiega źle, to nie pozostaje nic innego jak dołoŜyć kolejną warstwę ukrytą. Oczywiście dołoŜenie Nowoczesne techniki informatyczne - Ćwiczenie 5: UCZENIE WIELOWARSTWOWEJ SIECI JEDNOKIERUNKOWEJ str. 6 kolejnej warstwy pozwala najczęściej zredukować liczbę neuronów w warstwie ukrytej juŜ istniejącej. Rozmiary warstw sieci Ustalenie ilości neuronów w warstwach wejściowej i wyjściowej sztucznej sieci neuronowej nie stwarza Ŝadnych problemów. Liczba neuronów w warstwie wejściowej jest zdeterminowana przez długość wektora wejściowego, analogicznie liczba neuronów w warstwie wyjściowej powinna być równa ilości rozróŜnianych przez sieć klas. Ustalenie odpowiedniej liczby neuronów w warstwie ukrytej nie jest, niestety, tak łatwe jak w przypadku warstwy wejściowej bądź teŜ wyjściowej, a jest to jeden z waŜniejszych czynników wpływających na efektywność pracy sieci i przebieg procesu uczenia. UŜycie za małej ich liczby pozbawi sieć środków niezbędnych do rozwiązania problemu. UŜycie zbyt wielu zwiększy czas uczenia i moŜe przynieść efekt tzw. nadmiernego dopasowania, gdyŜ sieć będzie się uczyć nieistotnych cech zbioru uczącego, które są niewaŜne w populacji generalnej. Zadaniem sieci jest podzielenie r - wymiarowej przestrzeni obrazów na s - separowalnych obszarów. W przypadku sieci z jedną warstwą ukrytą zbudowaną z l - neuronów, zadanie to spoczywa właśnie na tej warstwie. Liczbę neuronów warstwy ukrytej moŜna wówczas wyznaczyć z zaleŜności: l = log 2 s Innym sposobem przybliŜonego określenia niezbędnej liczby neuronów w warstwie ukrytej moŜe być tzw. reguła piramidy geometrycznej, która mówi, Ŝe „dla wielu praktycznych zastosowań sieci liczba neuronów w warstwach tworzy kształt piramidy, przy czym liczba neuronów maleje od wejścia w kierunku wyjścia”. Oznacza to, Ŝe neurony poszczególnych warstw tworzą ciąg geometryczny, czyli dla sieci o n wejściach, m - wyjściach z jedną warstwą ukrytą, liczbę neuronów w tej warstwie moŜna wyznaczyć z zaleŜności: l = nm Doświadczenie pokazuje, Ŝe obie powyŜsze zaleŜności moŜna traktować jako wzory określające minimalną liczbę neuronów przy, której sieć się uczy zadanego problemu. Jak długo uczyć sieć? Inny problem to wpływ sposobu i czasu uczenia na zdolność uogólniania sieci. W ogólnym przypadku wraz z upływem czasu błąd uczenia maleje i błąd testowania równieŜ. Taka sytuacja trwa zwykle do pewnego momentu uczenia, poczynając od którego błąd testowania bądź pozostaje stały, bądź zaczyna nieznacznie rosnąć, chociaŜ błąd uczenia nadal maleje. Literatura podaje, iŜ wynika to zwykle z ograniczonej liczby próbek uczących. W pewnym momencie procesu uczenia - zwykle w jego końcowych fazach - sieć zaczyna uczyć się pewnych cech charakterystycznych dla elementów zbioru uczącego, a nieistotnych w populacji generalnej i powoduje to wzrost błędu testowania. Tendencje te są tym większe im większa nadmiarowość wag występuje w sieci. Zaradzić temu moŜna redukując liczbę neuronów w warstwie ukrytej do tego stopnia, aŜ sieć utraci zdolność uczenia się szczegółów albo zwiększając rozmiar ciągu uczącego. Nowoczesne techniki informatyczne - Ćwiczenie 5: UCZENIE WIELOWARSTWOWEJ SIECI JEDNOKIERUNKOWEJ str. 7 PRZEBIEG ĆWICZENIA Zadanie 1 Opracować skrypt tworzący jednokierunkową sieć neuronową złoŜoną z 2 neuronów z sigmoidalną funkcją przejścia w warstwie ukrytej oraz z 1 neuronu liniowego w warstwie wyjściowej i przeprowadzić jej uczenie metodą wstecznej propagacji błędu (‘traingd’) sieci reguł bramki XOR - P=[1 1 0 0 ;1 0 1 0]; T=[0 1 1 0]; Ustalić parametr określający liczbę epok uczenia na 1000, wartość współczynnika uczenia na 0.1 oraz maks. dopuszczalna wartość funkcji celu na 0.00001 Dla nauczonej sieci zasymulować jej pracę. Skomentować uzyskane rezultaty. Zadanie 2 Dla przykładu rozwiązanego w zadaniu 1 sprawdzić wpływ liczby neuronów (3 róŜne wartości) w warstwie ukrytej oraz wartości współczynnika uczenia (3 róŜne wartości róŜniące się o jeden rząd) na przebieg procesu uczenia. Wykonać symulacje dla dwóch kombinacji funkcji przejścia neuronów (np.: sigmoidalna+liniowa, tangensoidalna+liniowa itp.).