交叉方向乘子法(ADMM)演算法

2021-10-05 10:51:45 字數 2273 閱讀 6769

admm是乙個凸優化演算法。

交替方向乘子法(admm)是一種求解具有可分離的凸優化問題的重要方法,由於處理速度快,收斂效能好,admm演算法在統計學習、機器學習等領域有著廣泛應用。

正常的凸優化問題:

這是最簡單的優化問題,其中 x 是優化變數,也就是可以改變的數值,通過調節 x 的大小,使得目標函式 f(x) 的數值達到最小。值得注意的是,x的值並不一定是數值,也可能是向量或者矩陣。

像上式那樣,只有函式,對於變數 x沒有要求,其實是最簡單的一類優化問題:無約束優化問題。

那麼什麼是凸優化問題呢,對應凸函式下的帶約束的問題便是凸優化問題。

凸函式的乙個顯著特徵是該函式上的任意兩點的連線都在該函式之上,在二維上最簡單的凸函式即為:

在三維影象上可以理解為形狀為山谷的函式。

實際上x不可能完全沒有約束條件,否則那樣的話我們直接通過求解函式的導數便可以找到最優解。實際問題往往會對x做一些約束,一共有兩種約束:

等式約束: subjectto ax=b

不等式約束: subjectto ax<=b

其中等式約束時要求x滿足一定的等式,實際上任何複雜的等式約束都可以化簡為上述的形式,進行求解。不等式約束也很容易理解,往往是某些約束的最低值或者最高值。如果同時有最低和最高,可拆成兩個不等式。

基於以上的理解,乙個包含等式約束的凸優化問題應該是這樣的:

解決的問題

admm演算法解決的是兩個變數下的優化問題,從原來問題的乙個變數,變為兩個變數,**實際上任意個變數的問題都可以拆解為2變數問題?**那麼上面的優化公式就變為了:

這也就意味著admm演算法解決的是乙個等式約束的問題,且該問題兩個函式f(x)和g(x)是成線性加法的關係。

這意味著兩者實際上是整體優化的兩個part,兩者的資源占用符合一定等式,對整體優化貢獻不同,但是是簡單加在一起的。

事實上分布式中的一致性優化問題(consensus),分享問題(sharing problem)等等都很好寫成這樣的形式,因為每個節點的變數還要跟周圍節點變數產生關聯,但真正用admm的原因可能還是因為admm又快又好用吧。

使用的方法

與admm最為相關的大概就是原始對偶方法中的增廣拉格朗日法(alm)。

拉格朗日函式實際上是解決多個約束條件下的優化問題的,這種方法可以將乙個有n個變數與k個約束條件的最優化問題轉換為乙個解有n + k個變數的方程組的解的問題。構造拉格朗日函式的方法在一般的高等數學教材裡也可以找到。

而增廣拉格朗日法是加了懲罰項的拉格朗日法,目的是使得演算法收斂的速度更快。

那麼對上述的簡單的包含等式約束的凸優化問題構造拉格朗日函式,便可以得到:

原來帶約束求解

現在求解對偶問題

兩個問題的最優解等價,並且沒有了約束條件。

然後使用對偶上公升法,得到:

對偶上公升法實際上是將:

拆成了兩步,第一步,先固定λ然後求解

將求解後的x代入到拉格朗日函式當中,用類似於梯度下降的方法,得到λ的更新公式。

有時候為了加快演算法收斂速度,會再增加一些懲罰項來加快收斂,於是就有了增廣拉格朗日:

admm其實也是一直增廣拉格朗日函式,只不過由乙個變數變為了兩個變數,那麼對應的admm就成為了

那麼,使用和增廣拉格朗日類似的方法,固定其中兩個變數,去更新第三個變數的值,於是便有:

於是問題就變化為了如何求解argminxl,那麼就可以很開心地使用梯度下降法了。

乘2取整法 關於乘2取整法?

學習二進位制,最好的方法就是模擬。考慮乙個十進位制小數0.123,我們可以用 乘10取整 法得到它的每一位小數 第一位小數是0.123 10 1.23,取整數1 第二位小數 0.23 10 2.3,取整數2 上面的方法供你直觀理解,下面我從數學的角度分析其中的原理。現在有乙個十進位制小數為0.625...

HDU2150 Pipe 折線相交 叉乘

好吧,之前一直不想用叉乘判斷線段相交問題,畢竟我覺得用直線方程是在是太方便太直接了 直到我遇到了這個題目,真的是給它跪了,wa到死。不得跪舔叉乘。include include include include include include include include include inclu...

矩陣操作之 方向向量法

包含整數的二維矩陣 m 表示乙個的灰度。你需要設計乙個平滑器來讓每乙個單元的灰度成為平均灰度 向下捨入 平均灰度的計算是周圍的8個單元和它本身的值求平均,如果周圍的單元格不足八個,則盡可能多的利用它們。輸入 1,1,1 1,0,1 1,1,1 輸出 0,0,0 0,0,0 0,0,0 看到這個題目一...