日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ADMM算法学习

發(fā)布時(shí)間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ADMM算法学习 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

ADMM算法學(xué)習(xí)

  • ADMM定義和背景
  • ADMM方法
    • 問(wèn)題模型
    • 增廣拉格朗日函數(shù)
    • 算法流程
  • 算法測(cè)試
  • 算法擴(kuò)展
  • 參考資料

ADMM定義和背景

交替向乘子法(Alternating Direction Method of Multipliers, ADMM)是一種求解具有可分離的凸優(yōu)化問(wèn)題的重要方法,由于處理速度快,收斂性能好,ADMM算法在統(tǒng)計(jì)學(xué)習(xí)、機(jī)器學(xué)習(xí)等領(lǐng)域有著廣泛應(yīng)用。

交替方向乘子法(ADMM)是一種求解優(yōu)化問(wèn)題的計(jì)算框架, 適用于求解分布式凸優(yōu)化問(wèn)題,特別是統(tǒng)計(jì)學(xué)習(xí)問(wèn)題。 ADMM 通過(guò)分解協(xié)調(diào)(Decomposition-Coordination)過(guò)程,將大的全局問(wèn)題分解為多個(gè)較小、較容易求解的局部子問(wèn)題,并通過(guò)協(xié)調(diào)子問(wèn)題的解而得到大的全局問(wèn)題的解。ADMM 最早分別由 Glowinski & Marrocco 及 Gabay & Mercier 于 1975 年和 1976 年提出,并被 Boyd 等人于 2011 年重新綜述并證明其適用于大規(guī)模分布式優(yōu)化問(wèn)題。由于 ADMM 的提出早于大規(guī)模分布式計(jì)算系統(tǒng)和大規(guī)模優(yōu)化問(wèn)題的出現(xiàn),所以在 2011 年以前,這種方法并不廣為人知。【7】

ADMM 是ALM算法的一種延伸,只不過(guò)將無(wú)約束優(yōu)化的部分用塊坐標(biāo)下降法(block coordinate descent,或叫做 alternating minimization)來(lái)分別優(yōu)化。產(chǎn)生這種方法主要是為了彌補(bǔ)二次懲罰的缺點(diǎn)。在一些問(wèn)題當(dāng)中,用二次懲罰來(lái)近似約束問(wèn)題在最優(yōu)點(diǎn)附近需要懲罰項(xiàng)的系數(shù)趨近于無(wú)窮,而這種要求會(huì)使得海森矩陣很大,因此近似的目標(biāo)函數(shù)很不穩(wěn)定。為了解決這個(gè)問(wèn)題,引入了線性逼近的部分,通過(guò)線性項(xiàng)系數(shù)不斷的接近最優(yōu)解(對(duì)偶上升),使得在二次懲罰項(xiàng)的系數(shù)很小的情況下,也能得到滿足要求精度的解。ADMM目前是比較成熟,比較受歡迎的約束問(wèn)題最優(yōu)化通用框架。【8】

歸根結(jié)底,就是解決 loss function + regulation. 當(dāng)regulation為L(zhǎng)1范數(shù)的時(shí)候沒(méi)有合適的算法解決這個(gè)凸優(yōu)化問(wèn)題。原來(lái)boyd的老師提出過(guò) 最小角方法 方法解決這個(gè)問(wèn)題,但是因?yàn)榉椒ú恢庇^并且難以操作。所以,這些大牛們一直在尋找一種比較合適的算法解決這個(gè)問(wèn)題。直至2011年左右提出比較通用和直觀的ADMM算法。對(duì)于ADMM算法,其實(shí)是一種交替求解的方式。不斷的將問(wèn)題分解,進(jìn)而逐個(gè)解決。其中在解決的過(guò)程中,發(fā)現(xiàn)將惱人的L1 Norm中的變量進(jìn)行替換,從而形成 L1+L2 norm的形式比較容易求解(proximal algorithm),所以挺好的。而如果我們直接進(jìn)行Loss function + regulation,求解的話,很難得到解。所以從上面我們可以發(fā)現(xiàn),變量替換成為解決問(wèn)題的關(guān)鍵。而逐次求解,使問(wèn)題得到解決。其實(shí)只要將最簡(jiǎn)單的L1 norm的形式理解。對(duì)于各種proximal直接查詢相關(guān)解就可以了。【9】

ADMM方法

問(wèn)題模型

交替方向乘子法(ADMM)通常用于解決存在兩個(gè)優(yōu)化變量的等式約束優(yōu)化類問(wèn)題,其一般形式為:min?x,zf(x)+g(z)s.t.Ax+Bz=c\min_{x,z} f(x)+g(z) ~~~~ \\ \mathrm { s.t.} ~~Ax + Bz = cx,zmin?f(x)+g(z)????s.t.??Ax+Bz=c
其中 x∈Rn,z∈Rmx \in \mathbb{R} ^n , z \in \mathbb{R} ^mxRn,zRm 為優(yōu)化變量,等式約束中 A∈Rp×n,B∈Rp×m,c∈RpA \in \mathbb{R} ^{p\times n}, B \in \mathbb{R} ^{p\times m}, c \in \mathbb{R} ^{p}ARp×n,BRp×m,cRp, 目標(biāo)函數(shù)中 f,gf, ~gf,?g 都是凸函數(shù).

  • 標(biāo)準(zhǔn)的ADMM算法解決的是一個(gè)等式約束的問(wèn)題,且該問(wèn)題兩個(gè)函數(shù) fffggg 是成線性加法的關(guān)系。這意味著兩者實(shí)際上是整體優(yōu)化的兩個(gè)部分,兩者的資源占用符合一定等式,對(duì)整體優(yōu)化貢獻(xiàn)不同,但是是簡(jiǎn)單加在一起的。
  • 事實(shí)上分布式中的一致性優(yōu)化問(wèn)題(consensus),分享問(wèn)題(sharing problem)等等都很好寫成這樣的形式,因?yàn)槊總€(gè)節(jié)點(diǎn)的變量還要跟周圍節(jié)點(diǎn)變量產(chǎn)生關(guān)聯(lián)、

增廣拉格朗日函數(shù)

ADMM算法的核心是原始對(duì)偶算法的增廣拉格朗日法(ALM)。拉格朗日函數(shù)是解決了多個(gè)約束條件下的優(yōu)化問(wèn)題,這種方法可以求解一個(gè)有n個(gè)變量與k個(gè)約束條件的優(yōu)化問(wèn)題。原始對(duì)偶方法中的增廣拉格朗日法(Augmented Lagrangian)是加了懲罰項(xiàng)的拉格朗日法,目的是使得算法收斂的速度更快。
Lρ(x,z,u)=f(x)+g(z)+uT(Ax+Bz?c)+ρ2∥Ax+Bz?c∥22L_{\rho}(x,z,u) = f(x)+g(z)+u^T(Ax+Bz-c)+\frac{\rho}{2}\| Ax+Bz-c\|^2_2 Lρ?(x,z,u)=f(x)+g(z)+uT(Ax+Bz?c)+2ρ?Ax+Bz?c22?

增廣拉格朗日函數(shù)就是在關(guān)于原問(wèn)題的拉格朗日函數(shù)【4】之后增加了一個(gè)和約束條件有關(guān)的懲罰項(xiàng),懲罰項(xiàng)參數(shù) ρ>0\rho > 0ρ>0 .懲罰項(xiàng)參數(shù)影響迭代效率。
增廣拉格朗日函數(shù)對(duì)min是+對(duì)偶項(xiàng)和懲罰項(xiàng),對(duì)max是 - 對(duì)偶項(xiàng)和懲罰項(xiàng)。

  • 原問(wèn)題 min?x,zf(x)+g(z)\min_{x,z} f(x)+g(z)minx,z?f(x)+g(z),對(duì)偶問(wèn)題 max?umin?x,zLρ(x,z,u)\max_{u}\min_{x,z} L_{\rho}(x,z,u)maxu?minx,z?Lρ?(x,z,u),兩個(gè)問(wèn)題的最優(yōu)解等價(jià),并且沒(méi)有了約束條件。

算法流程

每一步只更新一個(gè)變量而固定另外兩個(gè)變量,如此交替重復(fù)更新。

  • Step 1: x(i)=argminxLρ(x,z(i?1),u(i?1))x^{(i)} = \mathrm {argmin}_x ~L_{\rho}(x,z^{(i-1)},u^{(i-1)})x(i)=argminx??Lρ?(x,z(i?1),u(i?1))
  • Step 2: z(i)=argminzLρ(x(i),z,u(i?1))z^{(i)} = \mathrm {argmin}_z ~L_{\rho}(x^{(i)},z,u^{(i-1)})z(i)=argminz??Lρ?(x(i),z,u(i?1))
  • Step 3: u(i)=u(i?1)+ρ(Ax(i)+Bz(i)?c)u^{(i)} = u^{(i-1)} + \rho (Ax^{(i)}+Bz^{(i)}-c)u(i)=u(i?1)+ρ(Ax(i)+Bz(i)?c) %Ascend
  • 不斷重復(fù)以上三步直到收斂。

    • 使用和增廣拉格朗日類似的對(duì)偶上升方法,固定其中兩個(gè)變量,去更新第三個(gè)變量的值。
    • ADMM 算法提供了一個(gè)將多優(yōu)化變量問(wèn)題轉(zhuǎn)化為單優(yōu)化變量問(wèn)題的轉(zhuǎn)化方式(即,交替方向),并未涉及具體的下降方法,其中關(guān)于 xxxzzz 的更新過(guò)程需要結(jié)合具體的下降類算法,如梯度下降算法等。
    • ADMM的另一種形式:

    算法測(cè)試

    求解例子

    構(gòu)造出該目標(biāo)函數(shù)的增廣拉格朗日表達(dá)式
    L(x,y,λ)=f(x)+g(y)+λT(2x+3y?5)+ρ2∥2x+3y?5∥22L(x,y,\lambda) = f(x)+g(y)+\lambda^T(2x+3y-5)+\frac{\rho}{2}\|2x+3y-5\|^2_2L(x,y,λ)=f(x)+g(y)+λT(2x+3y?5)+2ρ?∥2x+3y?522?

    使用 Matlab 編碼【5】求解如下:

    • 主函數(shù)
    %% 定義參數(shù) % x0,y0都是可行解 param.x0 = 1; param.y0 = 1; param.lambda = 1; param.maxIter = 30; param.beta = 1.1; % a constant param.rho = 0.5;[Hx,Fx] = getHession_F('f1'); [Hy,Fy] = getHession_F('f2');param.Hx = Hx; param.Fx = Fx; param.Hy = Hy; param.Fy = Fy;%% solve problem using admm algrithm [x,y] = solve_admm(param);%% disp minimum disp(['[x,y]:' num2str(x) ',' num2str(y)]);
    • ADMM求解函數(shù):solve_admm
    function [x,y] = solve_admm(param) x = param.x0; y = param.y0; lambda = param.lambda; beta = param.beta; rho = param.rho; Hx = param.Hx; Fx = param.Fx; Hy = param.Hy; Fy = param.Fy; %% xlb = 0; % the lower bound of x xub = 3; % the upper bound of x ylb = 1; yub = 4; maxIter = param.maxIter; i = 1; funval = zeros(maxIter-1,1); iterNum = zeros(maxIter-1,1); while 1if i == maxIterbreak;end% solve xHxx = eval(Hx);Fxx = eval(Fx);x = quadprog(Hxx,Fxx,[],[],[],[],xlb,xub,[]); % Quadratic programming function% solve yHyy = eval(Hy);Fyy = eval(Fy);y = quadprog(Hyy,Fyy,[],[],[],[],ylb,yub,[]);% update lambdalambda = lambda + rho*(2*x + 3*y -5); % ascendfunval(i) = compute_fval(x,y);iterNum(i) = i;i = i + 1; end plot(iterNum,funval,'-r'); end
    • 求解函數(shù)的 Hessian 矩陣和導(dǎo)數(shù)的函數(shù):getHession_F
    function [H,F] = getHession_F(fn) % fn : function name % H : hessian matrix % F : 一次項(xiàng)數(shù)系數(shù) syms x y lambda rho; if strcmp(fn,'f1') % 判斷輸入函數(shù)是 f1 的話f = (x-1)^2 + lambda*(2*x + 3*y -5) + rho/2*(2*x + 3*y -5)^2;H = hessian(f,x); % 計(jì)算函數(shù)的 Hessian 矩陣F = (2*lambda + (rho*(12*y - 20))/2 - 2); % x 的系數(shù)fcol = collect(f,{'x'}); % 固定y,默認(rèn)x為符號(hào)變量disp(fcol); elseif strcmp(fn,'f2') % 判斷輸入函數(shù)是 f2 的話f = (y-2)^2 + lambda*(2*x + 3*y -5) + rho/2*(2*x + 3*y -5)^2;H = hessian(f,y); F = (3*lambda + (rho*(12*x - 30))/2 - 4); % y 的系數(shù)fcol = collect(f,{'y'}); % 固定x,默認(rèn)y為符號(hào)變量disp(fcol); end end
    • 計(jì)算 (x,y)(x,y)(x,y) 對(duì)應(yīng)的目標(biāo)函數(shù)值函數(shù):compute_fval
    function fval = compute_fval(x,y)fval = (x-1)^2 + (y-2)^2; end

    算法擴(kuò)展

    這里寫一些關(guān)于ADMM算法擴(kuò)展應(yīng)用的個(gè)人理解:
    在通信優(yōu)化問(wèn)題中,聯(lián)合優(yōu)化問(wèn)題存在多個(gè)優(yōu)化變量(比如,{x,y,z}\{x, y, z\}{x,y,z}),等式或不等式約束中的多變量耦合導(dǎo)致問(wèn)題直接求解的復(fù)雜度過(guò)大(尤其是當(dāng)變量的維度過(guò)大時(shí)),但是由于占用了共同的資源約束又不可以直接進(jìn)行變量分解,這時(shí)候?yàn)榱死肁DMM并行求解的思想來(lái)處理較大規(guī)模的問(wèn)題,就需要某種辦法來(lái)引入等式約束將問(wèn)題變成可以分解的形式。

    ADMM方法就是通過(guò) decomposition-coordination 的過(guò)程,通過(guò)連續(xù)協(xié)調(diào)規(guī)模小的局部的子問(wèn)題的解來(lái)找到一個(gè)大規(guī)模的全局問(wèn)題的解。

    • 觀察變量耦合的等式或不等式約束,看是引入“輔助變量”還是“復(fù)制變量”合適;
    • 輔助變量可以替代原來(lái)的變量或約束,比如UAV集群軌跡優(yōu)化中的防碰撞約束 ∥qi[t]?qj[t]∥2≥dmin?\|q_i[t]-q_j[t]\|_2 \geq d_{\min}qi?[t]?qj?[t]2?dmin?,可以通過(guò)引入輔助變量 zi,j[t]=qi[t]?qj[t]z_{i,j}[t]=q_i[t]-q_j[t]zi,j?[t]=qi?[t]?qj?[t] 來(lái)替代防碰撞約束中的 qi[t]q_i[t]qi?[t]qj[t]q_j[t]qj?[t] 以差值方式耦合的情況,原問(wèn)題中增加了輔助變量 zi,jz_{i,j}zi,j?, 防碰撞約束可以被等式約束 Aq=ZAq=ZAq=Z 替代,通過(guò)該方法可以將優(yōu)化問(wèn)題根據(jù)不同的UAVs進(jìn)行分解,即 qi[t]q_i[t]qi?[t]qj[t]q_j[t]qj?[t]以并行方式求解。再比如某個(gè)UAV軌跡在相鄰時(shí)隙之間的最大距離約束 ∥q[t]?q[t?1]∥2≤vmax?δ\|q[t]-q[t-1]\|_2 \leq v_{\max}\deltaq[t]?q[t?1]2?vmax?δ,也可以引入輔助變量 z[t]=q[t]?q[t?1]z[t]=q[t]-q[t-1]z[t]=q[t]?q[t?1] 來(lái)將優(yōu)化問(wèn)題在不同的slot的上進(jìn)行分解,q[t]q[t]q[t]q[t?1]q[t-1]q[t?1]以并行方式求解。
    • 復(fù)制變量就是增加原全局優(yōu)化變量的一個(gè)局部替代變量,通過(guò)引入變量的復(fù)制變量來(lái)保證相同的變量最多出現(xiàn)在一個(gè)不等式約束中。比如,全局變量 xxxyyy 的線性組合讓問(wèn)題不可分解,通過(guò)引入全局變量 xxx 的局部 copying variables xˉ\bar xxˉ 來(lái)替代原優(yōu)化問(wèn)題中的原變量 xxx 在目標(biāo)函數(shù)和約束的位置,注意此時(shí)也引入了等式約束 x=xˉx=\bar xx=xˉ。這樣變量 xxxyyy 就可以以并行的方式求解了,同前面標(biāo)準(zhǔn)ADMM的 x 和 z 中的更新類似。
    • 注意,一般而言原變量(global variables)和引入變量(local variables: 輔助變量、復(fù)制變量)的更新雖然都是基于 min/max (增廣拉格朗日函數(shù))實(shí)現(xiàn),但二者的更新都是基于對(duì)方本次迭代中的值已知的前提下的,所以這樣可以進(jìn)行問(wèn)題分解;local variables, global variables 和 lagrange multiples 是交替進(jìn)行更新的。

    參考資料

    【1】http://www.stat.cmu.edu/~ryantibs/convexopt/lectures/admm.pdf (CMU凸優(yōu)化課件-admm)
    【2】https://www.cnblogs.com/wildkid1024/p/11041756.html
    【3】Boyd S, Parikh N, Chu E, et al. Distributed optimization and statistical learning via the alternating direction method of multipliers[J]. Foundations and Trends? in Machine learning, 2011, 3(1): 1-122.
    【4】https://zhuanlan.zhihu.com/p/103961917 (拉格朗日對(duì)偶(Lagrange duality)、KKT條件)
    【5】https://zhuanlan.zhihu.com/p/286235184 (matlab實(shí)例代碼)
    【6】直接在matlab中搜索 doc quadprog,會(huì)顯示該二次規(guī)劃函數(shù)的使用方法.
    【7】https://www.zhihu.com/question/36566112/answer/82474155
    【8】https://www.zhihu.com/question/36566112/answer/79535746
    【9】https://www.zhihu.com/question/36566112/answer/213686443
    【10】ADMM的一些參考文獻(xiàn)

    總結(jié)

    以上是生活随笔為你收集整理的ADMM算法学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。