Zapisz jako PDF

Transkrypt

Zapisz jako PDF
powrót
Spis treści
1 Na poprzednim wykładzie
2 Przyspieszanie uczenia
2.1 Bezwładność
2.2 Adaptacyjny dobór parametrów
2.2.1 Prosty pomysł
2.2.2 Elastyczna wsteczna propagacja błędu
2.2.3 Metoda najszybszego spadku
2.2.4 Metoda gradientu sprzężonego
2.2.5 Metody quasi-Newtona
2.2.6 Algorytm Lavenberg-Marquardt'a
2.2.7 Podsumowanie metod przyspieszania uczenia
3 Problem minimów lokalnych
4 Twierdzenie o potencjalnych możliwościach sieci
5 Generalizacja
5.1 O co tu chodzi?
5.2 Jakie mogą być przyczyny złej generalizacji?
5.2.1 Architektura nie wystarczająca do reprezentacji relacji
5.2.2 Architektura zbyt złożona ...
5.2.2.1 Uczenie z kryterium wczesnego stopu
5.2.2.2 Optymalizacja architektury: Regularyzacja
6 Diagnostyka i debugowanie algorytmu uczącego
Na poprzednim wykładzie
wyprowadziliśmy metodę uczenia wielowarstwowych sieci nieliniowych bazującą na minimalizacji
funkcji kosztu metodą gradientową. W dzisiejszym wykładzie zastanowimy się jak robić to w sposób:
szybszy
zmniejszający ryzyko wpadania w minima lokalne
prowadzący do lepszej generalizacji
Przyspieszanie uczenia
Bezwładność
Przykładowa ewolucja wag na tle
konturu funkcji kosztu. Lewy ślad:
brak bezwładności, prawy z
włączoną bezwładnością
Podobnie jak dla sieci liniowej przyspieszenie uczenia można uzyskać poprzez dodanie członu
bezwładności do formuły zmiany wag:
Dla prawie płaskiej powierzchni kosztu efektywny współczynnik uczenia jest
w przypadku algorytmu bez bezwładności. Dla typowych wartości
i
około 10 krotne przyspieszenie!
razy większy niż
otrzymujemy
Adaptacyjny dobór parametrów
Kiedy obserwujemy proces minimalizacji funkcji błędu to często widać, że stała wartość parametru
uczenia
nie jest optymalna. Czasami widać, że funkcja długi czas maleje prawie monotonicznie wtedy lepiej byłoby mieć większą wartość , kiedy indziej bardzo oscyluje - to świadczy o zbyt dużej
wartości .
Prosty pomysł
Jednym z prostych pomysłów na zautomatyzowanie procesu dobierania wartości
schemat zmiany tego parametru:
jest następujący
Po wykonaniu kroku prowadzącego do zwiększenia funkcji kosztu warto go wycofać.
Elastyczna wsteczna propagacja błędu
Resilient Backpropagation — do zmiany wag wykorzystujemy jedynie informację o znaku gradientu.
W poniższych formułach
to waga łącząca wyjście neuronu q z odpowiednim (q-tym) wejściem
neuronu p.
gdzie:
jest miarą błędu po prezentacji wszystkich bodźców, zaś
gdzie:
:
. Dodatkowo ustala się ograniczenie na możliwe wartości
. Standardowo
a
.
Dla sigmoidalnych funkcji odpowiedzi metoda ta może poprawić uczenie w obszarze ogonów
sigmoidy, gdzie wartość gradientu jest bardzo mała.
Metoda najszybszego spadku
Kolejnej wartości wagi szukamy wzdłuż prostej wyznaczonej przez poprzedni wektor wag
kierunek
, zmieniając tak, aby zminimalizować w danym kierunku :
Kierunek
i
wybieramy przeciwnie do gradientu
Zauważmy, że stary i nowy kierunek minimalizacji są ortogonalne, bo lambda jest dobrana tak, aby
minimalizować funkcję kosztu w kierunku
tzn.:
Ale rozwijając powyższy wzór widzimy, że:
Metoda gradientu sprzężonego
Poprzednią metodę można udoskonalić przez rezygnację z ortogonalności kolejnych kroków:
i trzeba chytrze dobrać tak, aby jak najmniej psuć efekt osiągnięty w poprzednim kroku. Nowy
kierunek szukania powinien więc być taki, aby z dokładnością pierwszego rzędu nie zmieniał
składowej gradientu, która w poprzednim kroku została wyzerowana. A zatem chcemy, aby z
dokładnością do wyrazów pierwszego stopnia, spełnione było:
praktyczny sposób na znalezienie
spełniającego powyższy warunek podaje reguła Polaka-Ribiere‘a:
Metody quasi-Newtona
Oryginalna metoda Newtona polega na minimalizacji funkcji kosztu z wykorzystaniem drugich
pochodnych. Rozwijając
wokół bieżącego wektora wag
mamy:
(∗)
gdzie: H to hesjan (macierz drugich pochodnych cząstkowych
).
Różniczkowanie (*) daje:
chcemy znaleźć minimum
czyli spełnić warunek
:
stąd:
Wzór ten można stosować iteracyjnie. Metoda w oryginalnej postaci jest bardzo kosztowna
obliczeniowo (
) i jest niestabilna numerycznie. Stąd też realne implementacje są nieco inne i
zasadniczo polegają na iteracyjnej aktualizacji hesjanu. Zwykle wymaga mniej kroków niż metoda
gradientów sprzężonych, ale w każdym kroku jest więcej obliczeń i trzeba mieć pamięć na
przechowywanie hesjanu.
Algorytm Lavenberg-Marquardt'a
Metoda ta korzysta z faktu, że hesjan może być przybliżony przez:
gdzie:
— macierz jakobiego (macierz pierwszych pochodnych cząskowych) natomiast
W metodzie tej wagi zmieniamy:
dla
jest to metoda Newtona z przybliżoną wartością hesjanu, dla dużego metoda dąży do
zwykłej metody gradientowej. Metoda Newtona jest szybsza i dokładniejsza w pobliżu minimum .
jest zmniejszane po każdym udanym kroku a zwiększane jeśli w danym kroku
wzrosło.
Podsumowanie metod przyspieszania uczenia
Ogólnie
Za szybkość płacimy ilością koniecznej pamięci i wymaganą precyzją obliczeń
Algorytm Lavenberg-Marquardt'a
jest najszybszym algorytmem w problemach aproksymacji funkcji dla sieci o średniej wielkości
(do kilkuset wag). Prowadzi też, na ogół, w tych problemach do lepszego dopasowania w sensie
błędu średniokwadratowego od pozostałych algorytmów. Jest jednak kosztowny jeśli chodzi o
zapotrzebowanie na pamięć.
Resilient Backpropagation
wydaje się być najlepszy w problemach rozpoznawania wzorców, ale nie nadaje się w zasadzie
do aproksymacji funkcji. Nie jest pamięciożerny.
Algorytm gradientów sprzężonych
jest najbardziej uniwersalnym algorytmem. Ma umiarkowane wymagania co do ilości pamięci.
Zwykła metoda gradientowa
jest najwolniejsza, ale może to być użyteczne jeśli bardziej niż na czasie zależy nam na
generalizacji.
Problem minimów lokalnych
Wszystkie metody minimalizacji funkcji kosztu mogą utknąć w minimach lokalnych. Kilka metod,
które mogą pomóc zmniejszyć problemy z minimami lokalnymi:
uniknięcie wysycenia sigmoid już na samym początku uczenia. Np. dla unormowanego wejścia
i dla sigmoidy z
wybranie początkowych wag losowych o takich wartościach, że średnie
pobudzenie neuronu e jest mniejsze, ale nie za bardzo niż 1 (można losować wagi rzędu
gdzie ilość wejść do jednostki i);
poprawianie wag po każdej prezentacji wzorca, przy czym wzorce prezentowane są w losowej
kolejności;
zastosowanie jednostek stochastycznych — gradient oraz dodatkowy parametr T temperatura
kontrolują prawdopodobieństwo zmiany wagi w określonym kierunku;
delikatne losowe zmiany wag;
przy każdej prezentacji wzorca dodawanie do niego troszkę szumu. Dodanie szumu zawsze
spowolni proces uczenia, przy czym mała dawka może pomóc uniknąć minimów lokalnych,
duża - znacznie spowalnia uczenie.
Twierdzenie o potencjalnych możliwościach
sieci
Sieć nieliniowa co najmniej dwuwarstwowa może aproksymować dowolną funkcję swoich wejść, ze z
góry zadaną dokładnością. Konieczna jest jedynie dostatecznie duża ilość jednostek w warstwach
ukrytych. Do aproksymacji dowolnej funkcji ciągłej wystarcza jedna warstwa ukryta.
Uzasadnienie nieformalne:
1. Każda “rozsądna” funkcja
może być przedstawiona jako liniowa kombinacja
“wypukłości”, z których każda jest różna od zera tylko w pobliżu
.
2. Takie “wypukłości” można skonstruować z dwóch warstw ukrytych.
Gdzie jest problem?
twierdzenie mówi jedynie o istnieniu rozwiązania
w ogólności nie wiadomo ile jednostek w warstwach stanowi “dostatecznie dużą ilość”
nie ma gwarancji, że problem da się rozwiązać metodą wstecznej propagacji błędu, tzn. że
dotrzemy do minimum globalnego funkcji kosztu.
Trywialne twierdzenie
uczenie sieci zawsze się uda jeśli zastosujemy prawidłowy preprocesor.
Jeśli w problemie występują symetrie, to o ile to możliwe warto przenieść ich analizę do fazy
preprocesingu, bo powodują one powstanie w funkcji kosztu okresowości, wielokrotnych minimów
lokalnych, płaskich dolin i wyżyn.
Ze standardowych technik przygotowywania danych (nie tylko dla sieci nuropodobnych) warto
rozważyć:
wyskalowanie danych,
normalizację danych,
przeprowadzenie analizy składowych głównych.
Generalizacja
O co tu chodzi?
Schemat ilustrujący koncepcję generalizacji
Na rysunku obok przedstawiona jest schematycznie koncepcja generalizacji. Wyobraźmy sobie, że
jest pewna przestrzeń P, która zawiera pary, np. liczb {((a,b), c)}. W tym przykładzie jest to
przestrzeń wszystkich odwzorowań
. Niektóre z tych par reprezentują pewną konkretną
relację R: np. są to pary spełniające warunek
. Wyobraźmy sobie dalej, że mamy dane
dwa skończone zestawy par, które tą relację spełniają, ale oczywiście nie są w stanie obejmować
wszystkich możliwych par. Jeden z nich oznaczymy U, a drugi T. Załóżmy, że mamy dwie wersje
sieci, które uczymy na zbiorze U (mogą się one różnić architekturą, albo punktem startu procedury
uczącej, albo ilością iteracji algorytmu uczącego itp.). Po procesie uczenia sieci te mają mały i
porównywalny błąd na zbiorze U, ale jedna z nich nauczyła się relacji wskazanej na rys. jako g1 a
druga relacji g2. Na podstawie rezultatów odtwarzania przykładów ze zbioru testowego mówimy, że
sieć druga ma lepszą generalizację niż sieć pierwsza.
Jakie mogą być przyczyny złej generalizacji?
Architektura nie wystarczająca do reprezentacji relacji
Architektura zbyt złożona ...
... do danego odwzorowania i zbyt długi proces uczenia:
Dotyczy to sytuacji, gdy zbiór uczący zawiera przykłady danej relacji z szumem. Sieć ma tak
dużo parametrów, że jest w stanie nauczyć się szczegółów zbioru uczącego nie związanych z
interesującą nas relacją. Zjawisko takie nazywamy przeuczeniem.
Uczenie z kryterium wczesnego stopu
Prostym rozwiązaniem jest w takim przypadku uczenie z kryterium wczesnego stopu. Polega ono na
tym, że oprócz zbioru uczącego posiadamy rozłączny z nim zbiór testowy. W trakcie uczenia
obliczamy błąd popełniany przez sieć na zbiorze uczącym i na zbiorze testowym. W większości
przypadków powinniśmy w początkowej fazie uczenia obserwować malenie błędu na obu zbiorach.
Oczekujemy, że w pewnym momencie, kiedy sieć zaczyna się uczyć zbędnych szczegółów to błąd na
zbiorze uczącym będzie nadal malał, a na zbiorze testowym zacznie rosnąć. Uczenie prowadzimy
tylko do momentu, kiedy błąd na obu zbiorach maleje. Przykład takiej procedury pokazany jest na
poniższym rysunku.
Optymalizacja architektury: Regularyzacja
Pomysł
zacznijmy od dużej sieci i po pewnym cyklu uczenia przeanalizujmy połączenia w sieci
usuwając mało istotne połączenia lub jednostki. Następnie powtórzmy uczenie.
Można spróbować tak zmodyfikować regułę zmiany wag, aby połączenia nieistotne same dążyły do 0;
po standardowym kroku uczenia zmniejszamy wagi:
(*)
Jest to równoważne modyfikacji funkcji kosztu:
przy
.
Konsekwencje:
rozwiązanie jest “gładsze”
wygładzenie funkcji kosztu likwiduje część minimów lokalnych
Powyższa funkcja kosztu prowadzi do preferowania większej liczby małych wag zamiast jednej dużej.
Sytuację poprawia wyrażenie:
co jest równoważne (*) przy
.
Dzięki temu małe wagi zanikają szybciej niż duże. To załatwia problem zanikania niepotrzebnych
połączeń.
Aby zautomatyzować usuwanie zbędnych jednostek możemy zastosować:
dla wszystkich wejść do jednostki p.
Powoduje to szybsze zanikanie wag dla jednostek, które mają małe wagi wejściowe.
Diagnostyka i debugowanie algorytmu
uczącego
Załóżmy, że zaimplementowaliśmy algorytm uczący na określonym (niewielkim) zbiorze danych.
Mamy 20 % błędnych decyzji. Co z tym robić dalej?
Potencjalnie można:
poprawić algorytm
zdobyć więcej przykładów do ciągu uczącego
wypróbować więcej cech lub ograniczyć przestrzeń cech
pouczyć dłużej albo zmienić algorytm optymalizacyjny
zmienić parametry uczenia (współczynnik szybkości, regularyzacji, itp.)
Każda z tych metod naprawia jakiś (ale inny) problem.
Aby zdiagnozować problem dobrze jest analizować wykresy:
błędu od długości uczenia
czy algorytm jest zbieżny? -> jeśli nie to możemy próbować poprawić to zmniejszając
prędkość uczenia lub zmieniając procedurę optymalizacyjną
błędu od rozmiaru zbioru uczącego
Jeśli błąd na zbiorze uczącym dużo niższy niż na testowym to możemy mieć problem
przeuczenia
można: dodać przykładów, zmniejszyć rozmiar wejścia, włączyć regularyzację
Duży błąd na zbiorze uczącym i na testowym -> źle dobrane cechy lub struktura
klasyfikatora
zmienić zestaw cech
wzbogacić strukturę klasyfikatora (np. więcej jednostek ukrytych)