1. 程式人生 > 其它 >拉格朗日法詳解

拉格朗日法詳解

拉格朗日乘子法

寫這篇文章的動機主要是最近正在學習機器學習的課程,學到邏輯迴歸的時候發現使用了拉格朗日乘子法,網上也很多文章講拉格朗日乘子法的,因此這篇文章只是記錄學習的過程,希望能較為全面地展示拉格朗日乘子法的各個方面。如果文章有錯誤請大家指出。也希望接下來能在學習過程中記錄下機器學習中的一些知識點。

基本思想

拉格朗日乘子法想要解決的問題事實上是比較常出現的,也就是對於一個式子來說,大多數情況下我們是不可能無限制求其理想情況下的最優值的(這裡的最優值可能是最大值也可能是最小值),總是存在一些約束生成了一部分可行解域,從機器學習上來說,我們的可行解域就被限制住了。但是很顯然我們如果將這個視為約束條件下的最優化,直接求解起來事實上是有一定困難的,我們更希望求解的是無約束的優化問題。

作為一種優化演算法,拉格朗日乘子法主要用於解決約束優化問題,它的基本思想就是通過引入拉格朗日乘子來將含有n個變數和k個約束條件的約束優化問題轉化為含有(n+k)個變數的無約束優化問題。

在轉化過程中,拉格朗日乘子法通過引入k個拉格朗日乘子,將n個變數和k個約束條件的約束優化問題轉化為含有(n+k)個變數的無約束優化問題。舉個例子來說,會有如下轉化:

\[min_{x,y,z} f(x,y,z)\\ s.t. \ g(x,y,z)=0 \]

求解上述最優化等價於求如下無約束優化:

\[min_{x,y,z,\lambda}f(x,y,z)+\lambda g(x,y,z) \]

接下來對於約束條件只有等式以及約束條件中出現不等式約束的情況分別討論。

等式約束

等式約束是拉格朗日乘子法中最簡單的一種形式,為了方便畫圖輔助理解,假設我們有如下優化式子:

\[max_{x,y} f(x,y)\\ s.t. \ g(x,y)=c \]

我們最後會將其轉化為無約束優化:

\[max_{x,y,\lambda}f(x,y)+\lambda (g(x,y)-c) \tag{1} \]

這裡的\(\lambda\)​​是沒有約束的,這是和不等式約束一個很大的區別,因此在這裡進行解釋為什麼這樣能夠求出最優值點。這是在一個二維平面上的優化式子,因此可以做出如下圖輔助理解:

需要注意的是上圖中藍色的虛線表示待優化原函式的等高線圖,也就是說在一條藍色虛線上的點\(f(x,y)\)

​都是相等的,而綠色的實線其實也可以理解為\(g(x,y)\)​的等高線圖,只不過由於約束,可行解只能落在這一條綠色的實線上。

如果結合影象來理解,對於\(f(x,y)\)來說,我們不妨假設其越往內的等高線表示其值越大,也就是說針對圖中的值來說\(d_2>d_1\)​​,由於在某一點的梯度指向最快的上升方向,因此對圖上的函式來說梯度方向都是向內的。而對於綠色的線來說由於沒有前置條件,所以我們無法判斷其梯度的具體方向,結合圖來說,圖中的綠色箭頭表示約束條件函式的梯度方向,但是這個方向如果取反向事實上也是可以的。

我們猜想最優值的點就在圖中的切點位置,更具體一點也就是在這一點原函式\(f(x,y)\)​的梯度方向和\(g(x,y)\)​的梯度方向相同或相反。如果不是用嚴格的數學定理來證明,而是從幾何意義來說,\(f(x,y)\)​​當然希望沿著梯度方向走的越多越好,而且使用樸素的思想來說,只要在梯度方向還能運動,就說明還沒到達最優值點。

而我們的可行域固定在了\(g(x,y)=c\)​這一條線上,不妨假設我們在這條線上移動點來求得最優值,那麼如果當前點處\(g(x,y)=c\)​的梯度和與當前節點相交的\(f(x,y)=d\)​的梯度方向並不平行,那麼就表示如果繼續移動這個點,總存在\(f(x,y)=d\)​的梯度方向的一個分量使得\(f(x,y)\)​​的值更大,也就不符合最優值點的定義,由此可見最優值點處約束函式與待優化函式的梯度必是平行的,轉化為數學的語言來說也就是:

\[\nabla f(x,y)+\lambda\nabla g(x,y)=0 \]

我們發現這不就是公式(1)的梯度為0的點嗎?由此可見只要求出我們轉化後的梯度為0的點其實就等價於求出了最優值點。

那麼看到這裡可能會產生一個疑惑,上述例子中給出的是求\(f(x,y)\)的最大值點,那麼我們求出來的梯度為0的點會不會是最小值點呢?也就是說求的極值不符合要求呢?同樣是從上圖來看,如果在該約束下還能求出\(f(x,y)\)的最小值,那麼最小值點處也必是滿足\(\nabla f(x,y)+\lambda\nabla g(x,y)=0\)​​​,由此可見拉格朗日乘子法只是極值點的一個必要條件,但是保證不了求出的是不是我們要求的那一個極值點(也就是說不能保證我們目標是max,求出的會不會是min),因此求出的結果還需要自行根據實際情況判斷。

不等式約束、KKT條件

在真實情況下約束條件大多是有不等式約束也有等式約束,因此這一小節主要介紹不等式約束條件下的拉格朗日乘子法以及這一部分很重要的一個KKT條件,這一條件在SVM的對偶問題轉換中起到重要作用。

這裡我們先單獨考慮只有不等式的約束條件,如果約束中還有考慮約束條件下的優化如下:

\[min_{x,y} f(x,y)\\ s.t. \ g(x,y)<0 \]

先給出結論,這一優化問題轉化為無約束優化如下:

\[min_{x,y,\lambda}f(x,y)+\alpha g(x,y) \tag{2}\\ \ \ \ \ \ s.t.\ \ \ \alpha>=0 \]

其中很重要的一點就是\(\alpha>=0\)這一約束,這和等式約束是很不一樣的。接下來同樣結合圖來解釋。

對於不等式約束,我們可以給出兩種情況,第一種情況就是不等式約束給出的可行解域中包含了f(x,y)的最值,那麼這種情況對應的圖示如下:

在這種情況下也就是說不等式約束事實上是不起作用的,所以求解帶不等式約束的最優化問題等價於求原優化問題,所以等價於求公式(2)中\(\alpha=0\)的情況。

更需要關注的是可行解域不包含f(x,y)的最值的情況,可用如下圖表示:

我們不妨結合圖來看,首先給出觀點,我們要求的最小值點圖中的切點位置,在這一點處g(x,y)的梯度和f(x,y)的梯度是反向的,而且這個反向是必須的,這一點和等式約束中的可以是相同方向不同。接下來從幾何意義方面解釋為什麼必須是反向的。

從圖上的情況來看,由於我們要求最小值,當然希望等高線縮得越靠近最優值點越好,而且需要注意的是由於約束條件確定的可行解域(圖中的綠色部分)不包含理想情況下的最優值點,因此我們的最值將會在可行解域的邊界上取到。不妨假設我們沿著邊界移動來尋找最優值點,那麼解釋和上面等式約束一樣,可以比較容易得出在最優值點處一定是兩個梯度平行的,接下來解釋為什麼兩個梯度一定是反向的。

結合圖中來說,我們觀察切點,如果這個點處兩個梯度是相同方向的關係,也就是說圖中的切點處的綠色箭頭和藍色箭頭同向,那就是說在當前切點處沿著梯度的反方向(也就是當前的綠色箭頭方向)運動一點得到的g(x,y)是比當前切點處小的,而當前切點處的g(x,y)=0,那不就是說我們可以繼續往理想情況的最優值點靠近一點嗎?那也就意味著當前點不是最優值點,和假設不符。

從幾何角度解釋這一點我認為是更容易理解的,因此不給出詳細的數學證明。最後給出一個KKT條件,這一條件是強對偶性的充要條件,後續部落格中將會詳細介紹強對偶性和KKT條件的關係,這裡只給出KKT的形式:

假設有一個優化問題如下:

\[min_{x}f(x) \\s.t.\ g_i(x)=0\ \ \ \ i=1,2,..p \\h_j(x)\le0\ \ \ \ \ \ \ \ \ j=1,2,...q \]

則可以轉化為拉格朗日函式如下:

\[L(x,\lambda,\mu)=f(x)+\sum_{i=1}^{q}\lambda_ig_i(x)+\sum_{j=1}^{p}\alpha_jh_j(x) \]

則KKT條件為:

\[\nabla L=0\\ g_i(x)=0,i=1,2,..p\\ h_j(x)\le0,j=1,2..q\\ \alpha_j\ge0\\ \alpha_j h_j(x)=0,j=1,2,..p \]