凸优化学习-(二十八)有约束优化算法——拉格朗日法

凸优化学习

拉格朗日法用得不多,但需要深入理解,方便学习另一种使用很广的算法。

学习笔记

一、拉格朗日法( lagrangian method \text{lagrangian method} lagrangian method

前面我们讲到,所有的方法都是在解一个非线性的 KKT \text{KKT} KKT条件,一般问题形如:
min ⁡ f ( x ) s.t. A x − b = 0 \begin{aligned} \min&& f(x)&\\ \text{s.t.} &&\textbf Ax-b&=0 \end{aligned} mins.t.f(x)Axb=0 KKT \text{KKT} KKT条件为:
{ A x ∗ − b = 0 ∇ f ( x ∗ ) + A T ∑ i = 1 p v i ∗ = ∇ f ( x ∗ ) + A T v ∗ = 0 \begin{cases} \textbf Ax^*-b=0\\ \nabla f(x^*)+\textbf A^T \sum\limits_{i=1}^pv^*_i=\nabla f(x^*)+\textbf A^T v^*=0 \end{cases} Axb=0f(x)+ATi=1pvi=f(x)+ATv=0
前面说过,解这么个非线性方程组实在是太难了,牛顿法用二阶泰勒展开构造了一个等价问题,那拉格朗日法其实也是一样的,我们用迭代的方式把 x ∗ , v ∗ x^*,v^* x,v即原问题和对偶问题的最优解解出来:
x k + 1 = x k − α k ( ∇ f ( x k ) + A T v k ) v k + 1 = v k + α k ( A x k − b ) \begin{aligned} x^{k+1}&=x^k-\alpha^k\big(\nabla f(x^k)+\textbf A^T v^k\big)\\ v^{k+1}&=v^k+\alpha^k(\textbf A x^k-b) \end{aligned} xk+1vk+1=xkαk(f(xk)+ATvk)=vk+αk(Axkb)
其中, α \alpha α一般为一个递增序列。

这什么意思?你可以看看当 x k , v k x^k,v^k xk,vk不更新时,即 x k + 1 = x k , v k + 1 = v k x^{k+1}=x^k,v^{k+1}=v^k xk+1=xk,vk+1=vk在什么条件下成立?不就是 KKT \text{KKT} KKT条件吗?这样我们就得到了当 KKT \text{KKT} KKT条件成立时的 x ∗ , v ∗ x^*,v^* x,v

二、拉格朗日法的推导

对于问题:
min ⁡ f ( x ) s.t. A x − b = 0 \begin{aligned} \min&& f(x)&\\ \text{s.t.} &&\textbf Ax-b&=0 \end{aligned} mins.t.f(x)Axb=0
其拉格朗日函数为:
l ( x , v ) = f ( x ) + v T ( A x − b ) l(x,v)=f(x)+v^T(\textbf Ax-b) l(x,v)=f(x)+vT(Axb)
在之前我们讲鞍点的时候提到过:
d ∗ = g ( v ∗ ) = sup ⁡ v inf ⁡ x ∈ D l ( x , v ) p ∗ = f ( x ∗ ) = inf ⁡ x ∈ D sup ⁡ v l ( x , v ) d^*=g(v^*)=\sup_v\inf_{x\in D}l(x,v)\\ p^*=f(x^*)=\inf_{x\in D}\sup_v l(x,v) d=g(v)=vsupxDinfl(x,v)p=f(x)=xDinfvsupl(x,v)
分析一下上面两个式子,不难得到:
v ∗ = arg ⁡ sup ⁡ v l ( x ∗ , v ) x ∗ = arg ⁡ inf ⁡ x ∈ D l ( x , v ∗ ) v^*=\arg\sup_{v}l(x^*,v)\\ x^*=\arg\inf_{x\in D}l(x,v^*) v=argvsupl(x,v)x=argxDinfl(x,v)
这是一个很好的性质,这说明了当 x ∗ , v ∗ x^*,v^* x,v我们知道一个就可以解出来另外一个,但是一开始我们哪个都不知道啊,这不是死锁了么。。。
其实一开始得不到最优解是很正常的,我们可以分步求解,最妙的是这里有两条性质,我们可以稍作改动把它改成迭代的(有种左脚右脚轮着踩飞上天的感觉)。
首先我们分析一下,要求 x ∗ x^* x,怎么求?一步到位又不行,那就梯度下降法,拉格朗日函数对 x x x的一阶偏导为:
∇ f ( x ) + A T v ∗ \nabla f(x)+\textbf A^Tv^* f(x)+ATv
这样我们就求出了方向,那么可以得到:
x k + 1 = x k − α k ( ∇ f ( x k ) + A T v ∗ ) x^{k+1}=x^k-\alpha^k\big(\nabla f(x^k)+\textbf A^T v^*\big) xk+1=xkαk(f(xk)+ATv)
但是这里有个问题, v ∗ v^* v我们不知道啊!那么巧妙的就来了,我们解 v ∗ v^* v也是分步迭代求的,同理可得:
v k + 1 = v k + α k ( A x ∗ − b ) v^{k+1}=v^k+\alpha^k(\textbf A x^*-b) vk+1=vk+αk(Axb)
这么一看 x ∗ x^* x不是也不知道吗?这里就是拉格朗日法的核心思想了,即将 x ∗ , v ∗ x^*,v^* x,v换成 x k , v k x^k,v^k xk,vk
x k + 1 = x k − α k ( ∇ f ( x k ) + A T v k ) v k + 1 = v k + α k ( A x k − b ) \begin{aligned} x^{k+1}&=x^k-\alpha^k\big(\nabla f(x^k)+\textbf A^T v^k\big)\\ v^{k+1}&=v^k+\alpha^k(\textbf A x^k-b) \end{aligned} xk+1vk+1=xkαk(f(xk)+ATvk)=vk+αk(Axkb)
意思就是由于我们并不能一下解出 x ∗ , v ∗ x^*,v^* x,v,那么我们就采用迭代的方法(梯度下降法),在每一步的时候我们都要得到一个 x k + 1 , v k + 1 x^{k+1},v^{k+1} xk+1,vk+1,为了得到 x k + 1 , v k + 1 x^{k+1},v^{k+1} xk+1,vk+1,我们用 x k , v k x^{k},v^{k} xk,vk替换 x ∗ , v ∗ x^{*},v^{*} x,v,这样当然是不准确的,是有损失的。但是随着迭代的进行, x k , v k x^{k},v^{k} xk,vk终将逼近 x ∗ , v ∗ x^{*},v^{*} x,v,那么我们得到的 x k + 1 , v k + 1 x^{k+1},v^{k+1} xk+1,vk+1也将逼近 x ∗ , v ∗ x^{*},v^{*} x,v

拉格朗日法的本质是用梯度下降法解鞍点。

个人思考

其实算法后的思想才是值得深究的,很多问题我们一开始解不出来,我们就可以求等价问题或者迭代去求,这些都是很有价值的想法。

纸质笔记

凸优化学习-(二十八)有约束优化算法——拉格朗日法_第1张图片
凸优化学习-(二十八)有约束优化算法——拉格朗日法_第2张图片

你可能感兴趣的:(#,凸优化)