Optymalizacja ciągła 5. Metoda stochastycznego spadku wzdłuż gradientu Wojciech Kotłowski Instytut Informatyki PP http://www.cs.put.poznan.pl/wkotlowski/ 04.04.2019 1 / 20
Wprowadzenie Minimalizacja różniczkowalnej funkcji f(w) bez ograniczeń: min f(w) w R n Uwaga: na potrzeby tego wykładu zmieniamy oznaczenie wektora zmiennych z x na w W wielu zastosowaniach optymalizacji funkcja celu ma postać sumy po N elementach: N f(w) = f i (w), i=1 To założenie będzie nam towarzyszyło przez cały wykład. 2 / 20
Przykład: regresja liniowa Przewidywania/wyjaśnienie zmian ciągłej zmiennej wyjściowej (Y ) pod wpływem zmian innych zmiennych (X 1,..., X n ). Przykłady X ceny akcji w ostatnim tygodniu, Y cena akcji jutro. X wyniki testów medycznych, Y poziom zaawansowania choroby. X wielkość programu, Y czas pisania programu. X warunki na drodze, czas, lokalizacja, Y średnia prędkość samochodów. X cechy domu Y cena domu. 3 / 20
Przykład: regresja liniowa Modelujemy zmienną Y jako funkcję liniową X 1,..., X n : Y = w 0 + w 1 X 1 +... + w n X n = X w gdzie w = (w 0, w 1,..., w n ) jest wektorem współczynników (zmiennych decyzyjnych), natomiast X = (1, X 1,..., X n ). 4 / 20
Przykład: regresja liniowa Modelujemy zmienną Y jako funkcję liniową X 1,..., X n : Y = w 0 + w 1 X 1 +... + w n X n = X w gdzie w = (w 0, w 1,..., w n ) jest wektorem współczynników (zmiennych decyzyjnych), natomiast X = (1, X 1,..., X n ). Wartości współczynników dopasowujemy na podstawie zbioru danych 4 / 20
Przykład: regresja liniowa Otrzymujemy zbiór danych historycznych, na którym znane są wartości y: (x 11, x 12,..., x 1n, y 1 ) (x 1, y 1 ) (x 21, x 22,..., x 2n, y 2 ) (x 2, y 2 )... lub w skrócie... (x N1, x N2,..., x Nn, y N ) (x N, y N ) 5 / 20
Przykład: regresja liniowa Otrzymujemy zbiór danych historycznych, na którym znane są wartości y: (x 11, x 12,..., x 1n, y 1 ) (x 1, y 1 ) (x 21, x 22,..., x 2n, y 2 ) (x 2, y 2 )... lub w skrócie... (x N1, x N2,..., x Nn, y N ) (x N, y N ) Wyznaczamy współczynniki w tak, aby funkcja liniowa jak najlepiej przybliżała wartości zmiennej Y na danych, tzn. aby: ŷ i = x i w było jak najbliższe y i dla wszystkich i = 1,..., N 5 / 20
Przykład: regresja liniowa Y X 6 / 20
Przykład: regresja liniowa Y X 6 / 20
Przykład: regresja liniowa Y y i ŷ i X 6 / 20
Przykład: regresja liniowa 0.6 Y 0.4 0.2 0 0 0.5 0.5 X X 1 1 0 2 1 7 / 20
Przykład: regresja liniowa Metoda najmniejszych kwadratów: Wyznacz współczynniki regresji w by minimalizować sumę kwadratów odchyleń modelu od danych: min f(w) = N (y i ŷ i ) 2 w R n i=1 8 / 20
Przykład: regresja liniowa Metoda najmniejszych kwadratów: Wyznacz współczynniki regresji w by minimalizować sumę kwadratów odchyleń modelu od danych: min f(w) = N (y i x w R n i w) 2 i=1 8 / 20
Przykład: regresja liniowa Metoda najmniejszych kwadratów: Wyznacz współczynniki regresji w by minimalizować sumę kwadratów odchyleń modelu od danych: min f(w) = N (y i x w R n i w) 2 }{{} i=1 f i (w) 8 / 20
Przykład: regresja liniowa Metoda najmniejszych kwadratów: Wyznacz współczynniki regresji w by minimalizować sumę kwadratów odchyleń modelu od danych: min f(w) = N (y i x w R n i w) 2 }{{} i=1 f i (w) Innymi słowy: wyznaczamy współczynniki modelu liniowego minimalizując sumaryczny błąd (wyrażony w postaci funkcji kwadratowej) na całym zbiorze danych 8 / 20
Przykłady: uczenie maszynowe N f(w) = f i (w) i=1 Zdecydowana większość metod uczenia maszynowego opiera się zasadniczo na tym samym schemacie: Mając zbiór danych, wyznacz parametry modelu predykcyjnego minimalizując sumaryczny błąd modelu na danych w parametry modelu (współczynniki regresji, wagi w sieci neuronowej, itp.) f i (w) błąd na pojedynczej obserwacji ze zbioru danych (np. błąd kwadratowy w regresji) f(w) sumaryczna wartość błędu na całym zbiorze danych 9 / 20
Znajdź rozwiązanie problemu: Podejście klasyczne min f(w) w R n stosując jedną z klasycznych metod optymalizacji, np. metodę spadku wzdłuż gradientu lub Newtona-Raphsona 10 / 20
Znajdź rozwiązanie problemu: Podejście klasyczne min f(w) w R n stosując jedną z klasycznych metod optymalizacji, np. metodę spadku wzdłuż gradientu lub Newtona-Raphsona Typowe problemy w praktyce: Policzenie gradientu/hesjanu wymaga sumowania N gradientów/hesjanów składowych funkcji celu: f(w) = N f i (w) i=1 Wymiar problemu n może być bardzo duży, przez co metoda Newtona-Raphsona może być zbyt kosztowna do uruchomienia 10 / 20
Podejście klasyczne: spadek wzdłuż gradientu Rozpoczynając od w 1, w kolejnych iteracjach k = 1, 2,...: w k+1 N = w k α k f i (w k ) i=1 }{{} f(w k ) Wykonanie jednego kroku: przejście po wszystkich składowych funkcji celu. 11 / 20
Podejście klasyczne: spadek wzdłuż gradientu Rozpoczynając od w 1, w kolejnych iteracjach k = 1, 2,...: w k+1 N = w k α k f i (w k ) i=1 }{{} f(w k ) Wykonanie jednego kroku: przejście po wszystkich składowych funkcji celu. Pomysł: policz gradient na losowej pojedynczej składowej f i zamiast na całej funkcji f! 11 / 20
Metoda stochastycznego spadku wzdłuż gradientu (stochastic gradient descent, SGD) Rozpoczynając od w 1, w kolejnych iteracjach k = 1, 2,...: Wylosuj jedną ze składowych i k {1,..., N} Wykonaj krok wzdłuż ujemnego gradientu funkcji f ik (w k ): w k+1 = w k α k f ik (w k ) 12 / 20
Metoda stochastycznego spadku wzdłuż gradientu (stochastic gradient descent, SGD) Rozpoczynając od w 1, w kolejnych iteracjach k = 1, 2,...: Wylosuj jedną ze składowych i k {1,..., N} Wykonaj krok wzdłuż ujemnego gradientu funkcji f ik (w k ): w k+1 = w k α k f ik (w k ) Dlaczego miałoby to w ogóle działać? 12 / 20
Metoda stochastycznego spadku wzdłuż gradientu (stochastic gradient descent, SGD) Rozpoczynając od w 1, w kolejnych iteracjach k = 1, 2,...: Wylosuj jedną ze składowych i k {1,..., N} Wykonaj krok wzdłuż ujemnego gradientu funkcji f ik (w k ): w k+1 = w k α k f ik (w k ) Dlaczego miałoby to w ogóle działać? Możemy myśleć o gradiencie pojedynczej składowej f i (w k ) jako o oszacowaniu całościowego gradientu f(w k ) Rzeczywiście, średnio gradient będzie wynosił: 1 n f 1(w k ) + 1 n f 2(w k ) +... + 1 n f N(w k ) = 1 n f(w k) 12 / 20
Przykład: problem regresji liniowej min f(w) = N (y i x w R n i w) 2 }{{} i=1 f i (w) 13 / 20
Przykład: problem regresji liniowej min f(w) = N (y i x w R n i w) 2 }{{} i=1 f i (w) Liczymy pochodne cząstkowe pojedynczej funkcji f i (w): f i (w) w j = 2(y i x i w)x ij 13 / 20
Przykład: problem regresji liniowej min f(w) = N (y i x w R n i w) 2 }{{} i=1 f i (w) Liczymy pochodne cząstkowe pojedynczej funkcji f i (w): f i (w) w j = 2(y i x i w)x ij Gradient wynosi więc: f i (w) = 2(y i x i w)x i 13 / 20
Przykład: problem regresji liniowej min f(w) = N (y i x w R n i w) 2 }{{} i=1 f i (w) Liczymy pochodne cząstkowe pojedynczej funkcji f i (w): f i (w) w j = 2(y i x i w)x ij Gradient wynosi więc: f i (w) = 2(y i x i w)x i Rozpoczynając od w 1, w kolejnych iteracjach k = 1, 2,...: Wylosuj jedną ze obserwacji i k {1,..., N} Wykonaj krok wzdłuż ujemnego gradientu funkcji f ik (w k ): w k+1 = w k + 2α k (y ik x i k w k )x ik 13 / 20
Przykład: problem regresji liniowej min f(w) = N (y i x w R n i w) 2 }{{} i=1 f i (w) Liczymy pochodne cząstkowe pojedynczej funkcji f i (w): f i (w) w j = 2(y i x i w)x ij Gradient wynosi więc: f i (w) = 2(y i x i w)x i Rozpoczynając od w 1, w kolejnych iteracjach k = 1, 2,...: Wylosuj jedną ze obserwacji i k {1,..., N} Wykonaj krok wzdłuż ujemnego gradientu funkcji f ik (w k ): w k+1 = w k + 2α k (y ik x i k w k )x ik Krok w kierunku wektora obserwacji x ik, z długością kroku proporcjonalną do przeszacowania predykcji (y ik x i k w k ). 13 / 20
Zalety Zalety i wady algorytmu SGD Szybkość: obliczenie gradientu wymaga wzięcia tylko jednej obserwacji. Skalowalność: cały zbiór danych nie musi nawet znajdować się w pamięci operacyjnej. Prostota: gradient funkcji f i daje bardzo prosty wzór na modyfikację wag. Wady Wolna zbieżność: algorytm w ogólności zbiega wolno i wymaga wielu iteracji po zbiorze uczącym. Ustalenie długości kroku α k : wyznaczenie α k przez jednowymiarową optymalizację nie przynosi dobrych rezultatów, ponieważ nie optymalizujemy oryginalnej funkcji f tylko jeden jej składnik f i. Zalety znacznie przewyższają wady: Algorytm SGD jest obecnie najczęściej używanym algorytmem w uczeniu maszynowym! 14 / 20
SGD w praktyce 15 / 20
SGD w praktyce Zwykle nie losuje się obserwacji, ale przechodzi się po zbiorze danych w losowej kolejności (działa bardzo podobnie, a daje znacznie prostszą implementację) 15 / 20
SGD w praktyce Zwykle nie losuje się obserwacji, ale przechodzi się po zbiorze danych w losowej kolejności (działa bardzo podobnie, a daje znacznie prostszą implementację) Zbieżność wymaga często przejścia parokrotnie po całym zbiorze danych (jednokrotne przejście nazywa się epoką). 15 / 20
SGD w praktyce Zwykle nie losuje się obserwacji, ale przechodzi się po zbiorze danych w losowej kolejności (działa bardzo podobnie, a daje znacznie prostszą implementację) Zbieżność wymaga często przejścia parokrotnie po całym zbiorze danych (jednokrotne przejście nazywa się epoką). Metody ustalania współczynników długości kroku α k : 15 / 20
SGD w praktyce Zwykle nie losuje się obserwacji, ale przechodzi się po zbiorze danych w losowej kolejności (działa bardzo podobnie, a daje znacznie prostszą implementację) Zbieżność wymaga często przejścia parokrotnie po całym zbiorze danych (jednokrotne przejście nazywa się epoką). Metody ustalania współczynników długości kroku α k : Ustalamy stałą wartość α k = α 15 / 20
SGD w praktyce Zwykle nie losuje się obserwacji, ale przechodzi się po zbiorze danych w losowej kolejności (działa bardzo podobnie, a daje znacznie prostszą implementację) Zbieżność wymaga często przejścia parokrotnie po całym zbiorze danych (jednokrotne przejście nazywa się epoką). Metody ustalania współczynników długości kroku α k : Ustalamy stałą wartość α k = α = Zwykle tak się robi w praktyce, działa dobrze ale wymaga ustalenia α metodą prób i błędów 15 / 20
SGD w praktyce Zwykle nie losuje się obserwacji, ale przechodzi się po zbiorze danych w losowej kolejności (działa bardzo podobnie, a daje znacznie prostszą implementację) Zbieżność wymaga często przejścia parokrotnie po całym zbiorze danych (jednokrotne przejście nazywa się epoką). Metody ustalania współczynników długości kroku α k : Ustalamy stałą wartość α k = α = Zwykle tak się robi w praktyce, działa dobrze ale wymaga ustalenia α metodą prób i błędów Bierzemy wartość kroku malejącą jak k 1 : α k = α/ k 15 / 20
SGD w praktyce Zwykle nie losuje się obserwacji, ale przechodzi się po zbiorze danych w losowej kolejności (działa bardzo podobnie, a daje znacznie prostszą implementację) Zbieżność wymaga często przejścia parokrotnie po całym zbiorze danych (jednokrotne przejście nazywa się epoką). Metody ustalania współczynników długości kroku α k : Ustalamy stałą wartość α k = α = Zwykle tak się robi w praktyce, działa dobrze ale wymaga ustalenia α metodą prób i błędów Bierzemy wartość kroku malejącą jak k 1 : α k = α/ k = Zapewniona zbieżność, ale czasem może zbiegać zbyt wolno. 15 / 20
SGD w praktyce Zwykle nie losuje się obserwacji, ale przechodzi się po zbiorze danych w losowej kolejności (działa bardzo podobnie, a daje znacznie prostszą implementację) Zbieżność wymaga często przejścia parokrotnie po całym zbiorze danych (jednokrotne przejście nazywa się epoką). Metody ustalania współczynników długości kroku α k : Ustalamy stałą wartość α k = α = Zwykle tak się robi w praktyce, działa dobrze ale wymaga ustalenia α metodą prób i błędów Bierzemy wartość kroku malejącą jak k 1 : α k = α/ k = Zapewniona zbieżność, ale czasem może zbiegać zbyt wolno. W praktyce często liczy się gradient nie na pojedynczej obserwacji, ale na ich niewielkiej grupie (tzw. mini-batch) 15 / 20
Metoda stochastycznego spadku wzdłuż gradientu Twierdzenie: Niech f i (w) (i = 1,..., N) będą funkcjami wypukłymi i niech w będzie minimum (globalnym) funkcji f(w). Po K iteracjach algorytm stochastycznego spadku wzdłuż gradientu ze stałą długością kroku α gwarantuje: min f(w k) f(w ) w 1 w 2 + α k=1,...,k 2αK 2K K f ik (w k ) 2 k=1 16 / 20
Metoda stochastycznego spadku wpływwzdłuż wielkościgradientu gradientów wpływ warunków początkowych Twierdzenie: (odległość od optimum Niech f i (w) na starcie) (i = 1,..., N) na będą trajektorii funkcjami algorytmu wypukłymi i niech w będzie (maleje minimum z α) (globalnym) funkcji f(w). (rośnie Po z α) K iteracjach algorytm stochastycznego spadku wzdłuż gradientu ze stałą długością kroku α gwarantuje: min f(w k) f(w ) w 1 w 2 + α k=1,...,k 2αK 2K K f ik (w k ) 2 k=1 16 / 20
Metoda stochastycznego spadku wzdłuż gradientu Twierdzenie: Niech f i (w) (i = 1,..., N) będą funkcjami wypukłymi i niech w będzie minimum (globalnym) funkcji f(w). Po K iteracjach algorytm stochastycznego spadku wzdłuż gradientu ze stałą długością kroku α gwarantuje: min f(w k) f(w ) w 1 w 2 + α k=1,...,k 2αK 2K K f ik (w k ) 2 Wniosek: sensowne jest wzięcie α tak, aby oba człony były podobnej wielkości: (...) 1 αk α K (...) K k=1 k=1 16 / 20
Metoda stochastycznego spadku wzdłuż gradientu Twierdzenie: Niech f i (w) (i = 1,..., N) będą funkcjami wypukłymi i niech w będzie minimum (globalnym) funkcji f(w). Po K iteracjach algorytm stochastycznego spadku wzdłuż gradientu ze stałą długością kroku α gwarantuje: min f(w k) f(w ) w 1 w 2 + α k=1,...,k 2αK 2K K f ik (w k ) 2 Wniosek: sensowne jest wzięcie α tak, aby oba człony były podobnej wielkości: (...) 1 α(...) αk k=1 16 / 20
Metoda stochastycznego spadku wzdłuż gradientu Twierdzenie: Niech f i (w) (i = 1,..., N) będą funkcjami wypukłymi i niech w będzie minimum (globalnym) funkcji f(w). Po K iteracjach algorytm stochastycznego spadku wzdłuż gradientu ze stałą długością kroku α gwarantuje: min f(w k) f(w ) w 1 w 2 + α k=1,...,k 2αK 2K K f ik (w k ) 2 Wniosek: sensowne jest wzięcie α tak, aby oba człony były podobnej wielkości: (...) 1 K α2 k=1 16 / 20
Metoda stochastycznego spadku wzdłuż gradientu Twierdzenie: Niech f i (w) (i = 1,..., N) będą funkcjami wypukłymi i niech w będzie minimum (globalnym) funkcji f(w). Po K iteracjach algorytm stochastycznego spadku wzdłuż gradientu ze stałą długością kroku α gwarantuje: min f(w k) f(w ) w 1 w 2 + α k=1,...,k 2αK 2K K f ik (w k ) 2 Wniosek: sensowne jest wzięcie α tak, aby oba człony były podobnej wielkości: (...) α K k=1 16 / 20
Metoda stochastycznego spadku wzdłuż gradientu Twierdzenie: Niech f i (w) (i = 1,..., N) będą funkcjami wypukłymi i niech w będzie minimum (globalnym) funkcji f(w). Po K iteracjach algorytm stochastycznego spadku wzdłuż gradientu ze stałą długością kroku α gwarantuje: min f(w k) f(w ) w 1 w 2 + α k=1,...,k 2αK 2K K f ik (w k ) 2 Wniosek: sensowne jest wzięcie α tak, aby oba człony były podobnej wielkości: (...) α K Stąd stosowane w praktyce malejące wartości α k rzędu α k = const k k=1 16 / 20
Metoda stochastycznego spadku wzdłuż gradientu Twierdzenie: Niech f i (w) (i = 1,..., N) będą funkcjami wypukłymi i niech w będzie minimum (globalnym) funkcji f(w). Po K iteracjach algorytm stochastycznego spadku wzdłuż gradientu ze stałą długością kroku α gwarantuje: min f(w k) f(w ) w 1 w 2 + α k=1,...,k 2αK 2K K f ik (w k ) 2 Wniosek: sensowne jest wzięcie α tak, aby oba człony były podobnej wielkości: (...) α K Stąd stosowane w praktyce malejące wartości α k rzędu α k = const k ( ) Powyższe wartości α k dają gwarancje na suboptymalność rzędu O 1 K k=1 16 / 20
Porównanie zbieżności algorytm zbieżność błąd po k iteracjach Metoda Cauchy ego liniowa e ck Metoda Newtona-Raphsona kwadratowa e c 1e c 2 k SGD subliniowa c k Algorytm SGD jest bardzo wolny w stosunku do uprzednio poznanych Stosuje się go wtedy, gdy nie jest nam potrzebna duża dokładność punktu optimum, a zależy nam na czasie optymalizacji 17 / 20
Przykład: szacowanie czasu pracy programistów X Y Rozmiar programu Oszacowany czas 186 130 699 650 132 99 272 150 291 128 331 302 199 95 1890 945 788 368 1601 961 18 / 20
Przykład: szacowanie czasu pracy programistów X Y Rozmiar programu Oszacowany czas 186 130 699 650 132 99 272 150 291 128 331 302 199 95 1890 945 788 368 1601 961 czas [h] 200 400 600 800 500 1000 1500 rozmiar programu [linie kodu] 18 / 20
Przykład: szacowanie czasu pracy programistów X Y Rozmiar programu Oszacowany czas 186 130 699 650 132 99 272 150 291 128 331 302 199 95 1890 945 788 368 1601 961 czas [h] 200 400 600 800 500 1000 1500 rozmiar programu [linie kodu] w 0 = 45.93, w 1 = 0.5273 18 / 20
Szacowanie czasu programistów Zaczynamy z rozwiązaniem w = (w 0, w 1 ) = 0. Krok: α k = 0.5/ k. Jednostki zostały zamienione na 1000min i 1000 lini kodu, aby uniknąć dużych liczb. (ujednolicenie skali jest w praktyce bardzo istotne dla zbieżności metody) 19 / 20
iteracja 1 Szacowanie czasu programistów Y 200 400 600 800 500 1000 1500 X 20 / 20
iteracja 2 Szacowanie czasu programistów Y 200 400 600 800 500 1000 1500 X 20 / 20
iteracja 3 Szacowanie czasu programistów Y 200 400 600 800 500 1000 1500 X 20 / 20
iteracja 4 Szacowanie czasu programistów Y 200 400 600 800 500 1000 1500 X 20 / 20
iteracja 5 Szacowanie czasu programistów Y 200 400 600 800 500 1000 1500 X 20 / 20
iteracja 10 Szacowanie czasu programistów Y 200 400 600 800 500 1000 1500 X 20 / 20
iteracja 15 Szacowanie czasu programistów Y 200 400 600 800 500 1000 1500 X 20 / 20
iteracja 20 Szacowanie czasu programistów Y 200 400 600 800 500 1000 1500 X 20 / 20
iteracja 25 Szacowanie czasu programistów Y 200 400 600 800 500 1000 1500 X 20 / 20
iteracja 30 Szacowanie czasu programistów Y 200 400 600 800 500 1000 1500 X 20 / 20
iteracja 35 Szacowanie czasu programistów Y 200 400 600 800 500 1000 1500 X 20 / 20
iteracja 40 Szacowanie czasu programistów Y 200 400 600 800 500 1000 1500 X 20 / 20
iteracja 45 Szacowanie czasu programistów Y 200 400 600 800 500 1000 1500 X 20 / 20
iteracja 50 Szacowanie czasu programistów Y 200 400 600 800 500 1000 1500 X 20 / 20
iteracja 60 Szacowanie czasu programistów Y 200 400 600 800 500 1000 1500 X 20 / 20
iteracja 70 Szacowanie czasu programistów Y 200 400 600 800 500 1000 1500 X 20 / 20
iteracja 80 Szacowanie czasu programistów Y 200 400 600 800 500 1000 1500 X 20 / 20
iteracja 90 Szacowanie czasu programistów Y 200 400 600 800 500 1000 1500 X 20 / 20
iteracja 100 Szacowanie czasu programistów Y 200 400 600 800 500 1000 1500 X 20 / 20