优化f(x)/g(x)

前一阵Yair Weiss的学生Elad到组里访问,讲了他最近的研究,是关于f(x)/g(x)形式的优化问题。方法非常简单,道理也易懂,在这里记一下。

f(x)/g(x)形式的优化问题,f(x)往往是目标函数,而g(x)类似于约束项。典型的例子比如图像分割用的normalized cut,其中f(x)是分割的花费函数,g(x)类似于分割块的大小,要最小化f(x)/g(x)就是要找到f(x)和g(x)的平衡点,既要花费小,也要分割块够大。Linear Discriminant Analysis的目标函数也类似,f(x)衡量两个类之间分得多开,g(x)衡量每个类的大小。

想直接最小化f(x)/g(x)往往不容易,因为这个除法带来很多麻烦。连续优化问题还可以求导,离散优化问题有这么个除法基本上就束手无策了。

Elad的方法就针对f(x)/g(x)将其转换为\(f(x)-\lambda g(x)\)的形式,避免了除法,因而可以解决一些困难。这个转换中有一个假设g(x)>0。上面举的两个应用例子都满足这个假设,所以算是一个很弱的假设了。

具体而言,设\(\min_x \frac{f(x)}{g(x)}=\lambda_0\),且最优解在\(x_0\)处取得,即\(\frac{f(x_0)}{g(x_0)}=\lambda_0\),亦即\(f(x_0)-\lambda g(x_0)=0\)。一个显然的结论是,对于任意x,对应的\(\frac{f(x)}{g(x)}\)都是\(\lambda_0\)的一个上界。

现考虑另一任意的\(\lambda\)及优化问题\(\min_x \{f(x)-\lambda g(x)\}\),设最优解在\(x^*\)处取得,则:

1. 若最优值大于零,即\(f(x^*)-\lambda g(x^*) > 0\),则有

$$f(x_0)-\lambda g(x_0)\ge \min_x \{f(x)-\lambda g(x)\}=f(x^*)-\lambda g(x^*) > 0$$

从而

$$\lambda_0 = \frac{f(x_0)}{g(x_0)}>\lambda$$

即\(\lambda\)是\(\lambda_0\)的一个下界。

2. 若最优值小于零,即\(f(x^*)-\lambda g(x^*) < 0\),则有

$$\frac{f(x_0)}{g(x_0)}=\min_x \frac{f(x)}{g(x)}\le \frac{f(x^*)}{g(x^*)}< \lambda$$

从而\(\lambda\)成为\(\lambda_0\)的一个上界。不过这个结论意义不大,因为\(\frac{f(x^*)}{g(x^*)}\)本身已经是\(\lambda_0\)的一个上界了。

3. 若最优值等于零,即\(f(x^*)-\lambda g(x^*) = 0\),则有

$$f(x_0)-\lambda g(x_0) \ge f(x^*)-\lambda g(x^*) = 0$$

从而

$$\lambda_0 = \frac{f(x_0)}{g(x_0)}\ge \lambda$$

另一方面

$$\lambda_0 = \frac{f(x_0)}{g(x_0)}=\min_x \frac{f(x)}{g(x)}\le \frac{f(x^*)}{g(x^*)}=\lambda$$

将两个不等式结合起来,得到\(\lambda_0=\lambda\)。

上面第三种情况,也是最幸运的一种情况,即如果\(\lambda\)猜得准,\(\min_x \{f(x)-\lambda g(x)\}\)解出来最优值等于零,则\(\lambda\)即为原优化问题的最优值\(\lambda = \min_x \frac{f(x)}{g(x)}\),而且\(\min_x \{f(x)-\lambda g(x)\}\)的最优解即为原问题的一个最优解。

因此,原问题\(\min_x \frac{f(x)}{g(x)}\)可以转化为求一个\(\lambda\),使得\(\min_x \{f(x)-\lambda g(x)\}=0\),这就成功绕过了除法带来的困难。转化后的问题是一个只有一个变量\(\lambda\)的问题,可以用二分搜索来解。

算法从一个初始的\(\lambda\)估计区间开始,每一步缩小上界和下界,直至达到指定精度或者找到精确解。至于初始的上界,可以用任何x算得。而初始的下界可以通过观察得出,比如对于很多问题f(x)>0,那么0就可以作为一个下界。

算法的每一步取\(\lambda\)为区间的中值,并求解\(\min_x \{f(x)-\lambda g(x)\}\)。若最优值大于零,则该\(\lambda\)为一个新的下界。若最优值等于零,则\(\lambda\)即为最优解,可以直接返回。若最优值小于零,则\(\lambda\)或\(f(x^*)/g(x^*)\)为一个新的上界。这样二分搜索可以快速找到最优\(\lambda\),从而得到原问题的解。

离散优化问题中,可能对于某些\(\lambda\),解\(\min_x \{f(x)-\lambda g(x)\}\)得到的\(x^*\)已经是原问题的最优解,但解得最优值不为零,因为可能有很多\(\lambda\)对应同一个\(x^*\)。这时只需要进一步测试一下\(\lambda'=\frac{f(x^*)}{g(x^*)}\),解\(\min_x \{f(x)-\lambda' g(x)\}\)验证是否为零即可判别,从而可以省去后面的搜索。

到此,我们似乎很完美的解决了除式f(x)/g(x)优化中的困难问题。不过,对于很多问题来说\(\min_x \{f(x)-\lambda g(x)\}\)也并不容易求解,但总的来讲这个转化方法还是解决了很多困难,因为\(f(x)-\lambda g(x)\)大多比\(f(x)/g(x)\)更容易求解。

posted on 2014-03-31 09:44  alexajia  阅读(585)  评论(0编辑  收藏  举报

导航