9.5 Spádové metody

V této sekci si ukážeme obecný postup při numerickém hledání lokálních minim22 funkcí $f: \R^n \to \R$ bez omezujících podmínek na proměnné $x_i$, $i=1,2,\ldots,n$.Řešíme tedy úlohu

\begin{equation*} \text{minimalizuj} \ f(\vx), \end{equation*}

kde

  • $f: \R^n \to \R$ a $x$ probíhá všechny možné hodnoty $\vx \in D_f$,

  • definiční obor $D_f$ je otevřená množina,

  • funkce $f$ je minimálně dvakrát spojitě diferencovatelná23.

Řešení hledáme iterativně pomocí tzv. spádové metody (descent method), jejíž princip je velmi jednoduchý: v každé iteraci se snažíme snížit hodnotu minimalizované funkce $f$.

Nechť je dána první aproximace $\vx^{(1)} \in D_f$ (náhodně vybraný vektor, nebo vektor vybraný na základě nějakého heuristického postupu). Sestavíme posloupnost vektorů $\big(\vx^{(k)}\big)_{k=1}^\infty$, podle rekurentního předpisu

\begin{equation*} \vx^{(k+1)} = \vx^{(k)} + t^{(k)} \Delta \vx^{(k)}\,, \end{equation*}

kde „$\Delta \vx^{(k)}$“ je vhodně zvolený vektor (směr poklesu) a $t^{(k)}$ délka tzv. kroku. Následující člen vždy musí být zvolen tak, aby $f(\vx^{(k+1)}) < f(\vx^{(k)})$, samozřejmě vyjma případu, kdy $\vx^{(k)}$ je již optimální (je bodem lokálního minima).

Jak ale zvolit směr $\Delta \vx^{(k)}$ a krok $t^{(k)}$? Tím se budeme zabývat v další části této podkapitoly.

9.5.1 Jeden krok

Jeden krok typické spádové metody lze tedy popsat následovně (odpustíme si horní indexy, budeme mluvit o jednom kroku): Nechť je dáno $\vx \in D_f$.

  1. Urči směr $\Delta \vx$.

  2. Zvol velikost kroku $t > 0$.

  3. Napočti $\vx + t \Delta \vx$ a ulož ho do $\vx$.

Pro grafickou ilustraci viz Obrázek 9.11.

Obrázek 9.11: Ilustrace k volbě kroku.

Tento postup opakuj dokud není splněno kritérium pro zastavení iterační smyčky. Praktické kritérium pro zastavení může být například dostatečná nulovost gradientu. Je také vhodné kontrolovat maximální povolený počet iterací.

Konkrétní volbě směru $\Delta \vx$ se budeme věnovat podrobněji níže. V tento okamžik pouze uveďme, že pro $t$ blízká nule přibližně platí (viz Taylorova věta, resp. Lemma 9.1)

\begin{equation*} f(\vx + t\Delta \vx) \approx f(\vx) + t \nabla f(\vx) \cdot \Delta \vx. \end{equation*}

Pokud chceme být schopní i malým krokem funkční hodnotu vždy zmenšit, musíme směr kroku, tj. $\Delta \vx$, vždy volit tak, aby

\begin{equation*} \nabla f(\vx) \cdot \Delta \vx < 0. \end{equation*}

Také ve zbytku popisu algoritmu předpokládáme, že v každém kroku $\nabla f(\vx) \neq 0$. Pokud by gradient byl nulový, pak běh algoritmu již skončil a dostáváme kandidáta na extrém.

9.5.2 Zpětné krokování

Nechť máme bod $\vx$ a již jsme zvolili směr $\Delta \vx$. Ideálně bychom chtěli $t > 0$ zvolit tak, aby v tomto bodě $t$ bylo nabyto minimum funkce jedné proměnné $s > 0$,

\begin{equation*} s \mapsto f(\vx + s \Delta \vx) \end{equation*}

Analytické řešení tohoto problému nemusí být obecně jednoduché, stejně bychom se museli uchýlit k numerickým metodám (ovšem s jednou proměnnou!). V praxi se často používá tzv. zpětné krokování (backtracking), které popíšeme v následujícím odstavci.

Algoritmus zpětného krokování probíhá následovně:

  • Jsou dány $f$, směr $\Delta \vx$, bod $\vx\in D_f$ a parametry $\alpha\in(0,1/2)$, $\beta\in (0,1)$.

  • Polož $t := 1$. Dokud $f(\vx + t\Delta \vx) > f(\vx) + \alpha t \nabla f(\vx) \cdot \Delta \vx$ změň $t$ na $\beta t$.

  • Vrať $t$.

Parametr $\alpha$ kontroluje, jaký pokles jsme ochotni akceptovat. Parametr $\beta$ pak udává, jak rychle zmenšujeme prvotní $t$ (proto zpětné krokování). Viz Obrázek 9.12.

Obrázek 9.12: Na obrázku je znázorněn řez grafu funkce nad přímkou $\vx + t\Delta \vx$ (černě), tečna $f(\vx) + t \nabla f(\vx) \cdot \Delta \vx$ a přípustná mez poklesu $f(\vx) + \alpha t \nabla f(\vx) \cdot \Delta \vx$. Bod $t_1$ by nebyl akceptován (i když k poklesu došlo). Bod $t_2$ by již akceptován byl (i když nedává nejmenší možnou hodnotu).

9.5.3 Volby směru

Předpokládejme, že jsme v bodě $\vx$ a vydáme se malým krokem směrem $\vv$. Potom lineární aproximace změny funkční hodnoty je

\begin{equation*} f(\vx + \vv) \approx f(\vx) + \nabla f(\vx) \cdot \vv\,. \end{equation*}

Směry, ve kterých dojde k poklesu funkční hodnoty, splňují $\nabla f(\vx) \cdot \vv < 0$.

Zvolme normu $\|\cdot\|$ na $\R^n$. Směr nejprudšího poklesu je pak dán řešením úlohy

\begin{equation*} \Delta \vx = \mathrm{argmin}\,\{ \nabla f(\vx) \cdot \vv \mid \|\vv\| \leq 1 \}\,. \end{equation*}

Pro reálnou symetrickou pozitivně definitní matici $\mP \in\R^{n,n}$ můžeme definovat normu (pro Euklidovskou máme $\mP = \mE$)

\begin{equation*} \| \vv \|_{\mP} \ceq \sqrt{ \vv^T \mP \vv }\,, \quad \vv\in\R^n\,. \end{equation*}

Směr největšího poklesu vzhledem k této normě je pak dán vektorem

\begin{equation*} \Delta \vx = - \mP^{-1} \nabla f(\vx)^T. \end{equation*}

Uvažme tedy obecně úlohu minimalizovat lineární reálnou funkci

\begin{equation*} g(\vv) = \vc^T \vv, \quad D_g = \R^n, \end{equation*}

kde $\vc \in \R^n$ je zadaný vektor, za podmínky

\begin{equation*} \|\vv\|^2 = \vv^T \vv = 1. \end{equation*}

Vzpomeňme si, že ze Schwarzovy nerovnosti plyne nerovnost $|g(\vv)| \leq \|\vc\| \|\vv\|$, což za uvedené podmínky na vektory $\vv$ implikuje $|g(\vv)| \leq \|\vc\|$. Této maximální meze ale snadno dosáhneme právě volbami

\begin{equation*} \vv_{+} = \frac{c}{\|c\|} \quad \text{a} \quad \vv_{-} = -\frac{c}{\|c\|}. \end{equation*}

První vektor dává maximální hodnotu a druhý minimální hodnotu funkce $g$ za uvedených podmínek. To jsme přesně očekávali: v kontextu předcházejících úvah je $\vc$ gradient.

Uvažme funkci $g(\vv) = \vc^T \vv$, $\vv \in D_g = \R^n$, pro zadaný vektor $\vc\in\R^n$. Hledáme řešení úlohy

\begin{equation*} \begin{cases} \text{minimalizuj} & g(\vv) = \vc^T \vv\,, \\ \text{za podmínky} & \vv^T \mP \vv = 1\,, \\ & \vv\in\R^n\,. \end{cases} \end{equation*}

kde $\mP$ je (reálná) symetrická pozitivně definitní matice.

Matice $\mP$ má všechna vlastní čísla kladná a je diagonalizovatelná, tj.

\begin{equation*} \mP = \boldsymbol{U} \mathrm{diag}\,(\lambda_1,\ldots,\lambda_n) \boldsymbol{U}^T, \end{equation*}

kde $\lambda_i > 0$, $i \in \hat n$, jsou vlastní čísla matice $\mP$ a matice $U$ je (reálná) a ortogonální.

Definujme matici $\mP^{1/2}$ předpisem

\begin{equation*} \mP^{1/2} \ceq \boldsymbol{U} \mathrm{diag}\,\Big(\lambda_1^{1/2},\ldots,\lambda_n^{1/2}\Big) \boldsymbol{U}^T. \end{equation*}

Tato matice splňuje $\mP^{1/2} \mP^{1/2} = \mP$, je (reálná) symetrická a regulární.

$\square$

Naší minimalizační úlohu proto můžeme přepsat do následujícího tvaru,

\begin{equation*} \begin{cases} \text{minimalizuj} & g(\vv) = \left((\mP^{1/2})^{-1} \vc\right)^T \mP^{1/2} \vv\,, \\ \text{za podmínky} & (\mP^{1/2} \vv)^T (\mP^{1/2} \vv) = 1\,, \ \vv\in\R^n\,. \end{cases} \end{equation*}

Pokud provedeme změnu souřadnic $\vz := \mP^{1/2} \vv$, tak dostaneme minimalizační úlohu tvaru

\begin{equation*} \begin{cases} \text{minimalizuj} & \tilde g(\vz) = \left((\mP^{1/2})^{-1} \vc\right)^T \vz\,, \\ \text{za podmínky} & \vz^T \vz = 1\, \ \vz\in\R^n\,. \end{cases} \end{equation*}

O té z předchozího případu víme, že nabývá maxima a minima v

\begin{equation*} \vz_{+} = \frac{(\mP^{1/2})^{-1} \vc}{\|(\mP^{1/2})^{-1} \vc\|} \quad \text{a} \quad \vz_{-} = -\frac{(\mP^{1/2})^{-1} \vc}{\|(\mP^{1/2})^{-1} \vc\|}. \end{equation*}

V původních proměnných pak v

\begin{equation*} \vv_{+} = \frac{\mP^{-1} \vc}{\|(\mP^{1/2})^{-1} \vc\|} \quad \text{a} \quad \vv_{-} = -\frac{\mP^{-1} \vc}{\|(\mP^{1/2})^{-1} \vc\|}. \end{equation*}

$\square$