Frank-Wolfe方法屬於約束優化中可行方向法的一種。上一篇博文對同類型的Zoutendijk可行性方法進行了介紹,這一部分着重關注Frank-Wolfe方法。Frank-Wolfe方法的基本思想是:每次迭代中使用一階泰勒展開式將目標函數線性化,通過解線性規劃得到可行方向,進而沿此方向在可行域內作一維搜索。
一、Frank-Wolfe所針對的優化問題
首先要明確這個算法的提出是針對哪一種問題。之前的Zoutendijk可行性方法可以解 等式線性約束+不等式線性約束,而Frank-Wolfe方法只能解等式線性約束下的非線性規化問題,形式如下 minf(x) s.t. Ax=b & x⩾0
二、確定可行方向
首先在初始可行點x(k)處進行考察,將f(x)在x(k)處進行一階Taylor多項式進行展開:f(x)=f(x(k))+▽f(x(k))T(x−x(k))=▽f(x(k))Tx+[f(x(k))−f(x(k))Tx(k)] 問題轉化爲在可行域S內最小化這個一階展開式:min ▽f(x(k))Tx+[f(x(k))−f(x(k))Tx(k)]s.t. x∈S 考慮到方括號內爲常數,去掉之後變爲:min ▽f(x(k))Txs.t. x∈S 求解這個線性規劃可以得到最優解y(k),由線性規劃知識可以知道一定在S的極點達到。
現在研究變動後的y(k)對函數值的影響,也就是運動方向d和函數梯度的乘積▽f(x(k))T(y(k)−x(k))。此時共有兩種情況:
**1.**若乘積爲0,則方向無法和梯度構成鈍角,x^{(k)}是原問題KT點。
**2.**若乘積小於0,則方向可以和梯度構成鈍角,使得函數值繼續下降。
(注:y(k)是用於確定方向,而不是下一步迭代點,更像一個“導航點”)
三、確定移動步長
連接初始點x(k)和導航點y(k),在此直線上進行一維搜索,則步長區[0,1]:min f(x(k)+λ(y(k)−x(k)))s.t. λ∈[0,1] 得到λ之後即可得到下一個可行點:x(k+1)=x(k)+λ(y(k)−x(k))
四、算法分析
Frank-Wolfe方法每次迭代時,搜索方向總時指向某個極點,當接近最優解時,搜索方向和函數梯度趨於正交,並不是最好的搜索方向。但是由於它將非線性規化問題轉化爲了一系列線性規劃問題,有時可以達到好的計算效果。