Podręcznik
2. Gradientowe algorytmy rozwiązywania zadań optymalizacji bez ograniczeń
2.1. Algorytm gradientu prostego
Przypomnijmy zadanie, którym będziemy się dalej zajmować.
Zadanie optymalizacji bez ograniczeń (ZOBO):
Zgodnie z przyjętym optymistycznym podejściem omawianym w rozdziale piątym zakładamy, że w ZOBO
- funkcja wyboru
jest gładka,
- potrafimy wyliczyć jej gradient
,
- gdy potrzebna – wyznaczyć macierz Hessego
.
Definicja kierunku poprawy d „wystawionego” w punkcie bieżącym wymaga aby „ruch wzdłuż niego” dał zmalenie funkcji wyboru, co przy naszych założeniach zgodnie z Lematem 3.3, oznacza, że d jest kierunkiem poprawy gdy
Wobec tego narzucającym się kierunkiem poprawy jest kierunek antygradientu (oczywiście w sytuacji gdy jest niezerowy) ponieważ
Przy takim wyborze kierunku poprawy możemy podstawowy algorytm kierunków poprawy ukonkretnić do algorytmu realnego.
Algorytm gradientu (prostego) (Algorytm największego spadku, Algorytm Cauchy’ego)
Inicjalizacja
Kroki algorytmu
- Oblicz
, podstaw
.
- Jako kierunek poprawy wybierz kierunek antygradientu podstawiając
.
- Wyznacz długość kroku
w kierunku antygradientu (kierunku poprawy) d, podstaw
.
- Wylicz następny punkt podstawiając
.
- Podstaw
. Oblicz
, oraz
, podstaw
, podstaw
. Jeżeli
, to
przyjmij za rozwiązanie, podstaw
i stop. W przeciwnym przypadku podstaw
i idź do 2
Nie sprecyzowaliśmy jak w kroku 2. algorytmu ustalić długość kroku w kierunku antygradientu. Trzeba zrobić to tak aby można było pokazać, że generowany przez algorytm ciąg punktów jest w określonym sensie zbieżny. Rozwiązanie tego zagadnienia daje następujące twierdzenie.
Jeżeli
funkcja f jest różniczkowalna oraz ograniczona od dołu a jej gradient



to
nieskończony ciąg


– przez rozwiązanie zadania minimalizacji w kierunku:
– albo przez algorytm oparty na regule Armijo,
zbiega do punktu stacjonarnego gradientu, tzn.

Zatem przy stosunkowo słabych założeniach mamy relatywnie słabą zbieżność algorytmu największego spadku – zbieżność nieskończoną do punktu stacjonarnego gradientu.
Przy odpowiednio mocniejszych założeniach o funkcji wyboru można pokazać, że algorytm ten zbiega liniowo do punktu minimalizującego.
Wiemy już, że teoretycznie, algorytm gradientu prostego może znaleźć rozwiązanie zadania minimalizacji. Zbadajmy jego zachowanie rozwiązując proste zadanie minimalizacji.
Rezultaty działania algorytmów optymalizacji można przedstawiać na dwa sposoby: za pomocą tabelek, lub rysunków. Jeżeli funkcja celu ma więcej niż trzy argumenty, to wymyślenie dobrego rysunku ilustrującego zachowanie się algorytmu może być trudne i pozostają tylko tabelki. Natomiast dla funkcji dwu-argumentowych stosowne rysunki pokazujące kolejne kroki (trajektorię) algorytmu na płaszczyźnie na tle wykresu poziomicowego funkcji minimalizowanej niosą w sobie najpełniejszą, intuicyjnie zrozumiałą informację o zachowaniu się algorytmu. Trzeba tylko dobrze dobrać funkcję celu – dostatecznie trudną dla algorytmów lecz o stosunkowo łatwych do narysowania poziomicach.
Rysunek prezentowany w tym przykładzie przedstawia poszczególne punkty znalezione przez algorytm największego spadku z metodą interpolacji kwadratowej użytą do minimalizacji w kierunku, który miał znaleźć rozwiązanie zadania minimalizacji funkcji dwu zmiennych
z dokładnością







Zwróćmy uwagę, że chcieliśmy rozwiązać zadanie minimalizacji tak jak było ono sformułowane w punkcie 3.1.1 Modułu trzeciego (ZOBO) tzn.
a właściwie znaleźliśmy rozwiązanie zadania
Można pomyśleć, że przyczyną takiego zachowania się algorytmu jest kryterium stopu zatrzymujące algorytm gdy gradient jest niewielki, a więc kryterium oparte na wartościach funkcji a nie jej argumentach. Wobec tego zamiana go np. na wymaganie
oceniające relatywny przyrost kroku, powinna poprawić wynik. Policzmy jednak ten iloraz dla ósmego kroku
Jest więc jeszcze mniejszy niż norma gradientu.
I nie jest to przypadek. Zatrzymanie algorytmu relatywnie daleko od punktu minimalizującego wynika z właściwości funkcji, która w sporym otoczeniu minimum zmienia się niewiele (wartość poziomicy w punkcie

Jeżeli zatem zależy nam na dokładnym wyznaczeniu punktu minimalizującego funkcję celu, której zachowania w okolicy minimum nie znamy (a tak jest przecież najczęściej), to musimy w kryterium stopu wybrać bardzo wysoką dokładność, tzn. bardzo małe

Jaki rysunek dostajemy dla zwiększonej dokładności?

Przedstawione w przykładzie zachowanie – zygzakowanie – omawianego algorytmu, szczególnie wyraźne gdy napotka na długą i powoli opadającą „dolinę”, oznacza bardzo powolne zbliżanie się do rozwiązania i stanowi podstawową wadę algorytmu największego spadku. Kłopoty w takiej sytuacji są powiększane jeszcze tym, że składowe gradientu są coraz mniejszymi liczbami, a więc ich wyznaczenie jest obarczone coraz większym błędem względnym, co oznacza, że ruch w kierunku punktu minimalizującego jest nie tylko powolny ale i coraz bardziej niepewny.
Funkcja rozpatrywana powyżej była mniej złośliwa niż bananowa funkcja Rosenbrocka, której poziomice rysowaliśmy w poprzednich modułach. Jak poradzi sobie algorytm gradientu prostego ze znalezieniem minimum funkcji o której wiemy, że spełnia nasze optymistyczne założenia tylko w niewielkich otoczeniach punktu bieżącego?
Jak widać nie najlepiej. Algorytm szybko zaczął „zygzakować”, potem odważnie „wyskoczył” z doliny prowadzącej do minimum, lecz po powrocie na jej dno zaczął zmierzać do celu tak drobnymi zygzakami, że przez pozostałe 960 iteracji posunął się bardzo niewiele. „Odwaga” była tu jednak przypadkowa. Od mniej więcej szóstej iteracji algorytm generuje kierunek poprawy (zaznaczony linią) na którym funkcja minimalizowana w kierunku f P ma dwa minima lokalne: „bliższe”, położone koło punktu startowego i „dalsze’, położone z drugiej strony góry które jest globalne. Do trzydziestej szóstej iteracji, zastosowana metoda interpolacji kwadratowej znajdowała pierwsze minimum (przypomnijmy sobie rysunek 4.2) i dopiero w trzydziestej ósmej – „przeskoczyła” to lokalne minimum i znalazła odległe minimum globalne. W tym przykładzie widać, że dokładna minimalizacja w kierunku może istotnie zmniejszyć ilość iteracji algorytmu największego spadku, ale nie wyeliminuje „zygzakowania”.
Obie omawiane funkcje spełniają założenia, nawet tych silniejszych twierdzeń o zbieżności. Przedstawione przykłady pokazują więc, że zbieżność teoretyczna to jedno, a
czyli zdolność do znalezienia rozwiązania w rozsądnej liczbie iteracji (rozsądnym czasie).
Badanie zbieżności teoretycznej jest bardzo ważne przy konstruowaniu algorytmów. Trzeba przecież sprawdzić czy algorytm, który wymyśliliśmy ma w ogóle szansę na „dobiegnięcie” do rozwiązania. Teoria pozwala odrzucić pomysły bez sensu. Niestety bardzo rzadko rozważania teoretyczne pozwalają wyeliminować od razu pomysły, które w praktycznej realizacji są nieudane. Wynika to z faktu, że narzędzia (system pojęć składających się na modele analizy matematycznej) nie są dostosowane do potrzeb analizy zachowania algorytmów czyli tzw. analizy numerycznej.
Rożne próby zastosowania metody największego spadku pokazały już dawno, że metoda ta w rozsądnym czasie może dać rozwiązanie tylko dla najprostszych, dobrze uwarunkowanych w całej przestrzeni zadań. Zatem, gdy chcemy mieć skuteczniejsze narzędzia musimy albo metodę gradientu zmodyfikować, albo (w ramach metod kierunków poprawy) wymyślić zupełnie inne podejście.
Z wielu pomysłów, które pojawiły się w ostatnich sześćdziesięciu paru latach próbę praktycznej przydatności przetrwały w zasadzie tylko dwa algorytmy. Zanim je przedstawimy, przez chwilę zastanowimy się, dlaczego algorytm gradientu prostego działa tak źle.
Posłużenie się regułami zapisanymi w dowolnym algorytmie przeznaczonym do znalezienia rozwiązania zadania optymalizacji (algorytmie optymalizacji) daje ciąg punktów zaczynający się od punktu startowego (z numerem 0), którego wyznaczanie można opisać następującym wzorem
W operatorze nie wpisaliśmy wszystkich argumentów, ponieważ sposób generacji nowego punktu musi zależeć od punktu bieżącego i może zależeć od punktów poprzednich, od historii. Innymi słowy algorytm może być bez pamięci i z pamięcią. Wypisując wzór, tej drugiej możliwości nie chcieliśmy wykluczyć, a także nie chcieliśmy określić tzw. głębokości pamięci, to znaczy określić ile kroków wstecz jeszcze uwzględniamy. Dla matematyka wzór (4.1) to równanie różnicowe, „bliski krewny” równań różniczkowych zwyczajnych rozważanych w pierwszym wykładzie. Badanie zbieżności algorytmów optymalizacji, to nic innego jak badanie asymptotycznych własności rozwiązań (szczególnych) takich równań różnicowych.
Jeżeli w ten sposób analizować zachowanie algorytmu gradientu prostego, to mamy
i łatwo jest zauważyć, że główną przyczyną zygzakowania jest brak pamięci – nowy kierunek w żaden sposób nie jest związany z poprzednim, a intuicyjnie jest oczywiste, że wprowadzenie takiego związku uspokoiłoby zbyt nerwowe ruchy algorytmu. Nie może jednak „przedawkować ze środkiem uspokajającym”, bo i tak, jak widzieliśmy, po pewnym czasie zygzaki stają się zygzaczkami i algorytm prawie że stoi w miejscu. Można jednak zapisać dwa warianty modyfikacji mogące dać poprawę zachowania:
- prostszy, polegający na dodaniu „poprawki” zależnej od „historii”:
- i mniej oczywisty – przeskalowujący gradient, też w zależności od „historii”:
Jak zatem określać poprawkę addytywną albo, w najprostszym przypadku, kwadratową macierz transformacji
?
Odpowiemy na to pytanie w dwu kolejnych punktach.