求解稀疏优化问题2——临近点方法+半光滑牛顿法

走远了吗. 提交于 2020-05-08 08:16:18

这篇文章是我之前一篇文章的兄弟篇,没看过的可以看下面这个。

邓康康:求解稀疏优化问题——半光滑牛顿方法zhuanlan.zhihu.com图标

我们考虑的问题仍然是如下的一般问题:

\min_{x\in\mathbb{R}^n} \{ f(Ax) + g(x)\} \\ \tag{P}

其中 A\in\mathbb{R}^{m\times n} ,并且 n 特别大;

  • f 表示一个凸可微函数,例如 f(y) = \frac{1}{2}\|y-b\|_2^2
  • g 表示一个闭真凸函数,一般为稀疏正则函数,比如 LASSO: g(x) = \|x\|_1 ,Fused LASSO,Clustered LASSO等

通过引入变量 y=\mathcal{A}x ,我们先把(P)转化为约束问题

\begin{split} \min_{x,y}   &  \{ f(Ax) + g(x)\} \\ \mbox{s.t. } & Ax = y \end{split} \tag{P}

于是我们得到(P)的对偶问题为:

\min_{\xi} \{f^*(\xi) + g^*(\mathcal{A}^*\xi) \} \\ \tag{D} 在之前的那篇文章中,我提到了怎么利用增广拉格朗日方法(ALM)去求解对偶问题(D),该方法中的子问题采用的是半光滑牛顿法。 主要idea大概分为三步:

  1. 将原问题转化为对偶问题
  2. 利用增广拉格朗日方法求解对偶问题
  3. 子问题采用半光滑牛顿法

主要代价在于半光滑牛顿法,而由于非光滑函数 g 的稀疏性,导致子问题中的Jacobian矩阵也是稀疏的,进而大大降低了该方法的计算量。本质上,这个方法是一个应用于对偶问题上的增广拉格朗日方法。这篇文章我们换个角度,从原始问题(P)出发去设计算法。

在我的另一篇文章中

邓康康:原始对偶角度下的几类优化方法zhuanlan.zhihu.com图标

里面讲到了:

对偶问题上的临近点方法等价于原问题上的增广拉格朗日方法。

而对偶问题的对偶问题是原问题。所以我们是不是有,

原始问题上的临近点方法等价于对偶问题上的增广拉格朗日方法?

所以这篇文章我们来讲述临近点方法应用到原始问题。参考的是孙老师的两篇文章,见文章末尾的参考文献。


一、邻近算子和Moreau Envelope

首先,我给出一些需要用到的一些定义和性质。

定义

1.临近算子\mbox{prox}_{\mu f}(x) = \arg\min_u f(u) + \frac{1}{2\mu}\|x-u\|^2  \\ 2. Moreau envelope

M^{\mu}_g(x) 是光滑函数,并且它的梯度为: \nabla M^{\mu}_g(x) = \frac{1}{\mu}(x - \mbox{prox}_{\mu g}(x))

  • Moreau分解: \mbox{prox}_{\lambda f}(x) + \lambda \mbox{prox}_{\lambda^{-1}f^*}(x/\lambda) = x.
  • Moreau envelope分解:M_g^{\mu}(x) + M_{g^*}^{1/\mu}(x/\mu) = \frac{1}{2\mu}\|x\|^2

  • 二、临近点方法求解原问题

    首先,临近点方法有如下迭代形式:

    x^{k+1} = \arg\min_{x} \left\{ f(Ax) + g(x) + \frac{1}{2\sigma_k}\|x-x^k\|^2 \right\} \\ \tag{1}

    其中 \sigma_k 表示罚参数。现在关键在于这个子问题怎么求?这要是没有 f 就好了,直接一个临近算子就搞定。 既然不好求,那我们就变成对偶问题去看看。首先对(1)做变量替换,转化为约束问题:

    \begin{split} \min_{x,y} & ~ f(y) + g(x)+\frac{1}{2\sigma_k}\|x-x^k\|^2 \\ \mbox{s.t. } & Ax = y  \end{split}\\ \tag{P.1}

    构建拉格朗日函数:

    \mathcal{L}_k(x,y,\xi) := f(y) + g(x)+\frac{1}{2\sigma_k}\|x-x^k\|^2  + \left<\xi,Ax - y\right>  \\ \tag{2}

    那么其对偶问题为:

    \max_{\xi}\{\psi_k(\xi): = \min_{x,y}\mathcal{L}_k(x,y,\xi) \} \\ \tag{D.1}

    我们最终要求的就是对偶问题(D.1)。需要说明一下,这里的原始问题(P.1)和对偶问题(D.1)是针对临近点方法的子问题而言的。我们来看一下对偶问题(D.1)的目标函数 \psi_k(\xi) 的表达式:

    \begin{split}   \psi_k(\xi)& = \min_{x,y} \mathcal{L}_k(x,y;\xi) \\                    & = \min_{x} \left\{g(x) + \frac{1}{2\sigma_k}\|x - x^k\|^2 + \left<\mathcal{A}^*\xi,x\right> \right\} + \min_y\left\{f(y) - \left< y,\xi \right> \right\} \\   & =g\left(\mbox{prox}_{\sigma_k g}(x^k - \sigma_k\mathcal{A}^*\xi)\right) + \left\|\mbox{prox}_{\sigma_k g}(x^k - \sigma_k\mathcal{A}^*\xi) - x^k + \sigma_k\mathcal{A}^*\xi \right\|^2\\ &~~~~~- \frac{1}{2\sigma}\|x^k -  \sigma_k\mathcal{A}^*\xi\|^2 - f^*(\xi) \\                     \end{split}  \tag{3}

    其中第一部分关于 x 的问题是一个临近算子,最后一个等式就是将 x 的临近算子表达式代入。显然上式看起来很复杂,接下来我们来简化上式:

    \begin{split}   \psi_k(\xi)                     & =  M_g^{\sigma_k}(x^k -  \sigma_k\mathcal{A}^*\xi) - \frac{1}{2\sigma}\|x^k -  \sigma_k\mathcal{A}^*\xi\|^2 - f^*(\xi) \\                    & = -M_{g^*}^{1/\sigma_k}(x^k/\sigma_k -  \mathcal{A}^*\xi)- f^*(\xi) \end{split} \\  \tag{4}

    第一个等式用到了定义2,第二个等式用到了性质3。

    最终我们将对偶问题(D.1)转化为如下问题:

    \begin{split} \xi^{k+1} & = \arg\max_{\xi}\psi(\xi) \\                 & =\arg \min_{\xi}\left\{ f^*(\xi) + M_{g^*}^{1/\sigma_k}(x^k/\sigma_k -  \mathcal{A}^*\xi) \right\}  \end{split}\\

    定义 \Psi_k 为:

    \Psi_k(\xi): =  f^*(\xi) + M_{g^*}^{1/\sigma_k}(x^k/\sigma_k -  \mathcal{A}^*\xi)  \\

    这个函数跟 之后,最终我们是要去得到 x^{k+1} . 在式子(3)中我们知道二者的关系是:

    x^{k+1} = \mbox{prox}_{\sigma_k g}(x_k - \sigma_k \mathcal{A}^* \xi^{k+1}) \\ 综合一下最终的迭代过程为:

    \left\{ \begin{split} \xi^{k+1} & = \arg\min_{\xi} \Psi_k(\xi) \\ x^{k+1} & = \mbox{prox}_{\sigma_k g}(x_k - \sigma_k \mathcal{A}^* \xi^{k+1}) \end{split} \right. \\ \tag{5}

    其中 \xi 问题的求解采用的是半光滑牛顿法,具体的jacbi矩阵怎么求,稀疏性怎么利用参考下面这篇文章

    邓康康:求解稀疏优化问题1——增广拉格朗日方法+半光滑牛顿方法zhuanlan.zhihu.com图标

    三、半光滑牛顿法求解对偶问题(D.1)

    根据上面的推导,我们知道求解对偶问题(D.1)等价于求解

    \xi^{k+1} =\arg\min \{\Psi_k(\xi): =  f^*(\xi) + M_{g^*}^{1/\sigma_k}(x^k/\sigma_k -  A^*\xi)\}  \\

    因为上述问题是个凸问题,我们只要找到梯度等于0的点即可:

    f 是个强凸函数,所以其共轭 f^* 是光滑的,再结合性质1,我们知道 \Psi 是一个光滑函数,其梯度表达式为:

    \[ \begin{split} \nabla \Psi_k(\xi) & = \nabla f^*(\xi)- \sigma_k A\left[  \frac{1}{\sigma_k}x^k - A^T\xi   - \mbox{prox}_{g^*/\sigma_k}(x^k/\sigma_k-A^T\xi)\right]\\  & = \nabla f^*(\xi) - A\mbox{prox}_{\sigma_k g}(x^k - \sigma_k A^T \xi) \end{split} \]

    第一个等式用到了性质1,第二个等式用到了性质2。这里说一下为什么是半光滑牛顿法,因为

    虽然函数光滑,但临近算子的存在导致这个函数的梯度不是光滑的。

    有了梯度之后,我们来求解其广义Jacobian矩阵。

    \partial^2 \Psi_k(\xi) = \nabla^2 f^*(\xi) - \sigma_kA\partial \mbox{prox}_{\sigma_k g}(x^k - \sigma_k A^T \xi)A^T \\\tag{6}

    第一部分, f^* 通常很简单,比如二范数的平方。因此求二阶导也不需要什么计算量。关键的地方在于计算后面这部分。当 g 是稀疏正则的时候,我们发现它的临近算子的导数通常是稀疏的。举例1范数正则,当 g(x) = \lambda \|x\|_1,其临近算子的导数 \partial \mbox{prox}_{\sigma g}(x) 是一个对角矩阵,且对角元为:

    \left[\partial \mbox{prox}_{\sigma g}(x)\right]_{ii} = \left\{ \begin{split} 1, &~ if ~|x_i|>\sigma \lambda \\   [0,1]  & ~if ~x_i=\sigma \lambda \\ [-1,0]  & ~if ~-x_i=\sigma \lambda \\  0,& ~|x_i|<\sigma \lambda \end{split} \right.   \\\tag{7}

    这样的话,(8)的后面这部分,我们只需要计算由非零元对应矩阵 A 的列构成的子矩阵相乘即可,当非零元较少的时候,这个计算量是很小的。

    最后我们给出半光滑牛顿法的迭代过程:

    P^t\eta^t = -\nabla \Psi_k(\xi^t),~~  \xi^{t+1} = \xi^t + \eta^t\\\tag{8}

    其中 P^t\in \partial^2 \Psi_k(\xi)

    半光滑牛顿法迭代完之后,令 \xi^{k+1} = \xi^t .这样就完成了临近点方法的第k次迭代。

    再说一下:(5)是我们的外迭代,也就是临近点方法求解原问题。而(8)是用半光滑牛顿法求解(5)中的第一个子问题。Over!





    二、总结

    最后梳理下这篇文章的idea:

    1. 临近点方法求解原问题
    2. 将子问题转化到对偶形式
    3. 半光滑牛顿法求解对偶问题
    • 在之前那篇文章中,增广拉格朗日方法中的罚参数就对应于这里临近点方法的罚参数。二者的迭代是一样的,只不过在参数的选择和收敛性分析方面会有不同。
    • 不同角度理解问题,得到不同的方法,虽然本质上是一样的,但由此带来的延伸就不一样了,在增广拉格朗日方法和临近点方法上的改进可以完全不同。

    欢迎关注我的专栏

    最优化理论和一阶方法zhuanlan.zhihu.com图标


    详细内容和理论证明可以看孙德锋老师主页:

    知乎 - 安全中心www.polyu.edu.hk



    参考文献

    [1] Zhang Y, Zhang N, Sun D, et al. A Proximal Point Dual Newton Algorithm for Solving Group Graphical Lasso Problems[J]. arXiv preprint arXiv:1906.04647, 2019.

    [2] Lin M, Sun D, Toh K C, et al. A dual Newton based preconditioned proximal point algorithm for exclusive lasso models[J]. arXiv preprint arXiv:1902.00151, 2019.

    易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
    该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!