[BetterExplained] 拉格朗日乘数法
本文主要参考[1].
拉格朗日乘数法解决的问题是:在满足约束g1(p)=0, g2(p)=0, …, gM(p)=0的情况下,找到的极大或极小值点。
当然,一个简单的做法是首先求解所有约束构成的方程组,然后代换回f(p)中去。我现在暂时还看不出这种做法的好处。
先看看拉格朗日乘数法到底是什么。
1. 在任意一个点,都存在某些方向,沿着这些方向运动,f的取值不变。我们定义这些方向的集合为{v_L}。任意v_L,都有。所以v_L垂直于f的梯度,假设仅包含f的梯度这唯一一个向量的空间为F。
2. 然后,在任意一个点p,对于g1(p)=0, g2(p)=0, …, gM(p)=0这样的约束条件,总存在着某些方向,沿着这些方向运动极短的距离,新点仍然满足约束条件,我们定义这些方向的集合为{v_C}。对于任意v_C,都有, 。所以,v_C垂直于由所有g_i的梯度span出来的空间,假设这个空间为G。
3. 为了保证当前点沿着任意满足约束条件的方向运动,f的值都不变,v_C必须是v_L的子集。
4. 由某个我模糊记的定理,v_C是v_L的子集。v_C由G定义,v_L由F定义,那么F是G的子集。所以。
对于步骤1,一个例子就是,我们要购买一批iphone,总金额y = price * count . 与gradient y垂直的方向,告诉我们在总金额不变的情况下,iphone降价,我们能多买多少台。
对于步骤2,一个例子就是,有一个立方体容器,总体积v = length * width * height,总面积s = 2 * length * width + 2* width * height + 2* length*height, 与gradient v和gradient s同时垂直的方向,告诉我们在保持总体积和总面积不变的情况下,length, width和height的变化方向。
那么拉格朗日乘数法有什么好处呢。我们以求解最大熵为例。
最大化H(p)
约束条件为:
如果使用方程求解法,。然后。
所以,我们知道所有的p_j都相等。
如果使用拉格朗日解法。我们找到p,使得
所以,我们知道所有的p_j都相等。从这个例子看来,拉格朗日解法明显简练一些,主要的问题在于,解方程之后带入待优化函数中,往往把原函数变得极端复杂。