首先爲了便於理解,補充梯度方向這一律念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 條件雖然從理論上給出了極值的必要條件,可是通常實際解的時候直接方程也是很困難的(特別是約束不少的時候),通常也會採用罰函數法等數值方法。
爲了更好的解決這個優化問題,數學家還找到了它的對偶問題。找一個優化問題的對偶問題的通常由於是對偶問題比原問題更好解決,而且對偶問題的解和原問題是同樣的。上面的拉格朗日函數也能夠看作原問題的對偶問題。