ADMM算法简介
前言
這篇博客旨在介紹下最近在通信中經常用到的 ADMM 算法。 算法的全稱為 Alternating Direction Method of Multipliers, 中文直譯為: 交替方向乘子法。 本文的參考文獻為 Boyd 的經典著作: Distributed Optimization and Statistical Learning via the Alternating Direction Method of Multipliers, 事實上從名字就可以看出, 正如Boyd在摘要中所提到的, ADMM算法的優勢是可以將問題進行分布式優化,從而解決大規模計算問題。 然而在通信的應用中, 更多時候則是把一個多變量問題進行解耦,通過對每個單變量進行迭代求解來簡化問題本身。
對偶上升法與增廣拉格朗日乘數法
在介紹ADMM算法前, 我想先簡要介紹下對偶上升法與增廣拉格朗日乘數法, 兩者可以視為ADMM算法的前身或簡化版本, 而ADMM算法則又可視為兩者的結合體。
對偶上升法
對偶上升法,在之前的博客中有更為詳細的介紹, 對偶上升法 (Dual Ascent)。 這里我們只簡述其核心。 對于一個等式約束的凸優化問題如下:
minimize?f(x)subject?to?Ax=b,\begin{array}{ll} \operatorname{minimize} & f(x) \\ \text { subject to } & A x=b, \end{array} minimize?subject?to??f(x)Ax=b,?
其中, f(x)f(x)f(x)為凸函數。我們可以通過拉格朗日乘子法將限制條件寫入目標函數中, 從而得到:
L(x,y)=f(x)+yT(Ax?b)L(x, y)=f(x)+y^{T}(A x-b) L(x,y)=f(x)+yT(Ax?b)
那么,其對偶函數為:
g(y)=inf?xL(x,y)g(y)=\inf _{x} L(x, y) g(y)=xinf?L(x,y)
相應的對偶問題為:
maximize?g(y)\text { maximize } g(y) ?maximize?g(y)
對偶上升法表示, 通過如下的步驟:
xk+1:=argmin?xL(x,yk)yk+1:=yk+αk(Axk+1?b),\begin{aligned} &x^{k+1}:=\underset{x}{\operatorname{argmin}} L\left(x, y^{k}\right) \\ &y^{k+1}:=y^{k}+\alpha^{k}\left(A x^{k+1}-b\right), \end{aligned} ?xk+1:=xargmin?L(x,yk)yk+1:=yk+αk(Axk+1?b),?
等價于求解對偶問題。這里 αk\alpha_kαk? 為步長。 而從步驟的形式上看, 就是簡單的先固定 yyy 優化 xxx, 再固定 xxx 優化 yyy。 但是是可以保證收斂的。 可以看到, 對偶上升法的優點是可以將多變量解耦開來。 值得一提的是, 迎合ADMM類所期望的分布式優化的特點, 對偶上升法也可以通過將變量分解為多個維度較低的變量再進行并行求解, 此時優化步驟變為:
xik+1:=argmin?xiLi(xi,yk)yk+1:=yk+αk(Axk+1?b)\begin{aligned} x_{i}^{k+1} &:=\underset{x_{i}}{\operatorname{argmin}} L_{i}\left(x_{i}, y^{k}\right) \\ y^{k+1} &:=y^{k}+\alpha^{k}\left(A x^{k+1}-b\right) \end{aligned} xik+1?yk+1?:=xi?argmin?Li?(xi?,yk):=yk+αk(Axk+1?b)?
即將原高維變量 xxx 拆分成了多個 低維變量 xix_ixi? 進行依次優化。 在多個變量之間交替優化,迭代求解, 可以說是ADMM類算法貫徹的準則。
增廣拉格朗日乘數法
增廣拉格朗日乘數法可以看做是對偶上升法的進階, 但也不完全是。 他將拉格朗日函數寫為:
Lρ(x,y)=f(x)+yT(Ax?b)+(ρ/2)∥Ax?b∥22L_{\rho}(x, y)=f(x)+y^{T}(A x-b)+(\rho / 2)\|A x-b\|_{2}^{2} Lρ?(x,y)=f(x)+yT(Ax?b)+(ρ/2)∥Ax?b∥22?
可以看到, 相比于普通的拉格朗日函數(比如剛剛對偶上升法中所給出的), 他多了第三項,其中 ρ\rhoρ 為懲罰參數。 顯然當 xxx 為最優值時, Ax?b=0Ax-b=0Ax?b=0, 因此這兩個拉格朗日函數其實是相等的。 但是在迭代過程中, 有了這一項懲罰項后, 無論 f(x)f(x)f(x) 本身是否強凸, 由于增加了一個強凸懲罰項, 因此這個增廣拉格朗日函數可視作xxx的強凸函數, 從而對算法的收斂更有幫助。 增廣拉格朗日乘數法的步驟為:
xk+1:=argmin?xLρ(x,yk)yk+1:=yk+ρ(Axk+1?b)\begin{aligned} x^{k+1} &:=\underset{x}{\operatorname{argmin}} L_{\rho}\left(x, y^{k}\right) \\ y^{k+1} &:=y^{k}+\rho\left(A x^{k+1}-b\right) \end{aligned} xk+1yk+1?:=xargmin?Lρ?(x,yk):=yk+ρ(Axk+1?b)?
注意到,這幾乎和對偶上升的步驟完全一致。 但除了目標函數的改變之外(增加了懲罰項), 另一個變化是步長默認為是懲罰參數 ρ\rhoρ。 這樣的選取是有其道理的,具體可以參見boyd的書, 是從收斂性的角度進行了考慮。 總之, 增廣拉格朗日乘數法改善了收斂性能, 但同時由于增加了這一項, 因此無法拆分為多個xix_ixi?進行分布式并行求解。
ADMM算法
結合了對偶上升法的 可拆解性 和 增廣拉格朗日乘數法的 易收斂性, ADMM算法呼之欲出。 我們將優化變量拆分為獨立的兩部分, xxx 和 zzz, 那么問題可以改寫為:
minimize?f(x)+g(z)subject?to?Ax+Bz=c\begin{array}{ll} \operatorname{minimize} & f(x)+g(z) \\ \text { subject to } & A x+B z=c \end{array} minimize?subject?to??f(x)+g(z)Ax+Bz=c?
這里 fff 和 ggg 都是凸函數。 此時, 其對應的增廣拉格朗日函數為:
Lρ(x,z,y)=f(x)+g(z)+yT(Ax+Bz?c)+(ρ/2)∥Ax+Bz?c∥22L_{\rho}(x, z, y)=f(x)+g(z)+y^{T}(A x+B z-c)+(\rho / 2)\|A x+B z-c\|_{2}^{2} Lρ?(x,z,y)=f(x)+g(z)+yT(Ax+Bz?c)+(ρ/2)∥Ax+Bz?c∥22?
而其優化步驟為:
xk+1:=argmin?xLρ(x,zk,yk)zk+1:=argmin?Lρ(xk+1,z,yk)yk+1:=yk+ρ(Axk+1+Bzk+1?c)\begin{aligned} x^{k+1}:=& \underset{x}{\operatorname{argmin}} L_{\rho}\left(x, z^{k}, y^{k}\right) \\ z^{k+1}:=& \operatorname{argmin} L_{\rho}\left(x^{k+1}, z, y^{k}\right) \\ y^{k+1}:=& y^{k}+\rho\left(A x^{k+1}+B z^{k+1}-c\right) \end{aligned} xk+1:=zk+1:=yk+1:=?xargmin?Lρ?(x,zk,yk)argminLρ?(xk+1,z,yk)yk+ρ(Axk+1+Bzk+1?c)?
可以清晰的看到, 這正是對偶上升法與增廣拉格朗日乘數法的結合體。 理論上可以進一步把優化變量拆分為更多的block, 如 xxx, zzz, z1z_1z1?, ?\cdots?。 如果我們將原問題的最優解表示為:
p?=inf?{f(x)+g(z)∣Ax+Bz=c}p^{\star}=\inf \{f(x)+g(z) \mid A x+B z=c\} p?=inf{f(x)+g(z)∣Ax+Bz=c}
那么ADMM算法在滿足很基本的假設的情況下, 可以確保:
f(xk)+g(zk)→p?as?k→∞f\left(x^{k}\right)+g\left(z^{k}\right) \rightarrow p^{\star} \text { as } k \rightarrow \infty f(xk)+g(zk)→p??as?k→∞
這也體現了算法的收斂性,即最終得到全局最優解。 這在boyd的著作中給出了詳盡的證明。
ADMM算法的Scaled Form
ADMM算法還有另一種常見形式。 如果我們令 r=Ax+Bz?cr=A x+B z-cr=Ax+Bz?c 來代表當前值與實際約束間的殘差, 那么我們有:
yTr+(ρ/2)∥r∥22=(ρ/2)∥r+(1/ρ)y∥22?(1/2ρ)∥y∥22=(ρ/2)∥r+u∥22?(ρ/2)∥u∥22\begin{aligned} y^{T} r+(\rho / 2)\|r\|_{2}^{2} &=(\rho / 2)\|r+(1 / \rho) y\|_{2}^{2}-(1 / 2 \rho)\|y\|_{2}^{2} \\ &=(\rho / 2)\|r+u\|_{2}^{2}-(\rho / 2)\|u\|_{2}^{2} \end{aligned} yTr+(ρ/2)∥r∥22??=(ρ/2)∥r+(1/ρ)y∥22??(1/2ρ)∥y∥22?=(ρ/2)∥r+u∥22??(ρ/2)∥u∥22??
其中, u=(1/ρ)yu=(1 / \rho) yu=(1/ρ)y 代表被 scaled 后的 對偶變量, 這也是 所謂 scaled form的由來。 由此, ADMM步驟可以被簡化寫為:
xk+1:=argmin?x(f(x)+(ρ/2)∥Ax+Bzk?c+uk∥22)zk+1:=argmin?z(g(z)+(ρ/2)∥Axk+1+Bz?c+uk∥22)uk+1:=uk+Axk+1+Bzk+1?c.\begin{aligned} x^{k+1} &:=\underset{x}{\operatorname{argmin}}\left(f(x)+(\rho / 2)\left\|A x+B z^{k}-c+u^{k}\right\|_{2}^{2}\right) \\ z^{k+1} &:=\underset{z}{\operatorname{argmin}}\left(g(z)+(\rho / 2)\left\|A x^{k+1}+B z-c+u^{k}\right\|_{2}^{2}\right) \\ u^{k+1} &:=u^{k}+A x^{k+1}+B z^{k+1}-c . \end{aligned} xk+1zk+1uk+1?:=xargmin?(f(x)+(ρ/2)∥∥?Ax+Bzk?c+uk∥∥?22?):=zargmin?(g(z)+(ρ/2)∥∥?Axk+1+Bz?c+uk∥∥?22?):=uk+Axk+1+Bzk+1?c.?
可以看到一次項已經被寫進∥∥2\|\|^2∥∥2中了。
ADMM算法的收斂性
總結
- 上一篇: mysql解锁_mysql 解锁
- 下一篇: MATLAB在声学理论基础中的应用,MA