UA MATH567 高维统计专题1 稀疏信号及其恢复4 Basis Pursuit的算法 Projected Gradient Descent
UA MATH567 高維統計專題1 稀疏信號及其恢復4 Basis Pursuit的算法 Projected Gradient Descent
前三講完成了對sparse signal recovery的modelling(即L0L_0L0?-minimization建模,但考慮到它很難用于實際計算,再用L1L_1L1?-minimization作為L0L_0L0?-minimization的convex relaxation,并且討論了二者full recovery的性質),這一講介紹能實際用于求解L1L_1L1?-minimization
min?∥x∥1s.t.y=Ax\min \ \ \left\| x\right\|_1 \\ s.t. \ \ y = Axmin??∥x∥1?s.t.??y=Ax也就是basis pursuit問題的算法。
首先考慮凸優化中最常用的Gradient descent:要求解min?xf(x)\min_xf(x)minx?f(x),只需要按下面的規則update即可
xk+1=xk?tk?f(xk)x_{k+1}=x_k-t_k\nabla f(x_k)xk+1?=xk??tk??f(xk?)
其中tk↓0t_k \downarrow 0tk?↓0,表示每一次update的步長;但對于basis pursuit問題,它的形式要更復雜一點:
于是,我們先處理第一個難點,等式約束y=Axy=Axy=Ax,定義一個線性流形
L={x∈Rn:y=Ax}L=\{x \in \mathbb{R}^n:y=Ax\}L={x∈Rn:y=Ax}
然后為了保證每一次update之后的xk+1x_{k+1}xk+1?滿足等式約束,我們可以取xk?tk?f(xk)x_k-t_k\nabla f(x_k)xk??tk??f(xk?)在LLL上的投影作為xk+1x_{k+1}xk+1?;
然后處理第二個難點,在角點處不可微,我們可以用次梯度(subgradient)替代梯度。次梯度的定義是
f:S→Rf:S \to \mathbb{R}f:S→R is concave where SSS is a nonempty convex set. Then ξ\xiξ is called subgradient of fff at xˉ\bar xxˉ if
f(x)≤f(xˉ)+ξT(x?xˉ),?x∈Sf(x) \le f(\bar x)+\xi^T(x-\bar x),\forall x \in Sf(x)≤f(xˉ)+ξT(x?xˉ),?x∈S
f:S→Rf:S \to \mathbb{R}f:S→R is convex where SSS is a nonempty convex set. Then ξ\xiξ is called subgradient of fff at xˉ\bar xxˉ if
f(x)≥f(xˉ)+ξT(x?xˉ),?x∈Sf(x) \ge f(\bar x)+\xi^T(x-\bar x),\forall x \in Sf(x)≥f(xˉ)+ξT(x?xˉ),?x∈S
不清楚次梯度的計算和意義的同學可以看一下這個例題。
與梯度相比,雖然次梯度無法提供一個最速的“下降”方向(只能提供一種正確的下降方向),但它對目標函數的可微性沒有要求,所以在basis pursuit中用次梯度代替梯度是非常合理的。
根據以上兩條推理,我們可以修正Gradient decent算法,使之適用于basis pursuit,修正后的這個算法一般被稱為projected gradient decent。
下面是這個算法的偽代碼以及用R寫的一個代碼示例:
在上面的偽代碼中,有一些值得注意的細節。x~=A?y\tilde x=A^{\dag}yx~=A?y中,AAA本身是不可逆的,但是我們希望x~∈L\tilde x \in Lx~∈L,所以取了AAA的pseudo-inverse A?A^{\dag}A?,可以驗證
Ax~=AA?y=AA?(AA?)?1y=yA \tilde x =AA^{\dag}y=AA^*(AA^*)^{-1}y=yAx~=AA?y=AA?(AA?)?1y=y
也就是x~∈L\tilde x \in Lx~∈L,其中A?A^*A?表示AAA的共軛轉置;Γ\GammaΓ矩陣是一個投影矩陣,作用是把一個向量投影到AAA的核空間;在while循環中,
xt=x~+Γ(xt?1?sign(xt?1)t)x_t=\tilde x+\Gamma(x_{t-1}-\frac{sign(x_{t-1})}{t})xt?=x~+Γ(xt?1??tsign(xt?1?)?)
這里其實是把可行解分為了兩部分。因為對于y=Axy=Axy=Ax的解集L={x:y=Ax}L=\{x:y=Ax\}L={x:y=Ax}而言,它可以表示為特解x~\tilde xx~和AAA的核空間Null(A)={x:0=Ax}Null(A)=\{x:0=Ax\}Null(A)={x:0=Ax}構成的線性流形
L=x~+Null(A)L=\tilde x+Null(A)L=x~+Null(A)
因此固定了一個特解x~\tilde xx~之后,要得到使得目標函數∥x∥1\left\| x \right\|_1∥x∥1?最小的解,我們只需要在Null(A)Null(A)Null(A)中進行下降即可,這就是Γ(xt?1?sign(xt?1)t)\Gamma(x_{t-1}-\frac{sign(x_{t-1})}{t})Γ(xt?1??tsign(xt?1?)?)這部分的作用,其中Γ\GammaΓ的作用是將(xt?1?sign(xt?1)t)(x_{t-1}-\frac{sign(x_{t-1})}{t})(xt?1??tsign(xt?1?)?)投影到Null(A)Null(A)Null(A)中,如果不做投影,那么第ttt次update就是xt?1?sign(xt?1)tx_{t-1}-\frac{sign(x_{t-1})}{t}xt?1??tsign(xt?1?)?,其中1/t1/t1/t是步長,sign(xt?1)sign(x_{t-1})sign(xt?1?)就是次梯度。
PS <- function(A,y,max_iter = 1000){m = nrow(A); n = ncol(A)A1 = t(A)%*%solve(A%*%t(A))Gamma = diag(n)-A1%*%Ax_tilde = A1%*%yx0 = rep(0,n); t = 0while(t<max_iter){t = t+1x1 = x_tilde + Gamma%*%(x0 - (1/t)*sign(x0))x0 = x1}return(x0) }需要注意的是這個R代碼示例只是簡單翻譯了偽代碼,還有很多可以優化的地方,比如矩陣求逆的計算、初始值的選取、while循環的stopping criteria等;另外,想更詳細的了解這個算法的同學可以去看Wright and Ma (2020)那本高維數據分析的section 2.3.3;另外,在這本書上的算法都可以找到對應的matlab code,想學習一下怎么把一個用偽代碼描述的算法變成一個完整的優化過的算法的同學可以自己去找一下。
總結
以上是生活随笔為你收集整理的UA MATH567 高维统计专题1 稀疏信号及其恢复4 Basis Pursuit的算法 Projected Gradient Descent的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UA MATH567 高维统计专题1 稀
- 下一篇: 物理光学8 多波束干涉