Zacznę od ogólnej uwagi: informacje pierwszego rzędu (tj. Użycie tylko gradientów, które kodują nachylenie) mogą dać tylko informacje kierunkowe: mogą powiedzieć, że wartość funkcji maleje w kierunku wyszukiwania, ale nie na jak długo . Aby zdecydować, jak daleko iść w kierunku wyszukiwania, potrzebujesz dodatkowych informacji (opadanie gradientu ze stałymi długościami kroków może się nie powieść nawet w przypadku wypukłych problemów kwadratowych). W tym celu masz zasadniczo dwie możliwości:
- Użyj informacji drugiego rzędu (która koduje krzywiznę), na przykład stosując metodę Newtona zamiast spadku gradientu (dla którego zawsze możesz użyć długości kroku1 wystarczająco blisko minimizatora).
- Próba i błąd (przez co oczywiście mam na myśli właściwe wyszukiwanie linii, takie jak Armijo).
Jeśli, jak piszesz, nie masz dostępu do drugich pochodnych, a ocena funkcji obejctive jest bardzo droga, jedyną nadzieją jest kompromis: użyj wystarczającej przybliżonej informacji drugiego rzędu, aby uzyskać odpowiednią długość kroku kandydata, na przykład linię szukaj tylko O(1) oceny (tj. co najwyżej (mała) stała wielokrotność wysiłku potrzebnego do oceny gradientu).
Jedną z możliwości jest zastosowanie długości kroku Barzilai - Borwein (patrz np. Fletcher: W metodzie Barzilai-Borwein . Optymalizacja i kontrola za pomocą aplikacji, 235–256, Appl. Optim., 96, Springer, New York, 2005 ). Chodzi o to, aby użyć przybliżenia skończonej różnicy krzywizny wzdłuż kierunku wyszukiwania, aby uzyskać oszacowanie wielkości kroku. W szczególności wybierzα0>0 dowolne, ustawione g0:=∇f(x0) a następnie dla k=0,...:
- Zestaw sk=−α−1kgk i xk+1=xk+sk
- Oceniać gk+1=∇f(xk+1) i nastaw yk=gk+1−gk
- Zestaw αk+1=(yk)Tyk(yk)Tsk
Ten wybór można wykazać jako zbieżny (w praktyce bardzo szybko) dla funkcji kwadratowych, ale zbieżność nie jest monotoniczna (tj. Wartość funkcjif(xk+1) może być większy niż f(xk), ale tylko raz na jakiś czas; patrz wykres na stronie 10 w pracy Fletchera). W przypadku funkcji niekwadratowych należy połączyć to z wyszukiwaniem linii, które należy zmodyfikować, aby poradzić sobie z niemonotonicznością. Jedną z możliwości jest wybórσk∈(0,α−1k) (np. przez cofanie), takie jak
f(xk−σkgk)≤maxmax(k−M,1)≤j≤kf(xj)−γσk(gk)Tgk,
gdzie jest typowym parametrem Armijo, a kontroluje stopień monotoniczności (np. ). Istnieje również wariant, który używa wartości gradientu zamiast wartości funkcji, ale w twoim przypadku gradient jest nawet droższy do oceny niż funkcja, więc nie ma to sensu. (Uwaga: Możesz oczywiście spróbować ślepo zaakceptować długość kroku BB i zaufać swojemu szczęściu, ale jeśli potrzebujesz jakiejkolwiek solidności - jak napisałeś w komentarzach - byłby to naprawdę zły pomysł).
γ∈(0,1)MM=10
Alternatywnym (i moim zdaniem znacznie lepszym) podejściem byłoby zastosowanie tego przybliżenia różnic skończonych już w obliczeniach kierunku wyszukiwania; nazywa się to metodą quasi-Newtona . Chodzi o stopniowe budowanie przybliżenia Hesji przy użyciu różnic gradientów. Na przykład możesz wziąć (macierz tożsamości), a dla rozwiązują
i ustaw
pomocą jak wyżej i . (To się nazywa aktualizacja Broyden∇2f(xk)H0=Idk=0,…
Hksk=−gk,(1)
Hk+1=Hk+(yk−Hksk)T(sk)T(sk)Tsk
ykxk+1=xk+ski jest rzadko stosowany w praktyce; lepszą, ale nieco bardziej skomplikowaną aktualizacją jest aktualizacja
BFGS , do której - i więcej informacji - odnoszę się do książki Nocedal i Wrighta pt .
Optymalizacja numeryczna .) Minusem jest to, że a) wymagałoby to rozwiązania systemu liniowego na każdym etapie (ale tylko wielkości nieznanej, co w twoim przypadku jest warunkiem początkowym, dlatego wysiłek powinien być zdominowany przez rozwiązywanie PDE w celu uzyskania gradientu; istnieją też zasady aktualizacji przybliżeń
odwrotnego Hesji, które wymagają obliczenia tylko jednej macierzy - produkt wektorowy) ib) nadal potrzebujesz wyszukiwania linii, aby zagwarantować zbieżność ...
Na szczęście w tym kontekście istnieje alternatywne podejście, które wykorzystuje każdą ocenę funkcji. Chodzi o to, że dla symetryczny i dodatni określony (co jest gwarantowane w przypadku aktualizacji BFGS) rozwiązanie jest równoważne zminimalizowaniu modelu kwadratowego
W metodzie regionu zaufania zrobiłbyś to z dodatkowym ograniczeniem, że , gdzie jest odpowiednio wybranym promieniem regionu zaufania (który odgrywa rolę długości kroku ). Kluczową ideą jest teraz, aby wybrać ten promień adaptacyjnie, w oparciu o obliczony krok. W szczególności patrzysz na stosunek
Hk(1)
qk(s)=12sTHks+sTgk.
∥s∥≤ΔkΔkσkρk:=f(xk)−f(xk+sk)f(xk)−qk(sk)
rzeczywistej i przewidywanej redukcji wartości funkcji. Jeśli jest bardzo mały, twój model był zły, a ty i próbujesz ponownie z . Jeśli jest bliskie , twój model jest dobry i ustawiasz i zwiększasz . W przeciwnym razie po prostu ustaw i pozostaw spokoju. Aby obliczyć rzeczywisty minimalizator z
ρkskΔk+1<Δkρk1xk+1=xk+skΔk+1>Δkxk+1=xk+skΔkskmin∥s∥≤Δkqk(s), istnieje kilka strategii pozwalających uniknąć konieczności rozwiązania pełnego problemu optymalizacji; moją ulubioną jest
skrócona metoda CG Steihauga . Aby uzyskać więcej informacji, ponownie odnoszę się do Nocedal i Wright.