首先为了便于理解,补充梯度方向这一律念html
借鉴网址:https://baijiahao.baidu.com/s?id=1612682474674468619&wfr=spider&for=pc算法
首先咱们来了解一下梯度的方向为何会与等高线的切线方向垂直ide
图1. 梯度介绍图函数
假设咱们有几何上的一个曲面S,曲面被平面c截出的曲线L的方程为:z = f(x,y), z = c优化
该曲线L在xy轴面上的投影为一条平面曲线Q,它在xy平面直角坐标系中的方程为f(x, y) = c,该曲线Q为函数z = f(x, y)的等高线。spa
咱们对f(x, y) = c的两边分别对x求导,故3d
等高线f(x, y) = c上任一点的切线斜率为dy/dx,等高线上任意一点(x, y)处的法线的斜率为(切线与法线斜率乘积为-1)xml
又由于梯度为:htm
故梯度的方向为:blog
即梯度的方向和法线斜率相同,即梯度的方向与等高线切线方向垂直。
以后咱们正式进入KKT
借鉴网址为:http://www.javashuo.com/article/p-bngkhgmm-ht.html
对于简单的可求导的函数,咱们直接求导,令导数为零,并加以判断(防止x^3导数为0的零并不是是极值点的状况),便可求出极值点。
可是对于一些复杂问题,咱们没法直接求导得出,为此即引入了梯度降低法、牛顿法和坐标降低法之类的数值迭代算法。
对于该类问题,咱们能够抽象为在一个山群中,选取一个起始点,而后从该点开始,不断地向最低点靠近,直至到达最低为止。为此引伸出了以下方法
1)梯度降低法
即依靠梯度肯定降低方法,步骤以下
1.随机选取X0
2.获得函数在X0的梯度,而后从X0向前走一步,计算式为
3.重复步骤2,直到梯度接近0(小于以前设定的很小的数),或者达到指定的跌代上限
该图即如图1所示
2)坐标降低法
上述问题还能够这样解决,即在第2步中,首先固定x,将其做为常数,求导获得最优势,以后固定y,将y看作一个常数,再次求导。这样每次只优化一个变量的方法即坐标降低法。
3)有等式约束的问题
进一步就是有等式约束的问题
即
此时该问题不能仅仅由上述的梯度和求导得出,由于此时咱们要求求知足约束的等值线和约束函数线的交点。
带约束的极值(红线为h(x),黑线为f(x,y))
此时咱们能够看出极值点只能在等值线和函数相切的地方取到,由于若是不是相切的地方,则沿着h(x)的图像向前或者后走,都能找到f(x, y)更大或者更小的点,故交点不是极值点,当其相切时,才能报纸极值点。此外,相切的地方h(x)的梯度和f(x, y)的梯度应该是在一条直线上的。(由于在切点上,梯度都与切线垂直)
此时即
求解该方程便可得出最优解。
当有多个等式约束的时候,目标函数的梯度和约束梯度的线性组合在一条直线上就能知足要求:
将原来的约束问题写为:
以后对x和拉姆塔求偏导,让其为0,便可获得解,该函数叫作拉格朗日函数。
(4)对于不等式约束
此时约束条件为:
便可行域变成了阴影区域,能取到极值的地方有两种:
1)仍是在线与等值线相切的地方
2)f(x)的极值点在可行域中
由于若是不是相切,那么一样的,对任意一个在可行域中的点,若是在它附近往里走或者往外走,f(x) 通常都会变大或者变小,因此绝大部分点都不会是极值点。除非这个点恰好在交界处,且和等值线相切;或者这个点在可行域内部,可是自己就是 f(x) 的极值点。
对于第一种状况,不等式约束仍旧是等式约束,对,用拉格朗日乘子法
对于第二种状况,不等式约束就至关于没有,对用拉格朗日乘子法
将两种状况合二为一,第一种状况中,第二种
,故综合能够写为
该条件即为KKT条件,即这个优化问题必定知足该方程组。(不是极值点也可能知足,可是不存在某极值点不知足),即原来的优化问题取得极值点的必要条件,解出来了极值代入验证。
KTT条件并非任何状况都知足的,须要知足一些规范性条件,即要求约束条件的质量不能太差。
KKT 条件虽然从理论上给出了极值的必要条件,可是通常实际解的时候直接方程也是很困难的(特别是约束不少的时候),通常也会采用罚函数法等数值方法。
为了更好的解决这个优化问题,数学家还找到了它的对偶问题。找一个优化问题的对偶问题的通常由于是对偶问题比原问题更好解决,而且对偶问题的解和原问题是同样的。上面的拉格朗日函数也能够看作原问题的对偶问题。