Spis treści Maszyny Wektorów Wspierających 2

Transkrypt

Spis treści Maszyny Wektorów Wspierających 2
powrót
Spis treści
1 Maszyny Wektorów Wspierających 2
1.1 SVM w formaliźmie Lagranga
1.2 Przejście do pstaci dualnej
1.2.1 Wyznaczenie parametrów modelu:
1.2.2 Klasyfikacja:
2 Funkcje jądrowe
2.1 Mapowanie do przestrzeni wielowymiarowych
2.2 Sprytne liczenie iloczynów skalarnych
2.3 Twierdzenie Mercera
3 Regularyzcja i przypadki nieseparowalne liniowo
4 Algorytm SMO - sekwencyjnej minimalnej optymalizacji
4.1 Optymalizacja osiowa
4.2 Algorytm SMO
Maszyny Wektorów Wspierających 2
SVM w formaliźmie Lagranga
W ostatnim wykładzie doszliśmy do tego, że problem znalezienia klasyfikatora optymalnego pod
względem marginesów można wyrazić w następujący sposób:
Można go przepisać w takiej postaci aby pasowała do formalizmu uogólnionej metody Lagrangea,
którą omówiliśmy na poprzednim wykładzie:
Każdy przykład z ciągu uczącego dodaje nam jeden wiąz . Do uogólnianego Lagrangianu warunki
te wchodzą z wagami . Można zauważyć na podstawie warunków KKT, że tylko te
są niezerowe
(tak konkretnie to
), dla których warunek jest spełniony z równością, tzn.
. Są to
punkty położone najbliżej hiperpowierzchni decyzyjnej. To właśnie te punkty nazywane są wektorami
wspierającymi. Później okaże się, że fakt iż wektorów wspierających jest tak na prawdę mało jest
bardzo użyteczny.
Lagrangian dla problemu SVM w postaci pierwotnej wygląda tak:
W Lagrangianie występują tylko mnożniki , ponieważ mamy więzy tylko w postaci nierówności.
Przejście do pstaci dualnej
Teraz zajmiemy się formułowaniem problemu optymalizacyjnego (%i 1) w postaci dualnej. Pozwoli
nam to na rozwiązywanie problemów, które nie są separowalne liniowo. Najpierw uzyskajmy . Aby
to uczynić musimy zminimalizować po i , trzymając stałe. W tym celu policzymy pochodną
po i po i położymy je równe zero:
Stąd:
Dla
mamy:
Jeśli teraz weźmiemy
z (%i 4) i wstawimy do Lagrangianu (%i 3) to otrzymamy:
Ale z równania (%i 5) wynika, że ostatni człon tego wyrażenia jest równy zero, więc mamy:
Pojawiające się tu wyrażenie
dalej zapisywać jako
to iloczyn skalarny wektorów
oraz
, bedziemy je
. Zatem nasz dualny problem optymalizacyjny można zapisać tak:
Spełnione są warunki KKT, zatem rozwiązanie tego problemu dualnego jest też rozwiązaniem
naszego problemu pierwotnego.
Wyznaczenie parametrów modelu:
Zakładając, że mamy algorytm znajdujący , które maksymalizują
(będzie o nim w dalszej części
tego wykładu) możemy podstawić to
do równania (%i 4) i wyznaczyć
:
a następnie obliczyć optymalne
ze wzoru:
Klasyfikacja:
Teraz chcąc przewidzieć jaką klasę przydzielić nowemu przypadkowi
musielibyśmy policzyć
i jeśli otrzymamy wartość ujemną to klasyfikujemy jako typ
wypadku jako 1. Skorzystajmy w tych obliczeniach z równania (%i 4):
Zatem aby wykonać klasyfikację nowego przypadku
musimy obliczyć jego iloczyn skalarny z
wektorami wspierającymi ze zbioru uczącego (tymi, dla których
zbiorze uczącym
a w przeciwnym
, dla pozostałych wektorów w
), a tych jak już wcześniej wspominaliśmy jest zazwyczaj niewiele.
Samo obliczanie iloczynów skalarnych można przeprowadzić bardzo wydajnie stosując odpowiednie
funkcje jądrowe.
Funkcje jądrowe
Mapowanie do przestrzeni wielowymiarowych
Nasze dotychczasowe algorytmy klasyfikacyjne, z wyjątkiem nieliniowych sieci wielowarstwowych,
były ograniczone do rozwiązywania problemów separowalnych liniowo. Okazuje się jednak, że często
można uczynić problem separowalnym liniowo poprzez przemapowanie oryginalnych danych
wejściowych do jakiejś więcej wymiarowej przestrzeni. Dla przykładu rozważmy dwa zbiory punktów
jednowymiarowych. Jeden zbiór skupiony jest wokół zera a drugi rozłożony równomiernie po lewej i
prawej jego stronie. Przechodząc ze zmiennych
do
punkty stają się liniowo separowalne.
W ogólności wprowadzimy funkcję mapującą
, która przenosi punkty z oryginalnej przestrzeni
wejściowej do rozszerzonej przestrzeni cech. W powyższym przykładzie byłoby to:
Aby skorzystać z takiego mapowania wystarczy w naszych algorytmach uczących zamienić wszędzie
na
. Podobnie możemy postąpić z algorytmem SVM. W postaci dualnej algorytm SVM jest
wyrażony całkowicie przez iloczyny skalarne. Możemy zatem zastąpić wszystkie wyrażenia
przez
.
Sprytne liczenie iloczynów skalarnych
Dla danego mapowania
zdefiniujemy jądro (kernel):
wtedy wszędzie gdzie w algorytmie występuje
wstawiamy
i otrzymujemy algorytm
działający w przestrzeni, do której mapuje . Co ciekawe okazuje się, że w wielu praktycznie
interesujących przypadkach, aby obliczyć
nie musimy wcale przechodzić całej drogi:
(taka droga zresztą mogła by być niewykonalna, np. w przypadku
mapowania do przestrzeni nieskończenie wymiarowej). Rozważmy przykład:
Rozpisując to wyrażenie na współrzędne otrzymujemy:
Widzimy tu, że jeśli popatrzeć na
tak:
mapowaniem , które w jawnej postaci dla
to owo
wyglądałoby tak:
związane jest z
Zauważmy, że samo obliczenie mapowania w tym przypadku jest operacją o złożoności obliczeniowej
natomiast obliczenie jądra za pomocą równia (%i 9) jest operacją o złożoności obliczeniowej
.
Podobne własności ma jądro:
Jawna postać mapowania odpowiadającego temu jądru wygląda następująco (dla
):
czyli zawiera zarówno wyrazy pierwszego rzędu ( ) oraz drugiego rzędu (
kontroluje względny udział części liniowej.
). Parametr
W ogólności jądro postaci
odpowiada mapowaniu do
wymiarowej
przestrzeni parametrów, której wymiary są rozpięte przez wszystkie iloczyny typu
aż
do rzędu . Dzięki sztuczce z jądrem nigdy nie musimy jawnie obliczać tych wielowymiarowych
wektorów i obliczenia nadal mają złożoność
.
Twierdzenie Mercera
Na jądro możemy patrzeć jak na funkcję, która jest jakąś miarą podobieństwa pomiędzy
wektorami cech. W szczególności gdyby nasze wektory cech były znormalizowane do jedynki to
duża wartość jądra
odpowiadałaby wektorom bardzo podobnym, zaś wartość
jądra bliska zeru odpowiadałaby wektorom cech, które są do siebie prawie ortogonalne, tzn. mało
podobne. Idąc tym tropem możemy zapostulować także inne funkcje jądra, które w jakimś sensie
mogłyby stanowić miarę podobieństwa między wektorami. Popularną funkcją jest np. funkcja
Gaussa, prowadząca do jądra Gaussowskiego następującej postaci:
Jak w ogólności sprawdzić czy wymyślona przez nas funkcja jest dobrym kandydatem na jądro?
Rozważymy to najpierw na przykładzie a potem podamy ogólne twierdzenie. Załóżmy, że mamy
pewną funkcję , która jest jądrem pewnego mapowania . Załóżmy dalej, że mamy pewien zbiór
punktów
. Zdefiniujmy macierz
zwaną macierzą jądra w taki sposób, że jej
element dany jest wzorem:
Zauważmy, że macierz ta musi być symetryczna, bo:
Druga obserwacja jest następująca. Niech
dowolnego wektora mamy:
oznacza -tą współrzędną wektora
Ponieważ powyższe obliczenie pokazuje, że dla dowolnego
oznacza, że macierz
jest dodatnio określona.
wyrażenie
. Wtedy dla
jest nieujemne to
Pokazaliśmy w tym przykładzie, że jeśli mamy jakieś mapowanie i związane z nim jądro
to
macierz jądra jest symetryczna i dodatnio określona. Okazuje się, że jest to warunek konieczny i
wystarczający, aby funkcja
była jądrem, jest to twierdzenie Mercera.
Warto sobie uświadomić, że podejście "jądrowe" ma znacznie szersze zastosowanie niż tylko
algorytm SVM. Jeśli tylko jesteśmy w stanie wyrazić algorytm w postaci bazującej na iloczynach
skalarnych
(da się to w szczególności zrobić np. dla regresji logistycznej) to zamiana tych
iloczynów na funkcje jądra daje nam algorytm działający efektywnie w przestrzeni, do której
przenosi nas odwzorowanie . Dzięki temu można spowodować, że wiele problemów, które nie są
separowalne liniowo w pierwotnej przestrzeni wejść staje się separowalna liniowo w tej nowej,
więcej wymiarowej przestrzeni.
Regularyzcja i przypadki nieseparowalne liniowo
Zaprezentowana dotychczas wersja SVM zakładała, że dane są liniowo separowalne. Sztuczka z
jądrem mapującym zwiększa co prawda szansę na otrzymanie problemu liniowo separowalnego, ale
nie daje na to gwarancji. Co więcej w dotychczasowej wersji nasz algorytm SVM jest bardzo podatny
na outliery, czyli przypadki odstające. (Pokażemy to na ćwiczeniach)
Aby poprawić oba te problemy można zastosować regularyzację:
Oznacza ona tyle, że zgadzamy się na to, że nie wszystkie marginesy funkcyjne są większe niż 1
(przypomnijmy, że ujemny margines funkcyjny odpowiadał złej klasyfikacji), ale karzemy algorytm za
naruszanie tego warunku przez zwiększanie funkcji celu. Parametr kontroluje jak bardzo nie
podoba nam się błędne klasyfikowanie przypadków.
Aby rozwiązać ten problem optymalizacyjny też posłużymy się mnożnikami Lagrangea. Formułujemy
Lagrangian następującej postaci:
gdzie
i
są mnożnikami Lagrangea. Przejście do postaci dualnej polega na policzeniu
pochodnej Lagrangianu względem i , przyrównaniu od zera i podstawieniu otrzymanych wyrażeń
ponownie do Lagragianu (tak jak tu –tu link–) otrzymujemy problem dualny następującej postaci:
Do rozwiązania powyższego problemu dobrze stosuje się algorytm SMO (Sequential Minimal
Optimization) [opis algorytmu zaproponowanego przez J. Platta (1998)]. Po wyznaczeniu za jego
pomocą parametrów i można wykonywać predykcję nowych przykładów zgodnie z równaniem
(%i 8).
Algorytm SMO - sekwencyjnej minimalnej optymalizacji
Zanim przejdziemy do omówienia właściwego algorytmu SMO zrobimy dygresję na temat
optymalizacji osiowej.
Optymalizacja osiowa
Załóżmy, że chcemy rozwiązać następujący problem optymalizacyjny bez więzów:
Jeśli funkcja
jest wypukła to algorytm, który w pętli kolejno optymalizuje jedno , trzymając w
danym kroku optymalizacyjnym pozostałe alfy stałe, jest zbieżny. (na tablicy rysunek konturowy
paraboloidy ze zbiegającym osiowo rozwiązaniem)
Algorytm SMO
Chcemy rozwiązać problem optymalizacyjny (%i 10). Nie da się do niego zastosować algorytmu
optymalizacji osiowej bo drugi warunek narzuca więzy na . Jeśli ustalimy
wartości
to
ostatnia -ta wartość też już jest ustalona:
Lub korzystając z faktu, że
.
i mnożąc stronami przez
mamy:
Zatem najmniejszy możliwy problem optymalizacyjny wymaga jednoczesnej optymalizacji dwóch
parametrów . Najogólniej algorytm SMO wygląda więc następująco:
Powtarzaj, aż zbiegniesz:
1. Wybierz parę
i
do optymalizacji (na podstawie heurystyki szacującej która para da
największe zbliżenie do maksimum).
2. Popraw
biorąc pod uwagę
i
trzymając pozostałe alfy stałe.
Testem na zbieżność są tu warunki KKT, które powinny zostać spełnione z zadaną tolerancją.
Rozważmy krok 2. powyższego algorytmu. Załóżmy, że chcemy wykonać maksymalizację ze względu
na parametry
i
trzymając pozostałe parametry
stałe. Z drugiego warunku mamy:
gdzie
jest stałą. Oznacza to, że punkt
będący rozwiązaniem musi leżeć na prostej
.
(rysunek na tablicy: prosta przecinająca kwadrat [0,C]x[0,C])
Przekształcając równanie (%i 11) mamy:
Zatem funkcja celu może być zapisana jako:
Ponieważ trzymamy w tym kroku parametry
jato stałe to funkcja celu jest funkcją
kwadratową parametru . Można by ją zapisać w postaci
dla odpowiednio dobranych
i . Łatwo można zmaksymalizować analitycznie funkcję
w
przypadku swobodnym, a następnie przyciąć rozwiązanie do "pudełka" wynikającego z więzów.