陸吾生最優化計算聽課筆記1


第一堂課的內容主要是關於無約束最優化問題的。一開始,講了如何將解方程問題歸結為最優化問題。假設我們要解以下方程組,共有$m$個方程:

\begin{align*}&p_1(x)=0\\&p_2(x)=0\\&...\\&p_m(x)=0\end{align*}

其 中$x$是n維歐式空間$\mathbb{R}^n$中的一個向量,$p_i(x)$是關於$x$的函數,可以是線性也可以非線性。我們的目標是找到一個 使上式都滿足的$x$。這里需要討論$m$與$n$的關系,如果$n>m$,這個方程組有很多解,如果$n<m$這個方程無解,如 果$n=m$這個方程組有唯一解。

實際上,直接去解這個方程組是很困難的,因為式子左端的函數可以是非線性的,可以是復雜的多項式,甚至是更復雜的三角函數、對數函數組成的代數方程。所以通常我們不是直接去解這個方程的。我們希望能把這個方程組簡化一下。怎么簡化呢?

我們注意到一個$p(x)$的平方很有用的性質,即$p^2(x)\geq 0$,且$p(x)=0$等價於$p^2(x)=0$

因此,原方程組等價於

\begin{align*}&p^2_1(x)=0\\&p^2_2(x)=0\\&...\\&p^2_m(x)=0\end{align*}

我們可以進一步把上述的形式等價地寫成

$$\sum_{i=1}^m p_i^2(x)=0$$

為什么二者等價呢?

首先如果方程組成立,則$\sum_{i=1}^m p_i^2(x)=0$一定成立

其次,因為$p^2(x)\geq 0$,故$\sum_{i=1}^m p_i^2(x)\geq 0$,假如某個$p^2(x)>0$會導致和式一定大於0,要保證和式為0,只可能是所有$p_i(x)$都等於0。

令$f(x)=\sum_{i=1}^m p_i^2(x)$,則$f(x)$有最小值0,滿足$f(x)=0$的點就是方程組的解

然而一般的方程組不一定有解,即不存在一個點滿足所有式子,使得$f(x)$為0(但由於有的方程組無解,所以$f(x)$必定取不到0,但其最小值可能只比0大一點)。 但在許多工程鄰域中,我們希望至少能有個近似解,因此我們退而求其次,既然沒有解,那我們找近似解不就好了?近似解不要求所有式子都滿足,只要左右兩端的 誤差不超過一定的精度就可以了。顯然$f(x)$越接近0越好,因此,求解近似解問題就轉化為求$f(x)$的最小值

$$ \min f(x) $$

如 精度為$f(x)\geq 10^{-3}$。這樣的解也是很好的近似,假設有100個方程,那么每個方程平均分到的解的精度為$10^{-5}$,或者我們可以說每個方程的解的精 度至多不超過$10^{-3}$。不過有時候其中只有幾個式子非常重要(或者說對精度要求非常高),其他的則沒有那么重要(精度要求比較低)。在這種情況 下,我們可以為每個式子分配一個權重,用來強調式子的重要性。

$$ \min \sum_{i=1}^m w_ip_i^2(x)$$

這是一個無約束最優化問題,求解無約束最優化問題有兩種方法:解析法和數值法。

解析法的基本思路是對$f(x)$求導,然后令導數為0,再根據二階導判斷駐點是極大值還是極小值,還是拐點。一元的情況下,我們求導數。多元的情況下,我 們求的是梯度。梯度是一元導數的一個推廣,是由$f(x)$在各個變量上的偏導數組成的一個列向量,記為$\nabla f(x)$。

另外,我們介紹一個二階導數的推廣:Hessian矩陣。Hessian矩陣是一個$n\times n$的對稱方陣,且$H(x)_{ij}=\frac{\partial f(x)}{\partial x_i\partial x_j}$

Hessian矩陣也可以記為$\nabla(\nabla^T f(x))$,先對$f(x)$求梯度,轉置后再求一次梯度。也可以簡記為$\nabla^2 f(x)$

回到解析法,我們首先要滿足$\nabla f(x)=0$的點,即駐點。駐點既可以是極大值,也可以是極小值,或者是鞍點(拐點)。鞍點是指既不是極大也不是極小,但是梯度為0的點。某些方向上函數上升,某些方向上函數值下降。所以梯度為0的點不一定是好點,但是好的點一定梯度等於0.

那么如何判斷駐點的性質呢?回顧一元微積分中,我們是通過二階導數的符號來判斷的,若二階導大於0,是極小點;若二階導小於0,是極大點;若二階導等於0,既不是極大也不是極小,而是拐點。將這個結論推廣到多元函數上來,就需要分析Hessian矩陣的特征值。由於Hessian矩陣是個對稱矩陣,因此它的特征值一定是實數,於是可以比較大小。

如果Hessian矩陣的特征值都是正數,即正定(記為$H\succ 0$),那么駐點是極小值點

如果Hessian矩陣的特征值都是負數,即負定(記為$H\prec 0$),那么駐點是極大值點

如果是不定的,那么是鞍點

然而有一類特殊的矩陣我們沒有辦法判斷,那就是半正定和半負定矩陣,當Hessian矩陣屬於這兩者之一時,既有可能是極大值/極小值也有可能是鞍點,這時我們需要進一步根據3階導數來判斷(感覺是個張量)

注意到求駐點的問題也是一個解方程組的問題,這並不是一個好處理的問題。因此我們接下來要介紹數值法。數值法是一種迭代方法,其步驟如下:

(1)初始化起始點$x_1$,初始化迭代次數T,初始化計數器$k=1$

(2)根據當前迭代點$x_k$尋找一個最優下降方向$d_k$

(3)第$k$輪迭代從當前所在點$x_k$出發,尋找一個使得目標函數值下降的最佳方向$d_k$,作一維線性搜索$f(x_k+\alpha d_k)$,找到最優步長$\alpha_k$,然后移動到最優步長所對應的點$x_{k+1}=x_{k}+\alpha_k d_k$,

(4)如果滿足一定的收斂准則,算法結束;如果不滿足,跳回第(2)步

由於每輪一維搜索所選擇的方向都應該指向使目標函數值下降的方向,所以步長一定大於0(如果步長小於0,等價於沿着反方向即函數值上升的方向進行搜索,運氣不好的話[反方向沒有另一個局部極小值]最終有可能不收斂)

最耗時間的步驟是第2步和第3步,一個優化算法的好壞,取決於可行下降方向選的好不好,如果大方向找對了,那么一定可以得到一個最優解。

方向找到后,我們需要沿着下降方向進行一維搜索,尋找最優步長,因為迭代點和搜索方向已經給定,實際上只有一個變量,就是步長。記$F(\alpha)=f(x_k+\alpha d_k)$,$F(\alpha)$關於$\alpha$求導,並令導數為0,即能求出最優步長。但是由於實際問題中,$F(\alpha)$有很多的局部極小值,我們的目的是找到這些局部極小值中的最小值,要精確地找到這個最小值點是個很困難的問題:

我們得到一個極小值后,是應該停下來?還是應該繼續往前走?如果停下來,后面沒有更好的極小值點怎么辦?如果繼續往前走,后面函數值一直上升怎么辦?

不過fletcher在他的書里介紹了一種方法,能夠把最優點所在的區間“套”出來,有了這個區間后,我們可以用各種一維搜索方法(如黃金分割,拋物線插值,對分搜索)在這個區間里面搜索那個最優點。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM