摘要:利用近端梯度下降算法,给出求解压缩感知问题的迭代软阈值和迭代硬阈值算法,并将迭代硬阈值算法通过Learning to learn方法进行改进,利用深度神经网络的模型进行学习.
参考:David Wipf, Microsoft Research, Beijing, 2018
目录
- 问题提出
- 迭代软阈值算法(Iterative Soft Thresholding)
- 迭代硬阈值算法(Iterative Hard Thresholding)
- IHT算法的Learning to learn提升
- Learning to learn 方法
- IHT方法的Learning to learn 提升
1. 问题提出
先给出一个较复杂又直观的例子:
复杂的例子:声源定位问题
声源空间位置为$x$,传感器空间位置为$y$,从声源空间到传感器空间的映射为 $$y=\Phi x+\epsilon$$![]()
希望由传感器空间的数据估计声源空间的位置xxx.
在Φ\PhiΦ矩阵很大时,对xxx的估计很困难,但是当假定xxx的大部分元素为000时,声源估计问题可以表示为如下形式
x^=argminx∣∣y−Φx∣∣22+λ∣∣x∣∣0\hat{x}=\arg\min_x ||y-\Phi x||_2^2+\lambda ||x||_0x^=argxmin∣∣y−Φx∣∣22+λ∣∣x∣∣0
由此引出我们的问题是:
minx∣∣x∣∣0s.t.y=Φx\min_x ||x||_0 \quad s.t.\quad y=\Phi xxmin∣∣x∣∣0s.t.y=Φx
这是一个NP-hard问题,放松约束以后的形式为如下四种
minx∣∣y−Φx∣∣22+λ∣∣x∣∣1minx∣∣y−Φx∣∣22+λ∣∣x∣∣0minx∣∣y−Φx∣∣22s.t.∣∣x∣∣0≤rminx∣∣y−Φx∣∣22+I∞[∣∣x∣∣0>r]\begin{aligned} &\min_x ||y-\Phi x||^2_2 + \lambda||x||_1\\ & \min_x ||y-\Phi x||^2_2 + \lambda||x||_0\\ &\min_x ||y-\Phi x||^2_2\quad s.t.\quad ||x||_0 \leq r\\ &\min_x ||y-\Phi x||^2_2+I_\infty\left[||x||_0 > r\right] \end{aligned}xmin∣∣y−Φx∣∣22+λ∣∣x∣∣1xmin∣∣y−Φx∣∣22+λ∣∣x∣∣0xmin∣∣y−Φx∣∣22s.t.∣∣x∣∣0≤rxmin∣∣y−Φx∣∣22+I∞[∣∣x∣∣0>r]
其中,第一种为凸约束,后三种为非凸约束,后面两种形式是等价的,限制其非零元素的个数.
上述形式都是标准的
minxfs(x)+fn(x)\min_x f^s(x)+f^n(x)xminfs(x)+fn(x)
的问题,利用近端梯度下降,对不同的形式可以得到不同的迭代算法:
- 凸约束下,得到迭代软阈值(IST)算法;
- 非凸约束下,得到迭代硬阈值(IHT)算法.
2. 迭代软阈值算法
优化问题
x^=argminx∣∣y−Φx∣∣22+λ∣∣x∣∣1\hat{x}=\arg\min_x ||y-\Phi x||^2_2 + \lambda||x||_1x^=argxmin∣∣y−Φx∣∣22+λ∣∣x∣∣1
为标准的fs(x)+fn(x)f^s(x)+f^n(x)fs(x)+fn(x)的形式,求解的基本思路如下:
- 对光滑部分,计算其梯度▽fs(x)\bigtriangledown f^s(x)▽fs(x),得到标准梯度下降算法的迭代公式;
- 对非光滑部分,求解近端问题proxμfn(x)(z)prox_{\mu f^n(x)}(z)proxμfn(x)(z),得到非线性变换公式;
- 联立两项得到单步迭代,即迭代软阈值算法.
下面开始进行求解.
首先计算fs(x)f^s(x)fs(x)的梯度
▽fs(x)=ΦTΦx(k)+ΦTy\bigtriangledown f^s(x)=\Phi^T\Phi x^{(k)}+\Phi^Ty▽fs(x)=ΦTΦx(k)+ΦTy
带入梯度下降更新公式,得到
x(k+1)=x(k)−1L▽f(x(k))=(I−1LΦTΦ)x(k)+1LΦTy=W1x(k)+W2y\begin{aligned}
x^{(k+1)} &= x^{(k)}-\frac{1}{L}\bigtriangledown f(x^{(k)})\\
&=\left(I-\frac{1}{L}\Phi^T\Phi\right)x^{(k)}+\frac{1}{L}\Phi^Ty\\
&=W_1x^{(k)}+W_2y
\end{aligned}x(k+1)=x(k)−L1▽f(x(k))=(I−L1ΦTΦ)x(k)+L1ΦTy=W1x(k)+W2y
其次,求解近端问题
proxμfn(x)(z)=argminx12∣∣x−z∣∣2+μfn(x)prox_{\mu f^n(x)}(z)=\arg\min_x \frac{1}{2} ||x-z||^2+\mu f^n(x)proxμfn(x)(z)=argxmin21∣∣x−z∣∣2+μfn(x)
其中,fn(x)=∣∣x∣∣1f^n(x)=||x||_1fn(x)=∣∣x∣∣1. 带入得到
proxμfn(x)(z)=argminx12∣∣x−z∣∣2+μ∣∣x∣∣1=sign(z)max{∣z∣−μ,0}=Sμ(z)\begin{aligned} prox_{\mu f^n(x)}(z)&=\arg\min_x \frac{1}{2} ||x-z||^2+\mu||x||_1\\ &=sign(z)\max\left\{|z|-\mu,0\right\}\\ &=S_\mu(z) \end{aligned}proxμfn(x)(z)=argxmin21∣∣x−z∣∣2+μ∣∣x∣∣1=sign(z)max{∣z∣−μ,0}=Sμ(z)
最后,将梯度下降更新公式带入近端问题,得到最终的迭代软阈值算法
x(k+1)=Sμ[(I−1LΦTΦ)x(k)+1LΦTy]=Sμ[W1x(k)+W2y]\begin{aligned} x^{(k+1)}&=S_\mu\left[\left(I-\frac{1}{L}\Phi^T\Phi\right)x^{(k)}+\frac{1}{L}\Phi^Ty\right]\\ &=S_\mu\left[W_1x^{(k)}+W_2y\right] \end{aligned}x(k+1)=Sμ[(I−L1ΦTΦ)x(k)+L1ΦTy]=Sμ[W1x(k)+W2y]
可以看出,形式上基本由线性变化与非线性激活组成,这就为后续利用神经网络模型提供基础.
3. 迭代硬阈值算法
优化问题
x^=argminx∣∣y−Φx∣∣22+I∞[∣∣x∣∣0>r]\hat{x}=\arg\min_x ||y-\Phi x||^2_2 + I_\infty\left[||x||_0 > r\right]x^=argxmin∣∣y−Φx∣∣22+I∞[∣∣x∣∣0>r]
同样为标准的fs(x)+fn(x)f^s(x)+f^n(x)fs(x)+fn(x)的形式,求解的基本思路如下:
- 对光滑部分,计算其梯度▽fs(x)\bigtriangledown f^s(x)▽fs(x),得到标准梯度下降算法的迭代公式;
- 对非光滑部分,求解近端问题proxμfn(x)(z)prox_{\mu f^n(x)}(z)proxμfn(x)(z),得到非线性变换公式;
- 联立两项得到单步迭代,即迭代硬阈值算法.
下面开始进行求解.
首先计算fs(x)f^s(x)fs(x)的梯度
▽fs(x)=ΦTΦx(k)+ΦTy\bigtriangledown f^s(x)=\Phi^T\Phi x^{(k)}+\Phi^Ty▽fs(x)=ΦTΦx(k)+ΦTy
带入梯度下降更新公式,得到
x(k+1)=x(k)−1L▽f(x(k))=(I−1LΦTΦ)x(k)+1LΦTy=W1x(k)+W2y\begin{aligned}
x^{(k+1)} &= x^{(k)}-\frac{1}{L}\bigtriangledown f(x^{(k)})\\
&=\left(I-\frac{1}{L}\Phi^T\Phi\right)x^{(k)}+\frac{1}{L}\Phi^Ty\\
&=W_1x^{(k)}+W_2y
\end{aligned}x(k+1)=x(k)−L1▽f(x(k))=(I−L1ΦTΦ)x(k)+L1ΦTy=W1x(k)+W2y
其次,求解近端问题
proxμfn(x)(z)=argminx12∣∣x−z∣∣2+μfn(x)prox_{\mu f^n(x)}(z)=\arg\min_x \frac{1}{2} ||x-z||^2+\mu f^n(x)proxμfn(x)(z)=argxmin21∣∣x−z∣∣2+μfn(x)
其中,fn(x)=I∞[∣∣x∣∣0>r]f^n(x)=I_\infty\left[||x||_0 > r\right]fn(x)=I∞[∣∣x∣∣0>r]. 带入得到
proxμfn(x)(z)=argminx12∣∣x−z∣∣2+μI∞[∣∣x∣∣0>r]≐Hˉr[z]\begin{aligned}
prox_{\mu f^n(x)}(z)&=\arg\min_x \frac{1}{2} ||x-z||^2+\mu I_\infty\left[||x||_0 > r\right]\\
&\doteq \bar{H}_r[z]
\end{aligned}proxμfn(x)(z)=argxmin21∣∣x−z∣∣2+μI∞[∣∣x∣∣0>r]≐Hˉr[z]
其中,
Hˉr[zi]={zi:∣zi∣为z的最大r个元素之一0:otherwise\bar{H}_r[z_i]=\begin{cases}
z_i\quad&:\quad|z_i|为z的最大r个元素之一\\
0 \quad&:\quad otherwise
\end{cases}Hˉr[zi]={zi0:∣zi∣为z的最大r个元素之一:otherwise
最后,将梯度下降更新公式带入近端问题,得到最终的迭代硬阈值算法
x(k+1)=Hˉr[(I−1LΦTΦ)x(k)+1LΦTy]=Hˉr[W1x(k)+W2y]\begin{aligned} x^{(k+1)}&=\bar{H}_r\left[\left(I-\frac{1}{L}\Phi^T\Phi\right)x^{(k)}+\frac{1}{L}\Phi^Ty\right]\\ &=\bar{H}_r\left[W_1x^{(k)}+W_2y\right] \end{aligned}x(k+1)=Hˉr[(I−L1ΦTΦ)x(k)+L1ΦTy]=Hˉr[W1x(k)+W2y]
4. IHT算法的Learning to learn提升
4.1 Learning to learn
假设我们的目标函数为
fθ(x),θ∈Ωf_\theta(x),\quad \theta\in\Omegafθ(x),θ∈Ω
并假设已有训练集,这里采用有监督的训练对
xi∗x_i^*xi∗由别的优化算法得到. 若难以得到,则可用生成模型:随机生成x∗x^*x∗,计算y=Φx∗+ϵy=\Phi x^* + \epsilony=Φx∗+ϵ
{θi,xi∗∣θi∈Θ,xi∗=argminxfθi(x),i=1,2,...,N}\left\{\theta_i,x_i^*|\theta_i\in\Theta,x_i^*=\arg\min_x f_{\theta_i}(x),i=1,2,...,N\right\}{θi,xi∗∣θi∈Θ,xi∗=argxminfθi(x),i=1,2,...,N}
我们的核心目标是:
- 利用上述信息,学习一些参数化的函数g(θ;ω)g(\theta;\omega)g(θ;ω),使其满足
g(θ;ω^)≈x∗=argminxfθ(x)g(\theta;\hat{\omega})\approx x^*= \arg\min_x f_\theta(x)g(θ;ω^)≈x∗=argxminfθ(x)
通过θ\thetaθ到ggg是一种新的学习算法. 而ggg也是一个优化算法,即Learning to learn.
4.2 IHT算法的Learning to learn提升
回顾一下IHT算法的基本思路:
- 对光滑部分,计算其梯度▽fs(x)\bigtriangledown f^s(x)▽fs(x),得到标准梯度下降算法的迭代公式,记为h^(x,θ;ω)\hat{h}(x,\theta;\omega)h^(x,θ;ω);
- 对非光滑部分,求解近端问题proxμfn(x)(z)prox_{\mu f^n(x)}(z)proxμfn(x)(z),得到非线性变换公式;
- 联立两项得到单步迭代,即迭代硬阈值算法.
在第一步中,我们得到梯度下降的更新公式
x(k+1)=h^(x(k),θ;ω)=W1x(k)+W2yx^{(k+1)}=\hat{h}(x^{(k)},\theta;\omega)=W_1x^{(k)}+W_2yx(k+1)=h^(x(k),θ;ω)=W1x(k)+W2y
其中,θ=y\theta = yθ=y,W1=I−1LΦTΦW_1=I-\frac{1}{L}\Phi^T\PhiW1=I−L1ΦTΦ,W2=1LΦTW_2=\frac{1}{L}\Phi^TW2=L1ΦT,ω={W1,W2}\omega=\left\{W_1,W_2\right\}ω={W1,W2}
在第三步以后,我们得到IHT算法
x(k+1)=Hˉr[W1x(k)+W2y]x^{(k+1)}=\bar{H}_r\left[W_1x^{(k)}+W_2y\right]x(k+1)=Hˉr[W1x(k)+W2y]
若将迭代硬阈值算法进行KKK次,则可以得到我们的学习算法
x^=x(K)=g(θ;ω)=proxμfn(x)[h^(⋯proxμfn(x)[h^(x(1),θ;ω)]⋯ ,θ;ω)]\begin{aligned} \hat{x}&=x^{(K)}\\ &=g(\theta;\omega)\\ &=prox_{\mu f^n(x)}\left[\hat{h}\left(\cdots prox_{\mu f^n(x)}\left[\hat{h}\left(x^{(1)},\theta;\omega\right)\right]\cdots,\theta;\omega\right)\right] \end{aligned}x^=x(K)=g(θ;ω)=proxμfn(x)[h^(⋯proxμfn(x)[h^(x(1),θ;ω)]⋯,θ;ω)]
通常的深层神经网络为


取K=2K=2K=2,则很明显这如下的网络结构,网络需要学习的可调参数为ω\omegaω.

- 训练过程:
通过已知的信息,可以给出网络的训练过程为对目标函数
minω∑i=1Nℓ[g(θi;ω),xi∗]\min_\omega \sum_{i=1}^N\ell\left[g(\theta_i;\omega),x_i^*\right]ωmini=1∑Nℓ[g(θi;ω),xi∗]
的优化. 也可看作是非监督学习,其中ℓ\ellℓ为任意的损失函数或距离度量. 可以利用随机梯度下降等方式,得到ω\omegaω.
- 测试过程
给出新的函数fθ′f_{\theta'}fθ′,即给出新的数据θ′\theta'θ′,由训练得到的参数ω^\hat{\omega}ω^计算
g(θ′;ω^)≈argminxfθ′(x)g(\theta';\hat{\omega})\approx \arg\min_x f_{\theta'}(x)g(θ′;ω^)≈argxminfθ′(x)
ggg就是新学习到的算法,也就是Learning to learn.
因此,我们的IHT算法变为一个Learning to learn方法,原始算法直接求出xxx的稀疏最优解,而Learning to learn方法通过学习ω\omegaω建立起从θ\thetaθ到xxx映射. 即学习得到的不是某一个特定的解,而是一个从θ\thetaθ中学到的新的学习算法.
两者的区别:
-
原始方法是利用测量矩阵Φ\PhiΦ计算x^\hat{x}x^,Learning to learn方法中的ω\omegaω是通过训练数据对{θi,xi∗∣θi∈Θ,xi∗=argminxfθi(x),i=1,2,...,N}\left\{\theta_i,x_i^*|\theta_i\in\Theta,x_i^*=\arg\min_x f_{\theta_i}(x),i=1,2,...,N\right\}{θi,xi∗∣θi∈Θ,xi∗=argminxfθi(x),i=1,2,...,N}学习得到的.
-
有限等距性质对Φ\PhiΦ的相关性提出一定要求,而利用Learning to learn方法可以很好的减轻Φ\PhiΦ相关性对估计的影响.