OptiLab kam se to sešlo?

Tohle je statická kopie kapitoly pro vyhledávače. Interaktivní verze má animované obrázky, kontrolní otázky a tlačítka, která příklad načtou do kalkulačky.

Když Hessián není: BFGS a Nelder-Mead

Newton chce druhé derivace a ty často nejsou k mání — buď je drahé je spočítat, nebo účelová funkce vůbec není vzorec, ale výsledek simulace či měření.

BFGS: zakřivení se dá odposlechnout

Sousední gradienty o zakřivení něco vědí. Když se udělá krok s a gradient se přitom změní o y, platí přibližně y ≈ H s — a to je informace, kterou lze sbírat. BFGS z ní postupně skládá odhad inverzního Hessiánu, takže krok je pak jen násobení maticí, žádné řešení soustavy:

s = x_{k+1} − x_k, y = ∇f_{k+1} − ∇f_kco se za krok naměřilo
B ← B + ((sᵀy + yᵀBy)(ssᵀ))/(sᵀy)² − (Bysᵀ + syᵀB)/(sᵀy)aktualizace odhadu inverzního Hessiánu

Výsledek je superlineární konvergence bez jediné druhé derivace. Pro úlohy do řádu stovek proměnných je BFGS výchozí volba, a v téhle labce je to metoda, kterou používá multistart.

Podmínka sᵀy > 0 v kódu není kosmetika. Když neplatí, znamená to, že se zakřivení podél kroku chová nefyzikálně, a aktualizace by rozbila pozitivní definitnost odhadu. Tehdy se krok prostě přeskočí. A když se odhad přesto zkazí natolik, že vyrobí směr do kopce, restartuje se na jednotkovou matici — tedy na jeden krok obyčejného gradientního sestupu.

Nelder-Mead: bez derivací úplně

Simplex o n+1 vrcholech se plazí prostorem: nejhorší vrchol se zrcadlí přes těžiště ostatních, a podle toho, jak to dopadne, se navíc protáhne, stáhne nebo se celý simplex smrskne. Žádná derivace v tom není.

Je to pomalé a na hladké úloze výrazně horší než BFGS. Za to umí něco, co ostatní ne: funkci se zlomem, funkci z měření, funkci se šumem. Testy tady na něj pouštějí |x−1| + |y+2|, kde derivace v řešení neexistuje — a projde.

metodaco potřebujekdy sáhnout
Newtongradient + Hessiánmálo proměnných, levné derivace
BFGSjen gradientvýchozí volba pro hladké úlohy
Nelder-Meadjen hodnoty funkcezlomy, šum, simulace, měření

Vzorce v této kapitole

s, y — sečnová dvojice
s = x_{k+1} − x_k, y = ∇f_{k+1} − ∇f_k [—] y ≈ H s
B — BFGS aktualizace
B ← B + ((sᵀy+yᵀBy)ssᵀ)/(sᵀy)² − (Bysᵀ+syᵀB)/(sᵀy) [—] odhad inverzního Hessiánu
sᵀy — podmínka zakřivení
sᵀy > 0 [—] jinak se krok přeskočí
— — Nelder-Mead
odraz 1 · protažení 2 · stažení ½ · smrštění ½ [—] standardní součinitele