深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT條件

from:https://blog.csdn.net/xianlingmao/article/details/7919597

在求取有約束條件的優化問題時,拉格朗日乘子法(Lagrange Multiplier) 和KKT條件是非常重要的兩個求取方法,對于等式約束的優化問題,可以應用拉格朗日乘子法去求取最優值;如果含有不等式約束,可以應用KKT條件去求取。當然,這兩個方法求得的結果只是必要條件,只有當是凸函數的情況下,才能保證是充分必要條件。KKT條件是拉格朗日乘子法的泛化。之前學習的時候,只知道直接應用兩個方法,但是卻不知道為什么拉格朗日乘子法(Lagrange Multiplier) 和KKT條件能夠起作用,為什么要這樣去求取最優值呢?

本文將首先把什么是拉格朗日乘子法(Lagrange Multiplier) 和KKT條件敘述一下;然后開始分別談談為什么要這樣求最優值。

一.?拉格朗日乘子法(Lagrange Multiplier) 和KKT條件

通常我們需要求解的最優化問題有如下幾類:

(i) 無約束優化問題,可以寫為:

??????????????????????????????????????min f(x); ?

(ii) 有等式約束的優化問題,可以寫為:

???????????????????????????????????????min f(x),?

????????????????????????????????????????????s.t. h_i(x) = 0; i =1, ..., n?

(iii) 有不等式約束的優化問題,可以寫為:

??????????????????????????????????????min f(x),?

????????????????????????????????????????????s.t. g_i(x) <= 0; i =1, ..., n

??????????????????????????????????????????????????h_j(x) = 0; j =1, ..., m

對于第(i)類的優化問題,常常使用的方法就是Fermat定理,即使用求取f(x)的導數,然后令其為零,可以求得候選最優值,再在這些候選值中驗證;如果是凸函數,可以保證是最優解。

對于第(ii)類的優化問題,常常使用的方法就是拉格朗日乘子法(Lagrange Multiplier) ,即把等式約束h_i(x)用一個系數與f(x)寫為一個式子,稱為拉格朗日函數,而系數稱為拉格朗日乘子。通過拉格朗日函數對各個變量求導,令其為零,可以求得候選值集合,然后驗證求得最優值。

對于第(iii)類的優化問題,常常使用的方法就是KKT條件。同樣地,我們把所有的等式、不等式約束與f(x)寫為一個式子,也叫拉格朗日函數,系數也稱拉格朗日乘子,通過一些條件,可以求出最優值的必要條件,這個條件稱為KKT條件。

(a)?拉格朗日乘子法(Lagrange Multiplier)

對于等式約束,我們可以通過一個拉格朗日系數a 把等式約束和目標函數組合成為一個式子L(a, x) = f(x) + a*h(x), 這里把a和h(x)視為向量形式,a是橫向量,h(x)為列向量,之所以這么寫,完全是因為csdn很難寫數學公式,只能將就了.....。

然后求取最優值,可以通過對L(a,x)對各個參數求導取零,聯立等式進行求取,這個在高等數學里面有講,但是沒有講為什么這么做就可以,在后面,將簡要介紹其思想。

(b)?KKT條件

對于含有不等式約束的優化問題,如何求取最優值呢?常用的方法是KKT條件,同樣地,把所有的不等式約束、等式約束和目標函數全部寫為一個式子L(a, b, x)= f(x) + a*g(x)+b*h(x),KKT條件是說最優值必須滿足以下條件:

1. L(a, b, x)對x求導為零;

2. h(x) =0;

3. a*g(x) = 0;

求取這三個等式之后就能得到候選最優值。其中第三個式子非常有趣,因為g(x)<=0,如果要滿足這個等式,必須a=0或者g(x)=0. 這是SVM的很多重要性質的來源,如支持向量的概念。

二. 為什么拉格朗日乘子法(Lagrange Multiplier) 和KKT條件能夠得到最優值?

為什么要這么求能得到最優值?先說拉格朗日乘子法,設想我們的目標函數z = f(x), x是向量, z取不同的值,相當于可以投影在x構成的平面(曲面)上,即成為等高線,如下圖,目標函數是f(x, y),這里x是標量,虛線是等高線,現在假設我們的約束g(x)=0,x是向量,在x構成的平面或者曲面上是一條曲線,假設g(x)與等高線相交,交點就是同時滿足等式約束條件和目標函數的可行域的值,但肯定不是最優值,因為相交意味著肯定還存在其它的等高線在該條等高線的內部或者外部,使得新的等高線與目標函數的交點的值更大或者更小,只有到等高線與目標函數的曲線相切的時候,可能取得最優值,如下圖所示,即等高線和目標函數的曲線在該點的法向量必須有相同方向,所以最優值必須滿足:f(x)的梯度 = a* g(x)的梯度,a是常數,表示左右兩邊同向。這個等式就是L(a,x)對參數求導的結果。(上述描述,我不知道描述清楚沒,如果與我物理位置很近的話,直接找我,我當面講好理解一些,注:下圖來自wiki)。

而KKT條件是滿足強對偶條件的優化問題的必要條件,可以這樣理解:我們要求min f(x), L(a, b, x) = f(x) + a*g(x) + b*h(x),a>=0,我們可以把f(x)寫為:max_{a,b} L(a,b,x),為什么呢?因為h(x)=0, g(x)<=0,現在是取L(a,b,x)的最大值,a*g(x)是<=0,所以L(a,b,x)只有在a*g(x) = 0的情況下才能取得最大值,否則,就不滿足約束條件,因此max_{a,b} L(a,b,x)在滿足約束條件的情況下就是f(x),因此我們的目標函數可以寫為 min_x max_{a,b} L(a,b,x)。如果用對偶表達式:?max_{a,b}?min_x ?L(a,b,x),由于我們的優化是滿足強對偶的(強對偶就是說對偶式子的最優值是等于原問題的最優值的),所以在取得最優值x0的條件下,它滿足 f(x0) =?max_{a,b}?min_x ?L(a,b,x) =?min_x max_{a,b} L(a,b,x) =f(x0),我們來看看中間兩個式子發生了什么事情:

?f(x0) =?max_{a,b}?min_x ?L(a,b,x) =??max_{a,b}?min_x f(x) + a*g(x) + b*h(x) =??max_{a,b} f(x0)+a*g(x0)+b*h(x0) = f(x0)

可以看到上述加黑的地方本質上是說?min_x?f(x) + a*g(x) + b*h(x) 在x0取得了最小值,用fermat定理,即是說對于函數?f(x) + a*g(x) + b*h(x),求取導數要等于零,即

f(x)的梯度+a*g(x)的梯度+ b*h(x)的梯度 = 0

這就是kkt條件中第一個條件:L(a, b, x)對x求導為零。

而之前說明過,a*g(x) = 0,這時kkt條件的第3個條件,當然已知的條件h(x)=0必須被滿足,所有上述說明,滿足強對偶條件的優化問題的最優值都必須滿足KKT條件,即上述說明的三個條件。可以把KKT條件視為是拉格朗日乘子法的泛化。
---------------------?
作者:xianlingmao?
來源:CSDN?
原文:https://blog.csdn.net/xianlingmao/article/details/7919597?utm_source=copy?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458133.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458133.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458133.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android一些若干回調測試

1.activity&#xff1a;onAttachedToWindow在onResume后回調 2.onCreate和onResume調用間隔為29ms, onAttachedToWindow和OnResume相差11ms, viewTreeObserver:OnGloballayout和onAttachedtoWindow相差19ms 注:以上的測試時間間隔不能保證精確相同&#xff0c;但是可以從中看出…

Kinect深度圖與攝像頭RGB的標定與配準(轉載文章)

作者原文地址&#xff1a;http://blog.csdn.net/aichipmunk/article/details/9264703 自從有了Kinect&#xff0c;根據深度圖提取前景就非常方便了。因此出現了很多虛擬現實、視頻融合等應用。但是&#xff0c;Kinect自身的RGB攝像頭分辨率有限&#xff0c;清晰度也不及一些專業…

臺北到淡水版Firefox無法播放視頻

臺北到淡水版的Firefox所有的視頻都無法播放&#xff0c;禁用了各種插件也還是沒法播放&#xff0c;最后才確定是SWF的問題&#xff0c;大家有同樣問題的&#xff0c;可以下載我的放到SWF文件夾下&#xff0c;目錄結構如下圖&#xff1a; ?Firefox的SWF下載地址1 ?Firefox的S…

最詳細、最完整的相機標定講解

相機標定詳解 最近做項目要用到標定&#xff0c;因為是小白&#xff0c;很多東西都不懂&#xff0c;于是查了一堆的博客&#xff0c;但沒有一個博客能讓我完全能看明白整個過程&#xff0c;絕大多數都講的不全面&#xff0c;因此自己總結了一篇博客&#xff0c;給自己理一下思…

時間日志和缺陷日志

項目計劃總結&#xff1a; 日期&&任務 聽課 編寫程序 閱讀相關書籍 網上查找資料 日總計 周一 2 2 1 1 6 周二 2 1 3 周三 1 2 2 5 周四 2 2 1 5 周五 4 1 1 6 周六 3 1 1 4 周日 4 2 2 周總計 4 …

卷積與反卷積動圖

各種卷積與反卷積動態圖 反卷積: 詳細文字鏈接&#xff1a;https://www.zhihu.com/question/43609045/answer/132235276(該鏈接中并沒有下面的動態圖) Deconvolution大致可以分為以下幾個方面&#xff1a;&#xff08;1&#xff09;unsupervised learning&#xff0c;其實就…

ASP.NET-權限管理五張表

ASP.NET 權限管理五張表權限管理的表&#xff08;5張表&#xff09;每個表里面必有的一些信息序號名稱 字段 類型 主鍵默認值是否為空備注1 用戶ID ID INT 是 null 否用戶ID2用戶名稱UserNamevarchar(100)否null否用戶名稱3用戶密碼UserPasswordvarchar(20)否null否用…

神經網絡CNN解釋

from&#xff1a;https://blog.csdn.net/ruiyiin/article/details/77113973 這篇文章原地址為An Intuitive Explanation of Convolutional Neural Networks&#xff0c;卷積神經網絡的講解非常通俗易懂。 什么是卷積神經網絡&#xff1f;為什么它們很重要&#xff1f; 卷積神經…

線條的屬性

1.lineCap"butt“ /"round" /"square" 只能用于線段的結尾處 不能用于線段的銜接處 2.lineJoin:線條與線條相交時的形態 miter(default)/ bevel (斜接&#xff09;/round&#xff08;圓接&#xff09; 1.后繪制的圖形&#xff0c;如果與前繪制的圖形區…

pcl里面使用KdTree來搜索

from:https://blog.csdn.net/qq_25491201/article/details/51135054 下面這個教程我們將學會怎么用KdTree找一個特殊點附近的K個最近鄰&#xff0c;然后我們也將復習怎么通過一個特殊的半徑來找里面所有的近鄰。 一個k-d樹&#xff0c;或者k維的樹是一個計算機科學里面的數據…

Linux英文全稱

su&#xff1a;Swith user 切換用戶&#xff0c;切換到root用戶cat: Concatenate 串聯uname: Unix name 系統名稱df: Disk free 空余硬盤du: Disk usage 硬盤使用率chown: Change owner 改變所有者chgrp: Change group 改變用戶組ps&#xff1a;Process Status 進程狀態ta…

caffe caffe.cpp 程序入口分析

from&#xff1a;https://blog.csdn.net/u014114990/article/details/47747025 caffe.cpp 程序入口分析&#xff0c; &#xff08;1&#xff09;main()函數中&#xff0c;輸入的train&#xff0c;test&#xff0c;device_query&#xff0c;time。 通過下面兩行進入程序。 …

php文件加密

1.在線加密 網址&#xff1a;http://www.phpjm.net/encode.html 本人測試過還可以&#xff0c;就是純加密&#xff0c;沒有解密。 轉載于:https://www.cnblogs.com/wuheng1991/p/5332617.html

樹莓派3 編譯驅動

分為本地編譯和交叉編譯&#xff0c;主要是Makefile的寫法&#xff1a; 本地編譯&#xff1a; obj-m : bcm2835-i2s.o KDIR : /lib/modules/$(shell uname -r)/build PWD : $(shell pwd) all:make -C $(KDIR) M$(PWD) modules clean:rm *.o *.ko *.mod.c modules.order Module.…

caffe common 程序分析 類中定義類

caffe中 有 common.hpp 和common.cpp // The main singleton of Caffe class and encapsulates the boost and CUDA random number // generation function, providing a unified interface. caffe的singleton 類&#xff0c; 封裝boost和cuda等操作。 提供一個統一的接口&am…

相機標定究竟在標定什么?

https://mp.weixin.qq.com/s/sWpVgwXmPvIEbObXvo1HRg

SpringMVC+Shiro權限管理

SpringMVCShiro權限管理 什么是權限呢&#xff1f;舉個簡單的例子&#xff1a; 我有一個論壇&#xff0c;注冊的用戶分為normal用戶&#xff0c;manager用戶。對論壇的帖子的操作有這些&#xff1a;添加&#xff0c;刪除&#xff0c;更新&#xff0c;查看&#xff0c;回復我們規…

Caffe源碼解析1:Blob

from:https://www.cnblogs.com/louyihang-loves-baiyan/p/5149628.html 轉載請注明出處&#xff0c;樓燚(y)航的blog&#xff0c;http://www.cnblogs.com/louyihang-loves-baiyan/ 首先看到的是Blob這個類&#xff0c;Blob是作為Caffe中數據流通的一個基本類&#xff0c;網絡…

學后感

今天上了構建之法&#xff0c;我加深了對軟件工程的了解&#xff0c;也明白了單元測試和回歸測試對軟件開發的重要性&#xff0c;然而在軟件開發的過程中&#xff0c; 一個團隊是需要一定的流程來管理開發活動&#xff0c;每個工程師在軟件生命周期所做的工作也應該有一個流程&…

Caffe源碼解析2:SycedMem

from:https://www.cnblogs.com/louyihang-loves-baiyan/p/5150554.html 轉載請注明出處&#xff0c;樓燚(y)航的blog&#xff0c;http://www.cnblogs.com/louyihang loves baiyan/ 看到SyncedMem就知道&#xff0c;這是在做內存同步的操作。這類個類的代碼比較少&#xff0c;…