凸優化問題中的Bregman迭代演算法

2021-08-21 09:24:06 字數 3310 閱讀 2737

對於搞影象處理的人而言,不懂變分法,基本上,就沒法讀懂影象處理的一些經典文獻。當然,這已經是10年之前的事情了。

現在,如果不懂得bregman迭代演算法,也就沒法讀懂最近幾年以來發表的影象處理的前沿**了。國內的參考文獻,基本上都是直接引用bregman迭代演算法本身,而對於其原理基本上找不到較為詳細的論述。本文簡要敘述當前流行的bregman迭代演算法的一些原理。

近年來,由於壓縮感知的引入,l1正則化優化問題引起人們廣泛的關注。壓縮感知,允許通過少量的資料就可以重建影象訊號。l1正則化問題是凸優化中的經典課題,用傳統的方法難以求解。我們先從經典的影象復原問題引入:

在影象復原中,一種通用的模型可以描述如下:    

我們目標是從觀測到的影象f,尋找未知的真實影象u,u是n維向量空間中的元素,f是m維向量空間中的元素。f 在壓縮感知的術語叫做測量訊號。

上述方程中,我們僅僅知道f,其它變數都不知道的。而且這種問題通常情況都是病態的,通過引入正則項可以使之成為良態的。正則化方法假定對未知的引數u引入乙個先驗的假設,例如稀疏性,平滑性。正則化問題的常見方法tikhonov方法,它通過求解下面的優化問題:

其中mu是乙個大於零的標量,事先設定的常數,用於權衡觀測影象f和正則項之間的平衡。雙絕對值符號是l2範數。

下面,為了引入bregman迭代演算法,需要對兩個重要的概念進行描述。

注意這個定義,它是對泛函j在u點的subgradient的定義,p點是其對偶空間的中的某一點。subgradient可以翻譯為次梯度,子梯度,弱梯度等。等式左邊最右邊一項是內積運算。如果泛函j是簡單的一元函式,則就是兩個實數相乘。次梯度有什麼好處呢?對於一般的導數定義,例如y=|x|在0點是不可導的,但是對於次梯度,它是存在的。

上面的這個定義就是bregman距離的定義。對於凸函式兩個點u,v之間的bregman距離,等於其函式值之差,再減去其次梯度點p與自變數之差的內積。要注意的是這個距離不滿足對稱性,這和一般的泛函分析中距離定義是不一樣的。

bregman迭代演算法可以高效的求解下面的泛函的最小 

上式中的第一項j,定義為從x到r的泛函,其定義域x是凸集也是閉集。第二項h,定義為從x到r的非負可微泛函,f是已知量,並且通常是乙個觀測影象的資料,所以f是矩陣或者向量。上述泛函會根據具體問題的不同具有不同的具體表示式。例如,對於簡介中的影象復原啊問題,j(u)就是平滑先驗約束,是正則化項;而h則是資料項。

bregman迭代演算法首先是初始化相關的引數為零,再迭代公式u,其左邊一項是泛函j的bregman距離。再來看p點的迭代公式,其最右邊一項是泛函h的梯度。

其迭代一次產生的輸出是公式3.2,經過多次的迭代,就能夠收斂到真實的最優解。這個證明過程可以參考後面的文獻。

對於具體的問題,泛函3.1定義的具體形式是不同的。例如對於壓縮感知使用的基追蹤演算法,j是l1範數。而對於影象去噪問題,可能就是u的梯度l1範數,同時a也變成了恒等運算元了。

bregman 迭代演算法的每一步迭代都要求解泛函4.1的最小值,這一步的計算代價是很高的。線性bregman迭代的思路是對泛函4.1的第二項進行線性展開,根據矩陣函式的泰勒公式,泛函4.1的第二項可以展開為上面4.2的形式。

注意,上述公式4.2省略了泰勒公式中二次項。把二次項加上,帶入前面基本的bregman迭代演算法公式的第一步,我們得到公式4.3。如果我們計算4.3和4.4中間那個表示式,比較其相同項,很容易得到公式4.4.

如果我們考慮基追蹤演算法,則h等於 ||au - f||^2 /2, 將h的導數帶入公式4.4,我們得到公式4.5, 公式4.6是基本bregman迭代演算法的第二步,注意上述4.6公式中u的上標是錯的,應該改為 k+1 ,這樣才可能得到公式4.7,公式4.8,4.9, 4.10, 4.11都是顯而易見的。

下面我們把4.11和前面定義的bregman距離帶入到4.5裡面去,具體如下:

這裡,我們定義了乙個shrink操作,這個收縮運算元很重要,在後面所有的bregman演算法中都有這個操作。根據這個操作,我們匯出下面的表示式,並最終把線性bregman迭代演算法總結如下:

split bregman 演算法是另一種高效的演算法。我們已經知道,bregman迭代演算法用於求解下面的凸優化問題:

我們可以把上面的表示式變換為下面的等價形式:

這一步,看似是多此一舉,但是bregman經過推導,得出了一種高效的迭代演算法,**bregman迭代。

上面的5.2是乙個等式約束優化問題,把它轉化為無約束優化問題如下:

上面這個公式中,優化變數多了乙個d。做如下的變數替換:

如果我們對5.5,應用最前面提到bregman 迭代演算法,很容易寫出下面的迭代序列:

式5.9是根據5-6按照bregman距離展開的結果。式5.7,5.7後面一項是對5-5分別對u,d求其偏導數得到。如果我們對5.7迭代展開,於是得到:

同理,對於5.8,有

注意到式5.11和5.12有乙個公共的sigma求和項,把它重新定義如下:

把5.14,5.15帶入5.9,具體如下:

在對5.16的化簡中,要注意的是u,d為變數,其它看做常量。

到此,我們可以給出split bregman迭代演算法的通用優化步驟:

對u的迭代,把u看做自變數,其它所有變數看做常數,對d的迭代則是d為自變數,其它變數都是常數。 之所以說是通用迭代優化過程,是因為對於具體的問題,其迭代的具體表示式不同。例如,對於基於各向異性tv的去噪模型,各向同性tv去噪模型,其迭代的具體表示式是不同的。

最優化之凸優化之Bregman演算法

本文介紹了bregman迭代演算法,linearized bregman演算法 及在求解basis pursuit問題中的應用 和split bregman演算法 及在求解影象tv濾波問題中的應用 由於初學,加之水平有限,文中會有疏漏錯誤之處,希望大家批評指正賜教。2015年12月29日,發表博文。...

凸優化 python解決凸優化問題

1 安裝cvx包 用pip安裝cvxopt 1.2.1 cp36 cp36m win amd64.whl和cvxpy 1.0.9 cp36 cp36m win amd64.whl 因為我是python3.6所以是cp36 cvxpy cvxopt 參考 2 遇到問題 error microsoft ...

優化問題,凸優化,凸二次優化問題

首先 優化問題通常喜歡求解最小值min 如果要求max就給他轉換過來 如何來判斷乙個函式是否是凸函式呢?對於一元函式f x 我們可以通過其二階導數f x 的符號來判斷。如果函式的二階導數總是非負,即f x 0 則f x 是凸函式對於多元函式f x 我們可以通過其hessian矩陣 hessian矩陣...