FISTA浅析
前言:
FISTA(A fast iterative shrinkage-thresholding algorithm)是一種快速的迭代閾值收縮算法(ISTA)。FISTA和ISTA都是基于梯度下降的思想,在迭代過程中進(jìn)行了更為聰明(smarter)的選擇,從而達(dá)到更快的迭代速度。理論證明:FISTA和ISTA的迭代收斂速度分別為O(1/k2)和O(1/k)。
本篇博文先從解決優(yōu)化問題的傳統(tǒng)方法“梯度下降”開始,然后引入ISTA,再上升為FISTA,最后在到其應(yīng)用(主要在圖像的去模糊方面和特征匹配)。文章主要參考資料如下:
[1] A Fast Iterative Shrinkage-Thresholding Algorithm for Linear Inverse Problems。
[2] Proximal Gradient Descent for L1 Regularization
[3] 線性回歸及梯度下
-------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------我是分割線--------------------------------------------------------
1.梯度下降法
考慮以下線性轉(zhuǎn)換問題:b = Ax + w (1)
例如在圖像模糊問題中,A為模糊模板(由未模糊圖像通過轉(zhuǎn)換而來),b為模糊圖像,w為噪聲。并且,A和b已知,x為待求的系數(shù)。
求解該問題的的傳統(tǒng)方法為最小二乘法,思想很簡(jiǎn)單粗暴:使得重構(gòu)誤差||Ax-b||2最小。即:
對(duì)f(x) = ||Ax-b||2求導(dǎo),可得其導(dǎo)數(shù)為:f'(x) = 2AT(Ax-b)。對(duì)于該問題,令導(dǎo)數(shù)為零即可以取得最小值(函數(shù)f(x)為凸函數(shù),其極小值即為最小值)。
1)如果A為非奇異矩陣,即A可逆的話,那么可得該問題的精確解為x=A-1b。
2)如果A為奇異矩陣,即A不可逆,則該問題沒有精確解。退而求其次,我們求一個(gè)近似解就好,||Ax-b||2<=?。
其中,||x||_1為懲罰項(xiàng),用以規(guī)范化參數(shù)x。該例子使用L1范數(shù)作為懲罰項(xiàng),是希望x盡量稀疏(非零元素個(gè)數(shù)盡可能少),即b是A的一個(gè)稀疏表示。||Ax-b||2<=?則為約束條件,即重構(gòu)誤差最小。問題(3)也可以描述為:
式子(4)即為一般稀疏表示的優(yōu)化問題。希望重構(gòu)誤差盡可能小,同時(shí)參數(shù)的個(gè)數(shù)盡可能少。
注:懲罰項(xiàng)也可以是L2或其他范數(shù)。
1.1 梯度下降法的缺陷
考慮更為一般的情況,我們來討論梯度下降法。有無約束的優(yōu)化問題如下:
梯度下降法基于這樣的觀察:如果實(shí)值函數(shù)F(x)在點(diǎn)a處可微且有定義,那么函數(shù)F(x)在點(diǎn)a沿著梯度相反的方向-?F(a)下降最快。
基于此,我們假設(shè)f(x)連續(xù)可微(continuously differentiable)。如果存在一個(gè)足夠小的數(shù)值t>0使得x2 = x1 - t?F(a),那么:
F(x1) >= F(x2)
梯度下降法的核心就是通過式子(6)找到序列{xk},使得F(xk) >= F(xk-1)。
下圖詳細(xì)說明了梯度下降的過程:
從上圖可以看出:初始點(diǎn)不同,獲得的最小值也不同。因?yàn)樘荻认陆捣ㄇ蠼獾氖蔷植孔钚≈?#xff0c;受初值的影響較大。如果函數(shù)f(x)為凸函數(shù)的話,則局部最小值亦為全局最小值。這時(shí),初始點(diǎn)只對(duì)迭代速度有影響。
再回頭看一下式子(6),我們使用步長(zhǎng)tk和導(dǎo)數(shù)?F(xk)來控制每一次迭代時(shí)x的變化量。再看一下上面那張圖,彩色繽紛那張。對(duì)于每一次迭代,我們當(dāng)然希望F(x)的值降得越快越好,這樣我們就能更快速得獲得函數(shù)的最小值。因此,步長(zhǎng)tk的選擇很重要。
如果步長(zhǎng)tk太小,則找到最小值的迭代次數(shù)非常多,即迭代速度非常慢,或者說迭代的收斂速度很慢;而步長(zhǎng)太大的話,則會(huì)出現(xiàn)overshoot the minimum的現(xiàn)象,即不斷在最小值左右徘徊,跳來跳去的,如下圖所示:
然而,tk最后還是作用在xk-1上,得到xk。因此,更為樸素的思想應(yīng)該是:序列{xk}的個(gè)數(shù)盡可能小,即每一次迭代步伐盡可能大,函數(shù)值減少得盡可能多。那么就是關(guān)于序列{xk}的選擇了,如何更好的選擇每一個(gè)點(diǎn)xk,使得函數(shù)值更快的趨近其最小值。
-----------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------我是分割線--------------------------------------------------------
ISTA和FISTA求解最小化問題的思想就是基于梯度下降法的,它們的優(yōu)化在于對(duì){xk}的選擇上。這里我們不講證明,只講思想。想看證明的話,請(qǐng)看參考資料[1]。
2.ISTA算法
ISTA(Iterative shrinkage-thresholding algorithm),即迭代閾值收縮算法。
先從無約束的優(yōu)化問題開始,即上面的式子(5):
這時(shí)候,我們還假設(shè)了f(x)滿足Lipschitz連續(xù)條件,即f(x)的導(dǎo)數(shù)有下界,其最小下界稱為L(zhǎng)ipschitz常數(shù)L(f)。這時(shí),對(duì)于任意的L>=L(f),有:
基于此,在點(diǎn)xk附近可以把函數(shù)值近似為:
在梯度下降的每一步迭代中,將點(diǎn)xk-1處的近似函數(shù)取得最小值的點(diǎn)作為下一次迭代的起始點(diǎn)xk,這就是所謂的proximal regularization算法(其中,tk=1/L)。
上面的方法只適合解決非約束問題。而ISTA要解決的可是帶懲罰項(xiàng)的優(yōu)化問題,引入范數(shù)規(guī)范化函數(shù)g(x)對(duì)參數(shù)x進(jìn)行約束,如下:
使用更為一般的二次近似模型來求解上述的優(yōu)化問題,在點(diǎn)y,F(x) := f(x) + g(x)的二次近似函數(shù)為:
該函數(shù)的最小值表示為,P_L是proximal(近端算子)的簡(jiǎn)寫形式:
忽略其常數(shù)項(xiàng)f(y)和?F(y),這些有和沒有對(duì)結(jié)果沒有影響。再結(jié)合式子(11)和(12),PL(y)可以寫成:
顯然,使用ISTA解決帶約束的優(yōu)化問題時(shí)的基本迭代步驟為:
固定步長(zhǎng)的ISTA的基本迭代步驟如下(步長(zhǎng)t = 1/L(f)):
然而,固定步長(zhǎng)的ISTA的缺點(diǎn)是:Lipschitz常數(shù)L(f)不一定可知或者可計(jì)算。例如,L1范數(shù)約束的優(yōu)化問題,其Lipschitz常數(shù)依賴于ATA的最大特征值。而對(duì)于大規(guī)模的問題,非常難計(jì)算。因此,使用以下帶回溯(backtracking)的ISTA:
理論證明:ISTA的收斂速度為O(1/k);而FISTA的收斂速度為O(1/k2)。實(shí)際應(yīng)用中,FISTA亦明顯快于ISTA。其證明過程還是看這篇文章:[1]。
3.FISTA
FISTA(A fast iterative shrinkage-thresholding algorithm)是一種快速的迭代閾值收縮算法(ISTA)。
FISTA與ISTA的區(qū)別在于迭代步驟中近似函數(shù)起始點(diǎn)y的選擇。ISTA使用前一次迭代求得的近似函數(shù)最小值點(diǎn)xk-1,而FISTA則使用另一種方法來計(jì)算y的位置。理論證明,其收斂速度能夠達(dá)到O(1/k2)。固定步長(zhǎng)的FISTA的基本迭代步驟如下:
當(dāng)然,考慮到與ISTA同樣的問題:問題規(guī)模大的時(shí)候,決定步長(zhǎng)的Lipschitz常數(shù)計(jì)算復(fù)雜。FISTA與ISTA一樣,亦有其回溯算法。在這個(gè)問題上,FISTA與ISTA并沒有區(qū)別,上面也說了,FISTA與ISTA的區(qū)別僅僅在于每一步迭代時(shí)近似函數(shù)起始點(diǎn)的選擇。更加簡(jiǎn)明的說:FISTA用一種更為聰明的辦法選擇序列{xk},使得其基于梯度下降思想的迭代過程更加快速地趨近問題函數(shù)F(x)的最小值。
帶回溯的FISTA算法基本迭代步驟如下:
值得注意的是,在每一步迭代中,計(jì)算近似函數(shù)的起止點(diǎn)時(shí),FISTA使用前兩次迭代過程的結(jié)果xk-1,xk-1,對(duì)其進(jìn)行簡(jiǎn)單的線性組合生成下一次迭代的近似函數(shù)起始點(diǎn)yk。方法很簡(jiǎn)單,但效果卻非常好。當(dāng)然,這也是有理論支持的。
-----------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------我是分割線--------------------------------------------------------
4.ISTA&FISTA的應(yīng)用(去模糊)
LASSO是一個(gè)圖像處理中經(jīng)典的目標(biāo)方程
第二項(xiàng)的1范數(shù)限制了x的稀疏性,前文已說過,在此不再敘述。
比如在圖像去模糊的問題中,已知模糊的圖像b,和模糊函數(shù)R,我們想恢復(fù)去模糊的圖像I。這些變量的關(guān)系可以表達(dá)成I*R=b,其中*為卷積。在理想狀態(tài)下,b沒有任何噪音,那么這個(gè)問題就很簡(jiǎn)單。基于卷積定理,兩個(gè)函數(shù)在時(shí)域的卷積相當(dāng)于頻域的相乘,那么我們只需要求出b和R的傅里葉變換,然后相除得到I的傅里葉變換,再將其恢復(fù)到時(shí)域。但是一般來說模糊圖像b含有噪聲,這使得頻域中的操作異常不穩(wěn)定,所以更多時(shí)候,我們希望通過以下方程求得I
其中模糊算子R表現(xiàn)成矩陣形式,I和b表示為1維向量,函數(shù)p作為規(guī)范項(xiàng)。我們將I小波分解,I=Wx,其中W為小波基,x為小波基系數(shù)。我們知道圖像的小波表示是稀疏的,那么目標(biāo)方程就變成了LASSO的形式
其中A=RW。現(xiàn)在的問題是,這個(gè)方程由于L1范數(shù)的存在,不是處處可微的,如果用subgradient的方法,收斂的速度會(huì)很慢。
4.1 LASSO問題用ISTA求解
因此我們用ISTA(Iterative Shrinkage-Thresholding Algorithm)。這個(gè)算法可以解決以上f+g形式的最小化問題,但I(xiàn)STA適用于以下形式問題的求解:
1.目標(biāo)方程是f+g的形式
2.f和g是凸的,f是可導(dǎo)的,g無所謂
3.g需要足夠簡(jiǎn)單(可拆分的,可以做坐標(biāo)下降的coordinate descent)
于是,我們首先看對(duì)f做一般的遞歸下降。我們可以參照(13)式,便可以得到:
這時(shí)我們可以看到,假如g是一個(gè)開拆分的函數(shù)(比如L1范數(shù)),我們就可以對(duì)每一維分別進(jìn)行坐標(biāo)下降,也就是將N維的最小值問題,轉(zhuǎn)化成N個(gè)1D的最小值問題。我們發(fā)現(xiàn),如果的話,那么這個(gè)問題有解析解,即每步的迭代可以寫成:
其中稱作shrinkage operator。
4.2 LASSO問題用FISTA求解
FISTA其實(shí)就是對(duì)ISTA應(yīng)用Nestrerov加速。一個(gè)普通的Nestrerov加速遞歸下降的迭代步驟是:
應(yīng)用到FISTA上的話,就是把第3步換成ISTA的迭代步驟。可以證明FISTA可以達(dá)到1/(t^2)的收斂速度。(t是迭代次數(shù))通過下面的實(shí)驗(yàn)可以看到,同樣迭代了300次,左圖(ISTA)仍未收斂,圖像仍然模糊。而右圖(FISTA)已經(jīng)基本還原了去模糊的原圖。
-----------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------我是分割線--------------------------------------------------------
5.ISTA&FISTA的應(yīng)用(特征匹配)
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總結(jié)
- 上一篇: 使用反射操作Array类型
- 下一篇: DNN图像去‘污’