交替方向乘子法(ADMM)的原理和流程的白話總結

轉載自:https://blog.csdn.net/qauchangqingwei/article/details/82112103

<div id="article_content" class="article_content clearfix" data-report-click="{&quot;mod&quot;:&quot;popu_307&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qauchangqingwei/article/details/82112103&quot;}">
                                    <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-3019150162.css">
                                        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-3019150162.css">
                <div class="htmledit_views" id="content_views">
                                            <p>作者:大大大的v<br>
鏈接:https://www.zhihu.com/question/36566112/answer/118715721<br>
來源:知乎<br>
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。<br>
&nbsp;</p>

<p>多年前第一次接觸到ADMM時候我關於優化的基礎知識少的可憐(雖然現在也少得可憐),那些公式是什麼鬼。當然如果有優化基礎的話直接看S.Boyd的那本專著就好啦。我試着寫給多年前一窮二白的自己,理一下思路。</p>

<p>&nbsp;</p>

<p>1) 優化問題是什麼:</p>

<p>最常見的優化問題長這樣(公式1):</p>

<p><img alt="min_x\quad f(x)\\" class="has" src="https://www.zhihu.com/equation?tex=min_x%5Cquad+f%28x%29%5C%5C"></p>

<p>其中 <img alt="x" class="has" src="https://www.zhihu.com/equation?tex=x"> 是優化變量,也就是可以改變的數值,通過調節 <img alt="x" class="has" src="https://www.zhihu.com/equation?tex=x"> 的大小,使得目標函數 <img alt="f(x)" class="has" src="https://www.zhihu.com/equation?tex=f%28x%29"> 的數值達到最小。</p>

<p>像(1)式那樣,只有函數,對於變量 <img alt="x" class="has" src="https://www.zhihu.com/equation?tex=x+"> 沒有要求的話,其實是最簡單的一類優化問題:無約束優化問題(我們只考慮凸問題的情況下,如果你不知道什麼是凸問題的話,沒關係,那不重要,只要記住越凸越好=凸=)。</p>

<p>實際上我們對於優化變量 <img alt="x" class="has" src="https://www.zhihu.com/equation?tex=x+"> 可能會有很多要求:</p>

<p><img alt="x" class="has" src="https://www.zhihu.com/equation?tex=x+"> 要滿足什麼集合啦, 什麼等式約束,不等式約束啦巴拉巴拉,這就好比我們希望通過學習升級打怪成爲高知女性就可以吊金龜婿一樣,這裏優化變量 <img alt="x" class="has" src="https://www.zhihu.com/equation?tex=x+"> 暗指學歷,函數 <img alt="f(x)" class="has" src="https://www.zhihu.com/equation?tex=f%28x%29"> 對應的是一個評分,也就是優質金龜婿不願意跟你處對象的評分(因爲是要最小化),金龜婿膚白貌美大長腿,那我小學學歷肯定是不夠的,初中文憑貌似也不太夠?所以我學啊學,學啊學,以爲學歷越高越好,結果好不容易讀了博,回頭一看,好嘞原來男神對另一半學歷是有要求的(也就是優化裏所說的約束):高中&lt; <img alt="x" class="has" src="https://www.zhihu.com/equation?tex=x+"> &lt;=碩士。博士不做女人啦,這大概就是基於學歷的一個優化問題→_→</p>

<p>等式約束: <img alt="subject. to  \quad Ax=b" class="has" src="https://www.zhihu.com/equation?tex=subject.+to++%5Cquad+Ax%3Db"></p>

<p>不等式約束: <img alt="subject. to \quad Ax\leqslant b" class="has" src="https://www.zhihu.com/equation?tex=subject.+to+%5Cquad+Ax%5Cleqslant+b"></p>

<p>所以一個等式約束的優化問題長這樣(公式2):</p>

<p><img alt="min_x\quad f(x)\\sub.to \quad Ax=b" class="has" src="https://www.zhihu.com/equation?tex=min_x%5Cquad+f%28x%29%5C%5Csub.to+%5Cquad+Ax%3Db"></p>

<p>&nbsp;</p>

<p>2)ADMM解決什麼優化問題:</p>

<p><img alt="min_{x,z}\quad f(x)+g(z)\\sub.to\quad Ax+Bz=c" class="has" src="https://www.zhihu.com/equation?tex=min_%7Bx%2Cz%7D%5Cquad+f%28x%29%2Bg%28z%29%5C%5Csub.to%5Cquad+Ax%2BBz%3Dc"></p>

<p>也就意味着ADMM通常解決的是等式約束的優化問題,而且這個優化問題還有兩個優化變量 <img alt="x" class="has" src="https://www.zhihu.com/equation?tex=x+"> 跟 <img alt="z" class="has" src="https://www.zhihu.com/equation?tex=z"> !</p>

<p>回到剛剛找男朋友的問題上來,如果之前我們只考量學歷因素 <img alt="x" class="has" src="https://www.zhihu.com/equation?tex=x"> 的話,現在我們還要考量顏值因素 <img alt="z" class="has" src="https://www.zhihu.com/equation?tex=z">!而且這兩個變量之間還是有等式關係的!(至於這個關係。。。大概就是那個什麼學歷越高,顏值就越。。。=凸=,荒謬,荒謬至極!)</p>

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

<p>&nbsp;</p>

<p>3)解決優化問題的方法:</p>

<p>方法中與ADMM最爲相關的大概就是原對偶方法中的增廣拉格朗日法(ALM)。</p>

<p>對偶方法:把公式2中的minimize問題與約束條件sub to通過一個對偶變量 <img alt="\lambda" class="has" src="https://www.zhihu.com/equation?tex=%5Clambda+"> 耦合在一起,形成一個叫做Lagrange函數的東西:</p>

<p><img alt="L(x,\lambda) = f(x)+\lambda^T(Ax-b)\\" class="has" src="https://www.zhihu.com/equation?tex=L%28x%2C%5Clambda%29+%3D+f%28x%29%2B%5Clambda%5ET%28Ax-b%29%5C%5C"></p>

<p>原來帶約束求解 <img alt="min_x f(x)" class="has" src="https://www.zhihu.com/equation?tex=min_x+f%28x%29"> ,現在求解對偶問題 <img alt="\max_{\lambda}\min_{x}L(x,\lambda)" class="has" src="https://www.zhihu.com/equation?tex=%5Cmax_%7B%5Clambda%7D%5Cmin_%7Bx%7DL%28x%2C%5Clambda%29"> ,兩個問題的最優解等價(原問題凸的情況下。爲什麼?公式好多,我再想想(查查)有沒有什麼直觀的解釋),而且現在沒了約束,豈不美哉(❁´◡`❁)*✲゚*</p>

<p>方法是對偶上升法:</p>

<p><img alt="step1:\ \ \ \ \ \ x^{k+1}=\arg\min_x \ L(x,\lambda^k)\\ step2: \ \ \ \lambda^{k+1} = \lambda^k+\rho(Ax^{k+1}-b)" class="has" src="https://www.zhihu.com/equation?tex=step1%3A%5C+%5C+%5C+%5C+%5C+%5C+x%5E%7Bk%2B1%7D%3D%5Carg%5Cmin_x+%5C+L%28x%2C%5Clambda%5Ek%29%5C%5C+step2%3A+%5C+%5C+%5C+%5Clambda%5E%7Bk%2B1%7D+%3D+%5Clambda%5Ek%2B%5Crho%28Ax%5E%7Bk%2B1%7D-b%29"></p>

<p>對偶上升法其實很好理解,它把 <img alt="\max_{\lambda}\min_{x}L(x,\lambda)" class="has" src="https://www.zhihu.com/equation?tex=%5Cmax_%7B%5Clambda%7D%5Cmin_%7Bx%7DL%28x%2C%5Clambda%29"> ,也就是 <img alt="\max_{\lambda}(\min_{x}L(x,\lambda))" class="has" src="https://www.zhihu.com/equation?tex=%5Cmax_%7B%5Clambda%7D%28%5Cmin_%7Bx%7DL%28x%2C%5Clambda%29%29"> 拆成了兩步:</p>

<p>第一步是固定對偶變量 <img alt="\lambda" class="has" src="https://www.zhihu.com/equation?tex=%5Clambda+"> ,求解<img alt="\min_xL(x,\lambda)" class="has" src="https://www.zhihu.com/equation?tex=%5Cmin_xL%28x%2C%5Clambda%29"> 。</p>

<p>第二步固定住變量 <img alt="x" class="has" src="https://www.zhihu.com/equation?tex=x"> ,像衆所周知的梯度下降法那樣操作,只不過這裏是arg max 問題所以變成了上升法。</p>

<p>&nbsp;</p>

<p>後來有人嫌棄這個Lagrange函數還不夠凸,又對約束增加一個懲罰項,變成增廣拉格朗日函數</p>

<p><img alt="L(x,\lambda) = f(x)+\lambda^T(Ax-b)+\frac{\rho}{2}\|Ax-b\|^2\\" class="has" src="https://www.zhihu.com/equation?tex=L%28x%2C%5Clambda%29+%3D+f%28x%29%2B%5Clambda%5ET%28Ax-b%29%2B%5Cfrac%7B%5Crho%7D%7B2%7D%5C%7CAx-b%5C%7C%5E2%5C%5C"></p>

<p>這樣就邁向更凸,算法也更強啦~</p>

<p>所以老師那句話什麼來着,我凸了,也變強了。。。。</p>

<p>&nbsp;</p>

<p>4)ADMM的流程:</p>

<p>ADMM的想法跟上面的思路就很一致啦,作爲一個primal-dual原對偶方法,首先,它要有個對偶函數,也就是增廣拉格朗日函數:</p>

<p><img alt="L(x,z,\lambda)=f(x)+g(z)+\lambda^T(Ax+Bz-c)+\frac{\rho}{2}\|Ax+Bz-c\|^2" class="has" src="https://www.zhihu.com/equation?tex=L%28x%2Cz%2C%5Clambda%29%3Df%28x%29%2Bg%28z%29%2B%5Clambda%5ET%28Ax%2BBz-c%29%2B%5Cfrac%7B%5Crho%7D%7B2%7D%5C%7CAx%2BBz-c%5C%7C%5E2"></p>

<p>然後,它像對偶上升法一樣分別固定另外兩個變量,更新其中一個變量:(也就是其名:交替方向)</p>

<p><img alt="step1:\ \ \ \ \ \ \  \  x^{k+1}=\arg\min_x \ L(x,z^{k},\lambda^k)\\  step2:\ \ \ \ \  z^{k+1}=\arg\min_z \ L(x^{k+1},z,\lambda^k)\\  step3: \lambda^{k+1} = \lambda^k+\rho(Ax^{k+1}+Bz^{k+1}-c)" class="has" src="https://www.zhihu.com/equation?tex=step1%3A%5C+%5C+%5C+%5C+%5C+%5C+%5C++%5C++x%5E%7Bk%2B1%7D%3D%5Carg%5Cmin_x+%5C+L%28x%2Cz%5E%7Bk%7D%2C%5Clambda%5Ek%29%5C%5C++step2%3A%5C+%5C+%5C+%5C+%5C++z%5E%7Bk%2B1%7D%3D%5Carg%5Cmin_z+%5C+L%28x%5E%7Bk%2B1%7D%2Cz%2C%5Clambda%5Ek%29%5C%5C++step3%3A+%5Clambda%5E%7Bk%2B1%7D+%3D+%5Clambda%5Ek%2B%5Crho%28Ax%5E%7Bk%2B1%7D%2BBz%5E%7Bk%2B1%7D-c%29"></p>

<p>重複直到不怎麼變化了,也就是收斂了。。。</p>

<p>至於怎麼求解 <img alt="\arg\min L" class="has" src="https://www.zhihu.com/equation?tex=%5Carg%5Cmin+L"> ,因爲無約束,梯度下降法啊,牛頓法啊等等都可以~其實就是大循環裏嵌套的小循環,step1~3是大循環,求解裏面的 <img alt="\arg\min L" class="has" src="https://www.zhihu.com/equation?tex=%5Carg%5Cmin+L"> 是小循環。</p>

<p>&nbsp;</p>

<p>5)其他一些雜七雜八的話:</p>

<p>ADMM相當於把一個大的問題分成了兩個子問題,縮小了問題的規模,分而治之(?)</p>

<p>實際上有些算法用ADMM的思路,你看從ALM到ADMM相當於增加一個變量z,增加一個step就大大提升了算法性能,如果我再增加一個變量一個step呢~?但有工作指出理論上只有兩個block的ADMM能夠保證收斂(忘記在哪裏看到的,不對的話,我就把這句話刪掉!)</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>                                    </div>
                    </div>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章