Podręcznik
2. Gradientowe algorytmy rozwiązywania zadań optymalizacji bez ograniczeń
2.3. 3 Algorytmy quasi-newtonowskie
Omówiliśmy realizację pierwszego z zaproponowanych podejść wzbogacenia algorytmu gradientu prostego w pamięć, a polegającego na dodaniu poprawki zależnej od historii. Teraz przyszedł czas na zapoznanie się z drugim podejściem, w którym przeskalowujemy gradient za pomocą macierzy transformacji, w stosowny sposób „zależnej od historii”. Przy tym podejściu krok wykonujemy w kierunku
Jak więc dobrze określić zależność macierzy transformacji od bieżącej i przeszłej informacji?
W punkcie piątym Procedury redukcji zadania optymalizacji bez ograniczeń przedstawionej w punkcie 3.1.1 Modułu trzeciego napisałem:
„Elementy zbioru rozwiązań równania
traktujemy jako „podejrzanych”, których „sprawdzamy na optymalność” tzn. wyliczamy zbiór wartości funkcji f , a następnie typujemy jako kandydata na rozwiązanie wektor dla którego wartość funkcji jest najmniejsza (tylko kandydata na, a nie rozwiązanie, bo Twierdzenie 3.4 jest warunkiem koniecznym!).”
Podane twierdzenia o zbieżności algorytmów gradientu prostego i sprzężonego (Twierdzenia 4.1 i 4.1GS) mówią, że algorytmy te de facto rozwiązują to równanie, co jest jeszcze podkreślone przez użyte w nich kryterium stopu: Wobec tego do poszukiwania rozwiązania zadania optymalizacji możemy zastosować zaproponowaną w 1669 roku przez I. Newtona metodę stycznych (w dziele De Analysi per Aequationes Numeri Terminorum Infinitas, w XVII w. nawet Anglicy pisali traktaty naukowe po łacinie). Zapiszmy ją dla naszego zadania polegającego na szukaniu rozwiązania równania
Algorytm zaproponowany przez Newtona jest następujący:
wybierz punkt początkowy , kolejne przybliżenia obliczaj według wzoru
Przy naszym określeniu funkcji F, pochodna występująca we wzorze (4.11) to macierz Hessego funkcji f. Wobec tego wzór ten można zapisać następująco
Mamy więc wzór określający macierz transformacji, nie jest on jednak zależny od „historii” a tylko od macierzy Hessego – „czynnika określającego krzywiznę funkcji celu” – policzonej w bieżącym punkcie.
Stosowanie wzoru (4.12) do znajdowania rozwiązania zadania optymalizacji jest niepraktyczne z dwu powodów.
- Po pierwsze trzeba w nim odwracać macierz, a wiemy że jest to operacja trudna gdy chcemy ją dokładnie wykonać numerycznie.
- Po drugie algorytm Newtona zbiega szybko, bo kwadratowo, do rozwiązania, ale tylko wtedy gdy funkcja f jest taka, że jej macierz Hessego jest w kolejnych punktach odwracalna a algorytm wystartuje w stosownym otoczeniu rozwiązania (zbieżność jest lokalna bo transformacja kierunku wyznaczonego przez gradient jest zależna tyko od informacji bieżącej, a więc lokalnej).
Wobec tego podjęto szereg prób modyfikacji algorytmu Newtona mających na celu zachowanie kwadratowej zbieżności przy wyeliminowaniu konieczności odwracania macierzy i zapewnieniu zbieżności globalnej.
Przedstawimy teraz podstawowe elementy rozważań, które doprowadziły w drugiej połowie lat sześćdziesiątych XX w. do przedstawienia takich sposobów określania macierzy transformacji, które dały skuteczne algorytmy rozwiązywania zadań optymalizacji.
Rozważania przedstawione w punkcie 3.1.2 pokazały, że dla funkcji klasy (gładkich) wzór
określa aproksymację funkcji f w otoczeniu punktu bieżącego . Jeżeli przyjąć za „lokalną” zmienną niezależną przyrost zmiennej po której minimalizujemy w stosunku do punktu bieżącego to wzór określający zmiany funkcji aproksymującej w otoczeniu punktu w stosunku do jej wartości w tym punkcie jest następujący
Przy naszym podejściu optymisty przyjmujemy, że otoczenie, w którym to przybliżenie daje właściwą informację o zmianach funkcji celu jest duże, co oznacza, że zakładamy, że wektor minimalizujący funkcję (4.13) jest w tym otoczeniu dobrym przybliżeniem kierunku w którym funkcja celu f „najwięcej” zmaleje (pod warunkiem, że macierz Hessego jest dodatnio określona). Funkcja jest dwukrotnie różniczkowalna więc równanie jakie ten wektor musi spełniać jest następujące czyli
co oznacza, że jest kierunkiem poprawy i nasze rozumowanie jest poprawne.
Porównując wzory (4.12) i (4.14) łatwo zauważyć, że
pod warunkiem, że odwrotność macierzy Hessego istnieje, a jak pamiętamy jest tak wtedy gdy np. macierz ta jest dodatnio określona. Oznacza to, że zastosowanie metody stycznych Newtona do rozwiązywania zadania optymalizacji to nic innego jak przyjęcie, że bieżące przybliżenie kwadratowe (4.13) dobrze opisuje zachowanie funkcji minimalizowanej w otoczeniu każdego punktu bieżącego. Zatem z bieżącego punktu należy przejść do punktu w którym funkcja aproksymująca osiąga minimum. W pobliżu lokalnego minimum funkcji celu na pewno takie postępowanie doprowadzi do tego minimum, ale w dużej odległości od niego tak być nie musi, stąd wspomniana wada metody Newtona – gwarantowana zbieżność tylko wtedy gdy algorytm wystartuje w stosownym otoczeniu rozwiązania.
Algorytm Newtona (4.12) jest więc konsekwencją przyjęcia za bieżące przybliżenia funkcji minimalizowanej przybliżenia kwadratowego dla przyrostów (wzór 4.13) opartego na macierzy drugich pochodnych funkcji celu obliczanej w bieżących punktach, co dało warunek (4.14) jaki musi spełniać wektor a w konsekwencji pozwoliło wyprowadzić wzór (4.16).
Szukając sposobów poprawienia algorytmu Newtona twórcy algorytmów optymalizacji w „swoim optymizmie starali się pójść dalej” i zaczęli szukać warunków jakie powinna spełniać funkcja kwadratowa aproksymująca funkcję celu w otoczeniu punktu bieżącego tak aby mogła być podstawą do wyznaczenia lepszego niż newtonowski kierunku poprawy. Po pierwsze, powinna być oparta na dodatnio określonej (a więc odwracalnej) macierzy zależnej co najmniej od punktu bieżącego Rozważmy taką funkcję, np. o postaci:
gdzie, tak jak poprzednio, , jest przyrostem zmiennej po której minimalizujemy w stosunku do punktu bieżącego. Minimum funkcji (4.17) jest dane wektorem spełniającym warunek
Rozumując jak poprzednio, wzór (4.15), można pokazać, że tak wyznaczony kierunek jest kierunkiem poprawy dla funkcji f.
Zauważmy teraz, że dla dowolnych punktów i mamy następujący wzór na zmianę gradientu funkcji celu f
Oznacza to, że dla dostatecznie małej różnicy dostaniemy
Intuicyjnie przyjęto, że macierz określająca funkcję (4.17) powinna spełniać powyższy warunek dokładnie tzn. (uwzględniając zależność powinna być spełniona równość
Wymaganie zapisane równością (4.19) nosi nazwę warunku quasi-newtonowskiego.
Jeżeli teraz przyjmiemy, że wzór określający macierz powinien mieć pamięć długookresową, tzn. być zależny od , to do warunku quasi-newtonowskiego możemy dodać wymaganie
gdzie poprawka zależna co najmniej od punktu bieżącego powinna dawać dodatnio określoną macierz gdy macierz jest też okreslona dodatnio)
Analiza równania (4.19) i wymagania (4.20) pokazała, że poprawka nie jest określona przez nie jednoznacznie, stąd opracowano wiele wzorów na poprawkę. Z teoretycznego punktu widzenia najciekawsza jest tzw. rodzina poprawek Broydena. Określmy najpierw wektory przyrostów w stosunku do punktu bieżącego:
Dla ustalonej liczby rodzina poprawek Broydena jest określona dla wzorami
Wzory już od samego patrzenia przyprawiają o gęsią skórkę, ale pomyślcie Państwo o tych co je wyprowadzali. Musieli przecież sprawdzać warunki (4.19) i (4.20)!
Wymagana w warunku (4.20) dodatnia określoność każdej macierzy gwarantująca, że kierunki będą kierunkami poprawy została „zaszyta” we wzorach (4.21) przy założeniu, że punkt następny , potrzebny do obliczenia przyrostów i , został wyznaczony w wyniku dokładnej minimalizacji w kierunku , tzn. przy przyjęciu, że ciąg punktów jest generowany przez algorytm
Jeżeli punkt obliczony w oparciu o kierunek zapewnia tylko poprawę funkcji celu w stosunku do wartości w punkcie (nie stosujemy dokładnej minimalizacji w kierunku), to w praktycznej realizacji algorytmu trzeba zastosować stosowne zabezpieczenie gwarantujące, że kolejny kierunek będzie kierunkiem poprawy.
Poprawka wyliczona wg wzoru (4.21), w którym położono nosi nazwę poprawki Davidona – Fletchera – Powella (poprawki DFP), a poprawka wyliczona dla , to poprawka Broydena – Fletchera – Goldfarba – Shanno (poprawka BFGS), od nazwisk autorów, którzy je wprowadzili – pierwszą na początku lat sześćdziesiątych XX w., a drugą w 1970 roku.
W 1972 r. L.C.W. Dixon pokazał, że z teoretycznego punktu widzenia wszystkie poprawki rodziny Broydena są równoważne – przy dokładnej minimalizacji w kierunku kolejne punkty obliczone według wzorów (4.22) są przy użyciu dowolnej z nich takie same. Pokazano także twierdzenie analogiczne do twierdzenia (4.2) o skończonej zbieżność algorytmu kierunków Q-sprzężonych przy stosowaniu do minimalizacji funkcji kwadratowej. ustanawiające skończoną zbieżność algorytmu (4.22) w analogicznym przypadku.
Jak pamiętamy wymaganie jakie musi spełniać macierz transformacji zapisane równością (4.19) nosi nazwę warunku quasi-newtonowskiego. Stąd wynikła powszechnie używana nazwa algorytmów w których nowy kierunek poprawy jest określany za pomocą tej macierzy: – są to algorytmy quasi-newtonowskie.
Twierdzenie 4.2QN wskazuje na związek miedzy algorytmami quasi-newtonowskimi i algorytmami gradientu sprzężonego. Można też wskazać i różnice.
Jeżeli pozbawimy wzór określający macierz transformacji pamięci długookresowej przyjmując w nim , to wzór określający kolejną macierz transformacji dla poprawki BFGS będzie następujący
Jeżeli teraz dokonamy dokładnej minimalizacji na kierunku otrzymując punkt to drogą prostych rachunków można pokazać, że
gdzie współczynnik określony jest wzorem (4.8) lub równoważnym w tym przypadku wzorem (4.9). Oznacza to, że tzw. algorytm BFGS bez pamięci jest równoważny algorytmowi gradientu sprzężonego. Ponieważ pokazaliśmy, że w algorytmie gradientu sprzężonego pamięć długookresowa występuje, to stwierdzenie powyższe można interpretować jako stwierdzenie faktu, że w pełnym algorytmie quasi-newtonowskim poprawny wpływ poprzednich kierunków poprawy na kierunek bieżący jest większy aniżeli w metodzie gradientu sprzężonego, co uzasadnia empirycznie stwierdzoną przewagę (w większości przypadków szybciej zbiegały) tych pierwszych.
Zebrane w ciągu ponad półwiecza doświadczenia pokazały, że najlepszym algorytmem ogólnego przeznaczenia tj. pierwszym algorytmem jakiego należy użyć gdy zadanie optymalizacji nie ma specjalnych własności (struktury), jest quasi-newtonowski algorytm BFGS. Wypisany wyżej wzór dla algorytmu BFGS bez pamięci jest już wystarczająco skomplikowany, dlatego starano się znaleźć prostszą formułę wzoru pełnego niż zaproponowana oryginalnie. W 1980 roku J. Nocedal podał wzory następujące:
Praktyczna realizacja quasi-newtonowskiego algorytmu BFGS może być następująca.
Algorytm quasi-newtonowski (wersja BFGS z odnową i skalowaniem macierzy początkowej)
Wybierz punkt początkowy , podstaw
(stosujemy wzór Broydena – Fletchera – Goldfarba – Shanno w wersji Nocedala (4.23)). Jako kandydata na kierunek poprawy wybierz wektor d, podstawiając
6. Jeżeli (d jest kierunkiem poprawy), podstaw oraz i przejdź do 7. W przeciwnym przypadku podstaw i przejdź do 1 (dokonaj odnowy).
7. Wyznacz długość kroku w kierunku poprawy d, podstaw
.
8. Wylicz następny punkt podstawiając
10. Oblicz , podstaw
Jeżeli , to przyjmij za rozwiązanie, podstaw
i stop .W przeciwnym przypadku idź do
11.
11. Jeżeli , to podstaw podstaw i idź do 5. W przeciwnym przypadku idź do 12.
12. Podstaw . Podstaw . Jeżeli gdzie n jest wymiarem przestrzeni poszukiwań, to idź do 4. W przeciwnym przypadku podstaw i idź do 1 (odnowa po krokach od ostatniej odnowy).
Omówmy krótko różnice miedzy przedstawionym powyżej algorytmem a jego teoretycznym prototypem danym wzorami (4.22).
- Nie zakładamy dokładnej minimalizacji w kierunku. Musimy zatem liczyć się z tym, że kolejny kierunek może nie być kierunkiem poprawy. Dlatego wprowadzono krok szósty wywołujący odnowę gdy trzeba „sprowadzić algorytm ze złej drogi”. Ponadto, podobnie jak dla algorytmu gradientu sprzężonego, wprowadzono odnowę, tym razem co kroków. Liczba ta wzięła się z wieloletnich doświadczeń i uwzględnia fakt, że algorytm BFGS stosuje się często do znajdowania rozwiązania zadań o niewielkiej wymiarowości.
- Wzór (4.21), a za nim zastosowany w algorytmie wzór (4.23), nie określa jak wybierać macierz początkową . Jedyne wymaganie to jej dodatnia określoność. Najprostszy pomysł to wybranie jako początkowej – macierzy jednostkowej. Praktyka jednak pokazała, że istotne przyspieszenie zbieżności początkowych iteracji można uzyskać skalując w sposób dobrany do własności zadania tę macierz. Przedstawiono stosowne nieco skomplikowane rozważania pozwalające określić dla pewnych klas zadań wzory ustalające wartość współczynnika skalującego. Z drugiej strony swój korzystny wpływ na szybkość zbieżności algorytmu dla wielu różnych zadań, tzn. swoją uniwersalność, potwierdził współczynnik określony prostym wzorem
- Algorytm BFGS, jak wszystkie algorytmy quasi-newtonowskie, jest algorytmem, który opiera się na założeniu, że funkcja kwadratowa dobrze aproksymuje zachowanie funkcji minimalizowanej w dostatecznie dużym otoczeniu punktu bieżącego. Badania teoretyczne pokazały, że do udowodnienia zbieżności np. sama wypukłość funkcji celu nie wystarczy. Ponieważ, po pierwsze – nikomu nie chce się sprawdzać tych warunków (najczęściej jest to co najmniej trudne) i po drugie – praktyka pokazała, że algorytmy quasi-newtonowskie potrafią znaleźć rozwiązanie i dla zadań nie spełniających tych założeń, pod warunkiem, że wystartują z dobrego punktu początkowego, to w praktycznych wariantach tych algorytmów stosuje się co z góry ustaloną liczbę (w naszym przypadku kroków odnowę. Jak pamiętamy gwarantuje to przy słabych założeniach: różniczkowalności funkcji celu i lipschitzowości jej gradientu, że dolna granica ciągu, którego elementami są normy gradientu liczone w kolejnych punktach wyliczanych przez algorytm, jest równa zeru, nawet bez konieczności dokonywania dokładnej minimalizacji w kierunku. Podobnie jak dla algorytmów gradientu sprzężonego przy mocniejszych założeniach pokazano, że algorytmy quasi-newtonowskie zbiegają superliniowo do punktu minimalizującego.
Przedstawimy teraz krótkie porównanie zachowania quasi-newtonowskiego algorytmu BFGS bez odnowy z algorytmem gradientu sprzężonego w wersji PPR minimalizujących bananową funkcję Rosenbrocka. W obu algorytmach minimalizacja w kierunku wykorzystywała wielomian interpolacyjny.
Algorytm gradientu sprzężonego zużył 24 iteracje na dotarcie do rozwiązania, a quasi-newtonowskiemu algorytmowi BFGS wystarczyło tylko 11 iteracji.
Przedstawione rysunki pokazują wyższość algorytmu BFGS. Nie jest to przypadek. Szerokie badania porównawcze prowadzone od początku lat osiemdziesiątych XX w. wykazały, że algorytm ten, jak już wspomniano, jest pierwszym algorytmem jakim należy się posłużyć gdy zadanie optymalizacji nie ma specjalnych własności (struktury) – jest najefektywniejszym algorytmem ogólnego przeznaczenia dla zadań o niezbyt dużej wymiarowości.