12
$\开始组$

单位单工定义如下:

$$\mathcal{S}=\left\{x\in\mathbb{{R}^{n}}\mid-x\succeq 0,\,\boldsymbol{1}^{T}x=1\right\}$$

单位单纯形上的正交投影定义为:

$$\开始{alignat*}{3}\arg\min_{x}&\quad&\frac{1}{2}\左\|x-y\右\|{2}^{2}\\\文本{subject to}&\quad&x\suckeq 0\\&\quad&\boldsymbol{1}^{T}x=1\结束{alignat*}$$

如何解决这个凸优化问题?

$\端组$
11

3个答案

重置为默认值
7
$\开始组$

单纯形上的投影可以计算如下。
这种情况下的拉格朗日公式如下:

$$左(x,\mu\right)=\frac{1}{2}{\left\|x-y\right\|}^{2}+\mu\left(\boldsymbol{1}^{T}x-1\right)\tag1$$

诀窍是隐式地保留非负约束。
因此,对偶函数如下所示:

\开始{align}g\左(\mu\right)&=\inf_{x\suckeq 0}L\左(x,\mu\right)&&\text{}\\&=\inf_{x\succeq 0}\sum_{i=1}^{n}\left(\frac{1}{2}{\left){x}_{i} -{y}(y)_{i} \右)}^{2}+\mu{x}_{i} \right)-\mu&&\text{组件形式}\tag2\结束{对齐}

利用组件明智的形式,给出了解决方案:

\开始{align}x_i^\ast=\左(y_i-\mu\右)_+\tag3\结束{对齐}

其中,解决方案通过投影包含非负约束${\mathbb{R}}_{+}$

通过找到$\亩$保持约束(注意,因为上面是等式约束,$\亩$可以有任何值,并且不限于非负性美元\lambda$).

目标函数(来自KKT)如下所示:

\开始{align}0=h\左(\mu\右)=\sum_{i=1}^{n}{x}_{i} ^{\ast}-1&=\sum_{i=1}^{n}{\left({y}(y)_{i} -\mu\right)}_{+}-1\tag4\结束{对齐}

以上是分段线性函数$\亩$.

由于函数是连续的,但它是不可微的,因为它的分段性质理论说,我们必须使用无导数的方法来求根。可以使用二分法例如。

函数导数由以下公式给出:

$$\开始{align}\frac{\mathrm{d}}{\mathm{d}\mu}h\左{y}_{i} -\mu\right)}_{+}\\&=\sum_{i=1}^{n}-{\mathbf{1}}_{\left\{{y}(y)_{i} -\mu>0\right\}}\结束{对齐}$$

实际上,可以使用牛顿迭代法求解(因为落入两个截面之间的接合处的概率几乎为零)。

准确/精确解决方案

如果我们查看函数的值$h\left(\mu\right)=\sum_{i=1}^{n}{left({y}(y)_{i} -\mu\right)}_{+}-1$人们可以很容易地推断出计算精确解的方法:

在此处输入图像描述

在上面的参数中$\亩$取向量的值$ {y}_{我}$边缘有附加值(值大于最大值$ {y}(y)_{我}$和最小值的较低值$ {y}(y)_{我}$).
通过迭代这些值,可以很容易地跟踪每边值大于的2个值$ 0 $然后降低$ 0 $(如果其中一个为零,则为$\亩$). 因为它是线性函数,我们有2个点,所以我们可以推断出模型的所有参数$y=a x+b$.比的最佳值$\hat{\mu}=-\frac{b}{a}$.

我编写了MATLAB代码,在数学堆栈交换问题2327504-GitHub.我扩展了该案例的方法美元\总额{x}_{i} =r,\;r>0$(伪半径)。
有一个测试将结果与通过CVX公司.

$\端组$
25
  • $\开始组$ 关于$\mu$的约束由$h\left(\mu\right)=0$给出。我想目标函数不是最清楚的术语:-)。但在上述情况下,这是双重功能的目标功能。 $\端组$
    – 周静文
    评论 2018年4月3日15:47
  • $\开始组$ 是的。你说得对。 $\端组$
    – 周静文
    评论 2018年4月4日13:15
  • $\开始组$ 在我看来,最小化问题归结为找到$\mu$,即$h\left(\mu\right)=0$或$\sum_{i=1}^{n}{left({y}(y)_{i} -\mu\right)}_{+}-1=0$,对吗? $\端组$
    – 阿基拉
    评论 2020年2月28日8:35
  • $\开始组$ 是的。事实上,上述情况就是如此(KKT)。 $\端组$
    – 周静文
    评论 2020年2月28日8:37
  • $\开始组$ 很抱歉,但你的解决方案似乎比非常复杂的要简单得多陈云梅和叶晓静提议的。我可以错过什么吗? $\端组$
    – 阿基拉
    评论 2020年2月28日8:41
4
$\开始组$

Condat[1]的论文对现有算法进行了回顾和比较,并提出了投影到单位单纯形上的新建议。本文列出了这些算法的最坏情况复杂度和经验复杂度,并给出了所有算法的简明伪码。特别是,Condat提出的算法需要O(n)美元$实践中需要时间,而基于排序的方法需要$O(n\log n)$实践时间。我过去已经实现了Condat的算法,并且可以保证它相对于直接基于排序的方法的速度。

[1] 劳伦特·康达特,快速投影到单纯形和$\ell_1美元$.

编辑:康达特在本文中包含了所有算法的C和MATLAB实现:https://lcondat.github.io/software.html

$\端组$
9
  • $\开始组$ 想发布康达算法的代码吗?我认为这对很多人都有帮助。 $\端组$
    – 小O
    评论 2020年4月20日4:16
  • $\开始组$ @littleO谢谢你的建议。我已经包含了一个到Condat网页的链接,其中包含了所有算法的代码。我自己的代码是在Julia的早期版本中,它几乎肯定已经过时了 $\端组$ 评论 2020年4月20日4:24
  • $\开始组$ 我上面的代码也是“log(n)”方法。 $\端组$
    – 周静文
    评论 2020年4月20日6:44
  • 1
    $\开始组$ @Royi我不理解你对“精确/精确解”的解释,但在二分步骤中的每个函数求值都需要大约n$个操作。此外,即使计算$h(\mu)$也需要$\大约n$个操作,所以我不确定$O(\log n)$是否可行 $\端组$ 评论 2020年4月20日6:52
  • 2
    $\开始组$ @罗伊,我猜C代码中包含了论文的结果,而MATLAB代码中只包含了一种简单的基于排序的方法。你可能是对的,他没有与你的确切方法进行比较(可能更快)。对不起,我没有时间深入研究数值比较。康达特似乎(对我来说)对文献进行了公平的数字比较,因为我对他的方法有着良好的经验,所以我只想与社区分享。 $\端组$ 评论 2020年4月20日10:31
$\开始组$

计算准确的这个问题的解决方案可以在投影到单纯形.

$\端组$
5
  • 1
    $\开始组$ 如果能在帖子中总结出关键想法,那将是一件很棒的事情。 $\端组$ 评论 2018年3月21日2:23
  • $\开始组$ @SiongThyeGoh,它基于与我下面的解决方案相同的想法。主要区别在于,他们没有使用牛顿法来找到最优的$\mu$,而是使用了基于向量$y$的排序值的其他技巧。 $\端组$
    – 周静文
    评论 2018年3月21日13:15
  • $\开始组$ 这个想法比那篇论文要古老得多。如果我记得的话,我想是80年代末的JOTA论文。 $\端组$
    – 铜帽子
    评论 2020年2月29日6:25
  • $\开始组$ 我提取了准确的从我上面的方法得到的解决方案。 $\端组$
    – 周静文
    评论 2020年4月14日9:40
  • $\开始组$ 我认为康达特2014年论文中的算法(链接到另一个答案)可能比这个更好。 $\端组$
    – 小O
    评论 2020年4月20日4:21

你必须登录回答这个问题。

不是你想要的答案吗?浏览标记的其他问题.