Ć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.).