ADMM結合了對偶更新和拉格朗日乘子的優缺點。
對偶問題
以凸等式約束優化問題爲例:
目標函數:min f ( x ) \min{f(x)} min f ( x ) s u b j e c t subject s u b j e c t t o to t o A x = b Ax=b A x = b
那麼它的拉格朗日函數爲:L ( x , λ ) = f ( x ) + λ ( A x − b ) L(x, \lambda)=f(x)+\lambda(Ax-b) L ( x , λ ) = f ( x ) + λ ( A x − b )
其對偶式爲:g ( λ ) = i n f x L ( x , λ ) g(\lambda) = inf_x{L(x, \lambda)} g ( λ ) = i n f x L ( x , λ ) ,其中i n f x inf_x i n f x 指的是給定一個x x x ,求g ( λ ) g(\lambda) g ( λ ) 函數的上界。既然給定了x x x ,就不再是x x x 的函數了,相對於λ \lambda λ 就是常數,這就是爲什麼是求g ( λ ) g(\lambda) g ( λ ) 的函數。所以對偶問題爲:
max g ( λ ) \max{g(\lambda)} max g ( λ )
對偶上升
在前面我們講的最速梯度下降和牛頓法都是通過梯度下降來求最優解。爲什麼?因爲那是求解凸函數。看到這裏的“上升”,你能想到什麼?對!解決的是凹函數。上面的對偶問題max g ( λ ) \max{g(\lambda)} max g ( λ ) 是一個凹函數。
因此,迭代更新的過程爲:
λ k + 1 = λ k + α k Δ g ( λ k ) \lambda^{k+1}=\lambda^{k}+\alpha^{k}\Delta{g(\lambda^k)} λ k + 1 = λ k + α k Δ g ( λ k ) ,其中Δ g ( y k ) = A x ~ − b \Delta{g(y^k)}=A\tilde{x}-b Δ g ( y k ) = A x ~ − b where x ~ = arg min x L ( x , λ k ) \tilde{x}=\underset{x}{\argmin}{L(x, \lambda^{k})} x ~ = x a r g m i n L ( x , λ k )
首先,優化主問題:x k + 1 = arg min x L ( x , λ k ) x^{k+1}=\underset{x}{\argmin}{L(x, \lambda^{k})} x k + 1 = x a r g m i n L ( x , λ k )
然後對偶更新:λ k + 1 = λ k + α k ( A x k + 1 − b ) \lambda^{k+1}=\lambda^{k}+\alpha^{k}({Ax^{k+1}-b}) λ k + 1 = λ k + α k ( A x k + 1 − b )
對偶分解
再依次把目標函數拿出來:
min f ( x ) \min{f(x)} min f ( x ) s u b j e c t subject s u b j e c t t o to t o A x = b Ax=b A x = b
實際上,x x x 很有可能是多變量,因此我們做一次推廣,即x = ( x 1 , x 2 , . . . . . . x n ) x=(x_1,x_2,......x_n) x = ( x 1 , x 2 , . . . . . . x n ) 。當然x i x_i x i 也可以是向量或矩陣。
對於這麼一個求多變量的函數極值問題,我們希望可以將其分解不同單變量的函數疊加,就像諧波分解一樣。因此,假設f ( x ) f(x) f ( x ) 可分解: f ( x ) = f 1 ( x 1 ) + f 2 ( x 2 ) + . . . . . . + f n ( x n ) f(x)=f_1(x_1)+f_2(x_2)+......+f_n(x_n) f ( x ) = f 1 ( x 1 ) + f 2 ( x 2 ) + . . . . . . + f n ( x n )
那麼,我們將式子重新帶入拉格朗日函數:
L ( x , λ ) = f 1 ( x 1 ) + λ 1 ( A 1 x 1 − b ) + f 2 ( x 2 ) + λ 2 ( A 2 x 2 − b ) + . . . . . . + f n ( x n ) + λ n ( A n x n − b ) L(x, \lambda)=f_1(x_1)+\lambda_1(A_1x_1-b)+f_2(x_2)+\lambda_2(A_2x_2-b)+......+f_n(x_n)+\lambda_n(A_nx_n-b) L ( x , λ ) = f 1 ( x 1 ) + λ 1 ( A 1 x 1 − b ) + f 2 ( x 2 ) + λ 2 ( A 2 x 2 − b ) + . . . . . . + f n ( x n ) + λ n ( A n x n − b )
因此,L ( x i , λ i ) = f i ( x i ) + λ T A i x i L(x_i, \lambda_i)=f_i(x_i)+\lambda^{T}A_ix_i L ( x i , λ i ) = f i ( x i ) + λ T A i x i
從而,求主問題,從上面的單變量變成了:
x i k + 1 = arg min x i L ( x i , λ k ) x^{k+1}_i=\underset{x_i}{\argmin}{L(x_i, \lambda^{k})} x i k + 1 = x i a r g m i n L ( x i , λ k ) , 這不就是上面單變量的對偶上升法的主問題嘛!由於x是相互獨立的,因此就可以並行計算。
那麼,函數可分解可以將原問題分成許多子問題。那麼能夠這樣做有什麼限制嗎?那就是約束條件一定要是線性的 (這裏可以聯想信號與系統中判斷系統是否是線性)。我們知道增廣拉格朗日函數是在拉格朗日函數基礎上加了一個二次項,二次項是增加凸性,但破壞了拉格朗日函數的可分解特性 ,原因就在於此,對兩者的對比可以查看此文章 。
那麼,優化步驟變成了(對比對偶上升):
原問題(子問題):x i k + 1 = arg min x i L i ( x i , λ k ) x^{k+1}_i=\underset{x_i}{\argmin}{L_i(x_i, \lambda^{k})} x i k + 1 = x i a r g m i n L i ( x i , λ k ) ,i = 1 , . . . . . . . n i = 1,.......n i = 1 , . . . . . . . n
對偶更新:λ k + 1 = λ k + α k ( ∑ i = 1 n A i x i k + 1 − b ) \lambda^{k+1}=\lambda^{k}+\alpha^{k}({\sum_{i=1}^{n}A_ix^{k+1}_i-b}) λ k + 1 = λ k + α k ( ∑ i = 1 n A i x i k + 1 − b )
總而言之,對偶分解是在對耦上升基礎上更進一步,將主問題分解成子問題求解。對於每個子問題,其實就是對偶上升求解的。
這種分解方式可以使得並行計算,從而加速收斂,但是對偶上升的缺點並沒有得到解決:對偶更新的時候只是用了一階信息,而一階魯棒性很差,從最速梯度下降法我們知道,這種最速梯度上升法同樣很依賴學習率α k \alpha^k α k ,而且越到收斂點梯度∑ i = 1 n A i x i k + 1 − b {\sum_{i=1}^{n}A_ix^{k+1}_i-b} ∑ i = 1 n A i x i k + 1 − b 越接近0,因此更新得越來越慢(可參見這篇文章 )
怎麼解決?就是在原來的拉格朗日函數的基礎上加上一個二次約束項:L p ( x , λ ) = f ( x ) + λ T ( A x − b ) + ρ 2 ∥ A x − b ∥ 2 2 L_p(x, \lambda)=f(x)+\lambda^{T}(Ax-b)+\frac{\rho}{2}\left \| Ax-b\right \|^2_2 L p ( x , λ ) = f ( x ) + λ T ( A x − b ) + 2 ρ ∥ A x − b ∥ 2 2 ,這可以提高收斂的魯棒性。
引入二次項破壞了拉格朗日乘子可分解性,無法使用對偶分解。而要使用對偶分解又只能是線性約束,而這個問題就可以使用ADMM來解決。我在另一篇博文 已經有過分享!
這篇博文就當一個先導內容的介紹吧!