【数学基础】拉格朗日乘子法
概述
在求解最優化問題中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)條件是兩種最常用的方法。在有等式約束時使用拉格朗日乘子法,在有不等約束時使用KKT條件。
我們這里提到的最優化問題通常是指對于給定的某一函數,求其在指定作用域上的全局最小值(因為最小值與最大值可以很容易轉化,即最大值問題可以轉化成最小值問題)。提到KKT條件一般會附帶的提一下拉格朗日乘子。對學過高等數學的人來說比較拉格朗日乘子應該會有些印象。二者均是求解最優化問題的方法,不同之處在于應用的情形不同。
(1)無約束條件
這是最簡單的情況,解決方法通常是函數對變量求導,令求導函數等于0的點可能是極值點。將結果帶回原函數進行驗證即可。
拉格朗日乘子法實例
(2)等式約束條件
? ? ? 設目標函數為f(x),約束條件為h_k(x),形如:
? ? ? s.t. 表示subject to ,“受限于”的意思,l表示有l個約束條件。
則解決方法是消元法或者拉格朗日法。消元法比較簡單不在贅述,這里主要講拉格朗日法,因為后面提到的KKT條件是對拉格朗日乘子法的一種泛化。
例如給定橢球:
?????
? 求這個橢球的內接長方體的最大體積。這個問題實際上就是條件極值問題,即在條件? ????下,求的最大值。
? ? ? ? ?當然這個問題實際可以先根據條件消去 z?(消元法),然后帶入轉化為無條件極值問題來處理。但是有時候這樣做很困難,甚至是做不到的,這時候就需要用拉格朗日乘數法了。
? ? ? ? ?首先定義拉格朗日函數F(x):
? (?其中λk是各個約束條件的待定系數。) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? 然后解變量的偏導方程:
? ? ?? ......,
如果有l個約束條件,就應該有l+1個方程。求出的方程組的解就可能是最優化值(高等數學中提到的極值),將結果帶回原方程驗證就可得到解。
? ? ? ? ? ?回到上面的題目,通過拉格朗日乘數法將問題轉化為
?????
對求偏導得到
? ? ? ?
聯立前面三個方程得到和,帶入第四個方程解之
? ? ??
帶入解得最大體積為:
??????
為什么這么做可以求解最優化
舉個例子:
這個式子可以好好考量一下,結合下文那個簡單的例子,可以發現例子中的1,2兩個偏導保證了梯度同向,第3個偏導保證了滿足等式約束。
?
拉格朗日乘子法的幾何認識
現在,我們來感性地認識一下,為什么拉格朗日認為相切才能找到最低點(只是感性認識,不添加任何數學推導)。
在橙點這個位置,由于兩條曲線不相切,所以橙線的梯度(上圖橙色箭頭)和藍線的切線(藍色虛線)肯定不垂直。在這種情況下,藍線的兩個切線方向,必定有一個往函數高處走(與梯度的夾角小于 90 度),有一個往函數低處走(與梯度的夾角大于 90 度)。所以,在兩條曲線相交時,我們肯定不在最低點或最高點的位置。
那么,反過來想,如果兩條曲線相切(上圖),那么在切點這個位置,藍線的切線和橙線的梯度是垂直的,這個時候,藍線的切線方向都指向橙線的等高線方向。換句話說,在切點的位置沿藍線移動很小的一步,都相當于在橙線的等高線上移動,這個時候,可以認為函數值已經趨于穩定了。所以,我們認為這個點的值“可能”是最低(高)的(之后解釋為什么是“可能“。另外,個人覺得拉格朗日乘子法最好用反證法從不相切的點入手思考,從相切的點思考總有點別扭)
根據拉格朗日乘子法的定義,這是一種尋找極值的策略,換句話說,該方法并不能保證找到的一定是最低點或者最高點。事實上,它只是一種尋找極值點的過程,而且,拉格朗日乘子法找到的切點可能不只一個(也就是上面的方程組可能找到多個解),例如下圖:
圖中相切的點有兩個,而紅點的函數值明顯比黑點小。事實上,要想判斷找到的點是極低點還是極高點,我們需要將切點代入原函數再進行判斷。
很簡單例子1
雖然上面已經有一個實例的例子了,但總感覺有點亂,原理啥的也不是讓人特別清晰。所以接下來會再舉一個便于理解的例子。
求此方程的最大值:
s.t??
因為只有一個未知數的限制條件,我們只需要用一個乘數λ.
將所有L方程的偏微分設為零,得到一個方程組,最大值是以下方程組的解中的一個:
由上面三個條件可以知道,取到最優解時,必然滿足等式約束。
解得? ? ??? ? ??
實際上這邊沒必要對求偏導,求了也就是原來的等式約束。
很簡單例子2
又看到一個例子,mark一下,希望能幫助理解。
這邊為什么沒有對求導呢?注意看,有一句話“把它在帶到約束條件中去”,其實就是對求導了,因為f對求導之后就是約束條件。
系數λ的作用
這邊的λ和上面的一樣的。
對于有不等式約束的問題我們要引進KKT條件和對偶變換。在下一篇中會詳細介紹。
?
參考文章:
深入理解拉格朗日乘子法
拉格朗日乘子法:寫得很通俗的文章
?
總結
以上是生活随笔為你收集整理的【数学基础】拉格朗日乘子法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习】机器学习一些概念的整理(不断
- 下一篇: 【数学基础】拉格朗日对偶