优化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))更容易求解。

原文地址:https://www.cnblogs.com/alexdeblog/p/3635022.html