FISTA淺析

前言:

FISTA(A fast iterative shrinkage-thresholding algorithm)是一種快速的迭代閾值收縮算法(ISTA)。FISTA和ISTA都是基於梯度下降的思想,在迭代過程中進行了更爲聰明(smarter)的選擇,從而達到更快的迭代速度。理論證明:FISTA和ISTA的迭代收斂速度分別爲O(1/k2)和O(1/k)。

  本篇博文先從解決優化問題的傳統方法“梯度下降”開始,然後引入ISTA,再上升爲FISTA,最後在到其應用(主要在圖像的去模糊方面和特徵匹配)。文章主要參考資料如下:
  [1] A Fast Iterative Shrinkage-Thresholding Algorithm for Linear Inverse Problems。

  [2] Proximal Gradient Descent for L1 Regularization

  [3] 線性迴歸及梯度下

-------------------------------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------我是分割線--------------------------------------------------------

1.梯度下降法

考慮以下線性轉換問題:b = Ax + w  (1)

  例如在圖像模糊問題中,A爲模糊模板(由未模糊圖像通過轉換而來),b爲模糊圖像,w爲噪聲。並且,A和b已知,x爲待求的係數。

  求解該問題的的傳統方法爲最小二乘法,思想很簡單粗暴:使得重構誤差||Ax-b||2最小。即:

對f(x) = ||Ax-b||2求導,可得其導數爲:f'(x) = 2AT(Ax-b)。對於該問題,令導數爲零即可以取得最小值(函數f(x)爲凸函數,其極小值即爲最小值)。

  1)如果A爲非奇異矩陣,即A可逆的話,那麼可得該問題的精確解爲x=A-1b。

 2)如果A爲奇異矩陣,即A不可逆,則該問題沒有精確解。退而求其次,我們求一個近似解就好,||Ax-b||2<=ϵ。


其中,||x||_1爲懲罰項,用以規範化參數x。該例子使用L1範數作爲懲罰項,是希望x儘量稀疏(非零元素個數儘可能少),即b是A的一個稀疏表示。||Ax-b||2<=ϵ則爲約束條件,即重構誤差最小。問題(3)也可以描述爲:


式子(4)即爲一般稀疏表示的優化問題。希望重構誤差儘可能小,同時參數的個數儘可能少。

注:懲罰項也可以是L2或其他範數。


1.1 梯度下降法的缺陷

考慮更爲一般的情況,我們來討論梯度下降法。有無約束的優化問題如下:


梯度下降法基於這樣的觀察:如果實值函數F(x)在點a處可微且有定義,那麼函數F(x)在點a沿着梯度相反的方向-∇F(a)下降最快。

  基於此,我們假設f(x)連續可微(continuously differentiable)。如果存在一個足夠小的數值t>0使得x2 = x1 - t∇F(a),那麼:

  F(x1) >= F(x2)

  梯度下降法的核心就是通過式子(6)找到序列{xk},使得F(xk) >= F(xk-1)。


下圖詳細說明了梯度下降的過程:

從上圖可以看出:初始點不同,獲得的最小值也不同。因爲梯度下降法求解的是局部最小值,受初值的影響較大。如果函數f(x)爲凸函數的話,則局部最小值亦爲全局最小值。這時,初始點只對迭代速度有影響。

  再回頭看一下式子(6),我們使用步長tk和導數∇F(xk)來控制每一次迭代時x的變化量。再看一下上面那張圖,彩色繽紛那張。對於每一次迭代,我們當然希望F(x)的值降得越快越好,這樣我們就能更快速得獲得函數的最小值。因此,步長tk的選擇很重要。

  如果步長tk太小,則找到最小值的迭代次數非常多,即迭代速度非常慢,或者說迭代的收斂速度很慢;而步長太大的話,則會出現overshoot the minimum的現象,即不斷在最小值左右徘徊,跳來跳去的,如下圖所示:

然而,tk最後還是作用在xk-1上,得到xk。因此,更爲樸素的思想應該是:序列{xk}的個數儘可能小,即每一次迭代步伐儘可能大,函數值減少得儘可能多。那麼就是關於序列{xk}的選擇了,如何更好的選擇每一個點xk,使得函數值更快的趨近其最小值。


-----------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------我是分割線--------------------------------------------------------

ISTA和FISTA求解最小化問題的思想就是基於梯度下降法的,它們的優化在於對{xk}的選擇上。這裏我們不講證明,只講思想。想看證明的話,請看參考資料[1]


2.ISTA算法

ISTA(Iterative shrinkage-thresholding algorithm),即迭代閾值收縮算法。

先從無約束的優化問題開始,即上面的式子(5):


這時候,我們還假設了f(x)滿足Lipschitz連續條件,即f(x)的導數有下界,其最小下界稱爲Lipschitz常數L(f)。這時,對於任意的L>=L(f),有:


基於此,在點xk附近可以把函數值近似爲:


在梯度下降的每一步迭代中,將點xk-1處的近似函數取得最小值的點作爲下一次迭代的起始點xk,這就是所謂的proximal regularization算法(其中,tk=1/L)。


上面的方法只適合解決非約束問題。而ISTA要解決的可是帶懲罰項的優化問題,引入範數規範化函數g(x)對參數x進行約束,如下:


使用更爲一般的二次近似模型來求解上述的優化問題,在點y,F(x) := f(x) + g(x)的二次近似函數爲:


該函數的最小值表示爲,P_L是proximal(近端算子)的簡寫形式


忽略其常數項f(y)和∇F(y),這些有和沒有對結果沒有影響。再結合式子(11)和(12),PL(y)可以寫成:


顯然,使用ISTA解決帶約束的優化問題時的基本迭代步驟爲:


固定步長的ISTA的基本迭代步驟如下(步長t = 1/L(f)):


然而,固定步長的ISTA的缺點是:Lipschitz常數L(f)不一定可知或者可計算。例如,L1範數約束的優化問題,其Lipschitz常數依賴於ATA的最大特徵值。而對於大規模的問題,非常難計算。因此,使用以下帶回溯(backtracking)的ISTA:


理論證明:ISTA的收斂速度爲O(1/k);而FISTA的收斂速度爲O(1/k2)。實際應用中,FISTA亦明顯快於ISTA。其證明過程還是看這篇文章:[1]


3.FISTA

FISTA(A fast iterative shrinkage-thresholding algorithm)是一種快速的迭代閾值收縮算法(ISTA)。

FISTA與ISTA的區別在於迭代步驟中近似函數起始點y的選擇。ISTA使用前一次迭代求得的近似函數最小值點xk-1,而FISTA則使用另一種方法來計算y的位置。理論證明,其收斂速度能夠達到O(1/k2)。固定步長的FISTA的基本迭代步驟如下:


當然,考慮到與ISTA同樣的問題:問題規模大的時候,決定步長的Lipschitz常數計算複雜。FISTA與ISTA一樣,亦有其回溯算法。在這個問題上,FISTA與ISTA並沒有區別,上面也說了,FISTA與ISTA的區別僅僅在於每一步迭代時近似函數起始點的選擇。更加簡明的說:FISTA用一種更爲聰明的辦法選擇序列{xk},使得其基於梯度下降思想的迭代過程更加快速地趨近問題函數F(x)的最小值。

  帶回溯的FISTA算法基本迭代步驟如下:


值得注意的是,在每一步迭代中,計算近似函數的起止點時,FISTA使用前兩次迭代過程的結果xk-1,xk-1,對其進行簡單的線性組合生成下一次迭代的近似函數起始點yk。方法很簡單,但效果卻非常好。當然,這也是有理論支持的。

-----------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------我是分割線--------------------------------------------------------

4.ISTA&FISTA的應用(去模糊)

LASSO是一個圖像處理中經典的目標方程

第二項的1範數限制了x的稀疏性,前文已說過,在此不再敘述。


比如在圖像去模糊的問題中,已知模糊的圖像b,和模糊函數R,我們想恢復去模糊的圖像I。這些變量的關係可以表達成I*R=b,其中*爲卷積。在理想狀態下,b沒有任何噪音,那麼這個問題就很簡單。基於卷積定理,兩個函數在時域的卷積相當於頻域的相乘,那麼我們只需要求出b和R的傅里葉變換,然後相除得到I的傅里葉變換,再將其恢復到時域。但是一般來說模糊圖像b含有噪聲,這使得頻域中的操作異常不穩定,所以更多時候,我們希望通過以下方程求得I

其中模糊算子R表現成矩陣形式,I和b表示爲1維向量,函數p作爲規範項。我們將I小波分解,I=Wx,其中W爲小波基,x爲小波基係數。我們知道圖像的小波表示是稀疏的,那麼目標方程就變成了LASSO的形式

其中A=RW。現在的問題是,這個方程由於L1範數的存在,不是處處可微的,如果用subgradient的方法,收斂的速度會很慢。


4.1 LASSO問題用ISTA求解

因此我們用ISTA(Iterative Shrinkage-Thresholding Algorithm)。這個算法可以解決以上f+g形式的最小化問題,但ISTA適用於以下形式問題的求解:

1.目標方程是f+g的形式

2.f和g是凸的,f是可導的,g無所謂

3.g需要足夠簡單(可拆分的,可以做座標下降的coordinate descent)

於是,我們首先看對f做一般的遞歸下降。我們可以參照(13)式,便可以得到:

這時我們可以看到,假如g是一個開拆分的函數(比如L1範數),我們就可以對每一維分別進行座標下降,也就是將N維的最小值問題,轉化成N個1D的最小值問題。我們發現,如果的話,那麼這個問題有解析解,即每步的迭代可以寫成:


其中稱作shrinkage operator。


4.2 LASSO問題用FISTA求解

FISTA其實就是對ISTA應用Nestrerov加速。一個普通的Nestrerov加速遞歸下降的迭代步驟是:


應用到FISTA上的話,就是把第3步換成ISTA的迭代步驟。可以證明FISTA可以達到1/(t^2)的收斂速度。(t是迭代次數)通過下面的實驗可以看到,同樣迭代了300次,左圖(ISTA)仍未收斂,圖像仍然模糊。而右圖(FISTA)已經基本還原了去模糊的原圖。



-----------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------我是分割線--------------------------------------------------------


5.ISTA&FISTA的應用(特徵匹配)



f is the transformation function between U and V. Then we can see that:

through the above function. We can get:


=========================

參考自:

1、Junhao_wu: http://www.cnblogs.com/JunhaoWu/p/Fista.html

2、Beyond Algorithm is Math : http://blog.csdn.net/iverson_49/article/details/38354961

https://blog.csdn.net/huang1024rui/article/details/51534524
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章