拉格朗日乘子法

2021-09-01 22:16:54 字數 3893 閱讀 7604

**:

最近在學習 svm 的過程中,遇到關於優化理論中拉格朗日乘子法的知識,本文是根據幾篇文章總結得來的筆記。由於是剛剛接觸,難免存在錯誤,還望指出?。另外,本文不會聊到深層次的數學推導,僅僅是介紹拉格朗日乘子法的內容,應用,以及個人對它的感性理解。

按照維基百科的定義,拉格朗日乘數法是一種尋找多元函式在其變數受到乙個或多個條件的約束時的極值的方法。用數學式子表達為:

簡單理解就是,我們要在滿足g(x,y)=c這個等式的前提下,求f(x,y)函式的最小值(最大值道理相同)。這樣的問題我們在高中的時候就遇到過了,只不過高中時遇到的限制條件g(x,y)=c都比較簡單,一般而言都可以將yx的式子表示出來,然後用變數替換的方法代回f(x,y)求解。但是,如果g(x,y)的形式過於複雜,或者變數太多時,這種方法就失效了。而拉格朗日乘子法就是解決這類問題的通用策略。

乙個約束條件

我們先從只有乙個約束條件的情況入手,看看拉格朗日乘子法到底是怎麼做的。

假設,我們的問題如下:

當然,這個問題比較簡單,直接用g(x,y)解出y再代入f(x,y)也可以求解,但這裡,我們準備用拉格朗日乘子法。

首先我們畫出f(x,y)的影象,這個影象應該是3維的,但為了方便講解,這裡給出它的2維投影:

圖中的紅色圓表示f(x,y),越靠近原點的部分,值越小(表示「谷底」),這些圓又稱為「等高線」,因為同乙個圓代表的函式值相同。

圖中的藍線代表g(x,y),這裡只取g(x,y)=0的部分。

整幅影象可以想象成乙個巨大的山谷,原點是谷底,而我們的任務是在藍線表示的道路上,找到最低的位置。

那要如何找到這個最低點呢?注意,圖中用橙色和黑色標記了兩個點。如果我們走到了橙色這個位置,那麼很明顯,可以發現這個點肯定不是最低的,因為我們可以沿著藍線繼續往內部的圓走,當我們走到黑色這個點時,會發現沒法再往裡面走了,而且,這個時候如果繼續沿藍線走,我們的位置反而公升高了,這時,我們基本可以認為:我們找到了在藍線這個限制條件下的最低點。

那麼橙色這個點和黑色這個點有什麼本質區別呢?拉格朗日觀察到,黑點位置,藍線和圓是相切的,而橙點位置顯然不滿足這個性質。那相切是否是必然的呢?拉格朗日告訴我們,是的,一定是相切的。而這一點,正是拉格朗日乘子法的核心。

梯度

在正式理解拉格朗日乘子法的原理之前,我們要回顧一下梯度的概念。

在數學裡面,梯度指的是函式變化最快的方向。例如:在一元函式f(x)中,梯度只能沿x軸正方向或負方向,而在二元函式f(x,y)中,梯度則是乙個二維向量(∂f/∂x,∂f/∂y)

現在,我們要用到梯度乙個重要的性質:梯度跟函式等高線是垂直的

證明需要用到一點極限的知識。

梯度的數學定義為:∇f=(∂f/∂x,∂f/∂y)。假設δx,δy是兩個極小的變化量,根據全微分的知識,可以得到:

如果(δx,δy)是在等高線方向的增量,那麼f(x+δx,y+δy)≈f(x,y),這意味著∂f/∂x*δx+∂f/∂y*δy=0,換句話說,向量 ∇f 和向量(δx,δy)的內積為 0。所以,梯度和函式的等高線是垂直的。

拉格朗日乘子法的幾何認識

現在,我們來感性地認識一下,為什麼拉格朗日認為相切才能找到最低點(只是感性認識,不新增任何數學推導)。

在橙點這個位置,由於兩條曲線不相切,所以橙線的梯度(上圖橙色箭頭)和藍線的切線(藍色虛線)肯定不垂直。在這種情況下,藍線的兩個切線方向,必定有乙個往函式高處走(與梯度的夾角小於 90 度),有乙個往函式低處走(與梯度的夾角大於 90 度)。所以,在兩條曲線相交時,我們肯定不在最低點或最高點的位置。

那麼,反過來想,如果兩條曲線相切(上圖),那麼在切點這個位置,藍線的切線和橙線的梯度是垂直的,這個時候,藍線的切線方向都指向橙線的等高線方向。換句話說,在切點的位置沿藍線移動很小的一步,都相當於在橙線的等高線上移動,這個時候,可以認為函式值已經趨於穩定了。所以,我們認為這個點的值「可能」是最低(高)的(之後解釋為什麼是「可能「。另外,個人覺得拉格朗日乘子法最好用反證法從不相切的點入手思考,從相切的點思考總有點彆扭)。

既然相切可以幫助我們找到最低點,那麼接下來我們要研究的便是如何利用相切來找出最低點。

相切,意味著在切點的位置,兩條曲線的等高線方向是平行的,考慮到梯度與等高線垂直, 我們可以用兩條曲線的梯度平行來求出切點位置(最低點)。

因此,根據梯度平行,我們能夠得到乙個方程組:∇f=λ∇g,其中λ表示乙個標量,因為我們雖然能保證兩個梯度平行,但不能保證它們的長度一樣(或者方向相同)。在高維函式中,∇f表示的是函式在各個自變數方向的偏導。對於上面的例子,我們可以求出函式fg的偏導,再根據方程組:

求出切點。由於總共有三個方程和三個未知數,一般都能找到解(也可能存在多個解或無解的情況,之後會簡單討論)。

在實際求解時,人們會使用乙個統一的拉格朗日函式:l(x,y,λ)=f(x,y)+λg(x,y),令這個函式偏導為 0,我們可以得到:

結果和上面的方程組是一樣的。

多個約束條件

多個約束條件和單個約束條件是一樣的。如果是多個約束條件,那麼這些約束函式肯定是相交的,否則無解。多個約束條件一般會把變數約束到乙個更低維的空間,例如,下圖中,紫色球面和黃色平面將變數約束到黑色線的位置。

求解過程和單個約束條件是一樣的,我們定義乙個新的拉格朗日函式:

然後同樣令這個函式的導數∇l=0,最後可以得到n+k個方程以及n+k個未知數,一般也能求解出來。

根據拉格朗日乘子法的定義,這是一種尋找極值的策略,換句話說,該方法並不能保證找到的一定是最低點或者最高點。事實上,它只是一種尋找極值點的過程,而且,拉格朗日乘子法找到的切點可能不只乙個(也就是上面的方程組可能找到多個解),例如下圖:

圖中相切的點有兩個,而紅點的函式值明顯比黑點小。事實上,要想判斷找到的點是極低點還是極高點,我們需要將切點代入原函式再進行判斷。

另外,在寫作本文時,我仍然有乙個疑惑沒有解決:拉格朗日乘子法在哪些情況下無解(也就是上面的方程組∇l無解)?換句話說,約束條件和函式沒有切點時,我們要怎麼求出最低點或最高點。這個問題留待之後想通再補上。

拉格朗日乘子法

最優化基本知識這裡就不贅述了,詳情可以參考個種最優化書籍,這篇部落格主要是幫助回憶優化應用中較常用的方法。一般情況下,最優化問題會碰到一下三種情況 1.無約束,2.等式約束 3.不等式約束。對於無約束情況,只要將優化目標對於變數求導,並令其等於0即可,我們主要討論第二種情況。設目標函式為f x 約束...

拉格朗日乘子法

在求取有約束條件的優化問題時,拉格朗日乘子法 lagrange multiplier 和kkt條件是非常重要的兩個求取方法,對於等式約束的優化問題,可以應用拉格朗日乘子法去求取最優值 如果含有不等式約束,可以應用kkt條件去求取。當然,這兩個方法求得的結果只是必要條件,只有當是凸函式的情況下,才能保...

拉格朗日乘子法

等式約束優化 當目標函式加上約束條件之後,問題就變成如下形式 目標函式和約束 約束條件會將解的範圍限定在乙個可行域,此時不一定能找到使得 xf x xf x 為 0 的點,只需找到在可行域內使得f x f x 最小的值即可,常用的方法即為拉格朗日乘子法,該方法首先引入 lagrange multip...