我們在上一篇【小白數學】- 為什么可以用拉格朗日乘子法求函數的極值【一】已經介紹了一種較為“嚴謹“的方法來說明為什么拉格朗日乘子法可以幫助我們求具有等式約束條件下的函數的極值。雖然在我們的例子中”等式約束“中只有一個等式。但其實很容易推廣到多個等式約束的情況。所以這里也就不再贅述。本文主要兌現上一篇博客中提到第二種方法去理解:為什么可以用拉格朗日乘子法求函數的極值。
正式介紹之前,我們先回顧一些基礎概念:一元函數和多元的函數的導數;
首先來看一個一元函數 y = x 2 y=x^2 y=x2,該函數上任意一點 x x x的導數的導數 y ′ = d y d x = 2 x y'= \frac{dy}{dx} = 2x y′=dxdy?=2x 。下圖中紅色的箭頭表示圖中A點(1,1)位置導數的方向。
也可以直觀的理解曲線 y = x 2 y=x^2 y=x2在A點的切線的方向就是這個點的導數方向。并且隨著 x x x的增大 d y d x = 2 x \frac{dy}{dx}=2x dxdy?=2x也不斷增大,即對于函數 y = x 2 y=x^2 y=x2, x x x的值越大,其所在點 ( x , y ) (x,y) (x,y)的導數就越大,或者說經過 ( x , y ) (x,y) (x,y)的切線的斜率就越大。
看完了一元函數的導數,我們來看一下二元函數的導數,假設我們有一個二元函數 y = ? ( x 1 ? a ) 2 ? ( x 2 ? b ) 2 + c y= -(x_1-a)^2 - (x_2-b)^2 + c y=?(x1??a)2?(x2??b)2+c,其中 x 1 , x 2 x_1,x_2 x1?,x2?為變量,而 a , b , c a,b,c a,b,c為常量,為 y y y取得最大值時候的 x 1 , x 2 x_1, x_2 x1?,x2?以及 y y y本身的值。
如果使用更數學的語言來表達就是:
y max ? = max ? ( ? ( x 1 ? a ) 2 ? ( x 2 ? b ) 2 + c ) = c a , b = arg ? max ? x 1 , x 2 [ ? ( x 1 ? a ) 2 ? ( x 2 ? b ) 2 + c ] \begin{align*} y_{\max} &= \max(-(x_1-a)^2 - (x_2 -b)^2 + c) = c \\ a,b &= \arg \underset{x_1,x_2}{\max} \left [ -(x_1-a)^2 - (x_2-b)^2 + c \right] \end{align*} ymax?a,b?=max(?(x1??a)2?(x2??b)2+c)=c=argx1?,x2?max?[?(x1??a)2?(x2??b)2+c]?
在看多元函數的導數之前,我們先看一下圖中紫色的那一圈圈的線是什么?沒錯,那是”等高線“。我們專門構造的這個二元函數,實際上是一座”小山“, 山頂的坐標是 ( a , b , c ) (a,b,c) (a,b,c)。在同樣的高度( y y y值相同)的山腰上的點,如果練成線,其實就變成了函數 y y y的等高線。
接下來我們再來看多元函數的導數(也稱為梯度),是怎么樣的:單個變量的導數叫”導數“,一組變量的導數叫”梯度“ (這組變量本身是函數 y y y上的一個點)。在上圖中的二元函數中,我們有兩個變量 x 1 , x 2 x_1,x_2 x1?,x2?,那么他們的各自的導數可以表示為 d y d x 1 , d y d x 2 \frac{dy}{dx_1}, \frac{dy}{dx_2} dx1?dy?,dx2?dy?,由于 y y y是由 x 1 , x 2 x_1,x_2 x1?,x2?共同作用生成的,所以我們又用偏導數的形式也表示他們各自的導數 ? y ? x i \frac{\partial y}{ \partial x_i} ?xi??y? ( i = 1 , 2 i=1,2 i=1,2),兩者是等價的。所我們定義的這個二元函數的梯度可以表示為: ? y = [ ? y ? x 1 ? y ? x 2 ] \nabla y = \begin{bmatrix*} \frac{\partial y}{\partial x_1} \\ \frac{\partial y}{\partial x_2} \end{bmatrix*} ?y=[?x1??y??x2??y??],顯然 ? y \nabla y ?y是一個向量。這個向量指向 y y y變化最劇烈的方向。
那么問題來了:我們先定義了”等高線“,然后又定義了”梯度“,這兩者是什么關系?
答:”梯度“垂直于”等高線“,直觀理解也很容易:連續等高線上的點具有相同的 y y y值;我們站在這個山坡的等高線上,肯定是朝著與等高線垂直的方向前進, y y y值的變化率最大。
如上圖所示,所有的綠色小箭頭都垂直于等高線,其實就是等高線上該點的梯度值。注意到圖中有一個點A,經過該點的除了有綠色的箭頭還有灰色的箭頭,很顯然可以看得出來,只有綠色的箭頭方向是 y y y值變化最快的方向(也是上山最快的方向),而其他的灰色箭頭的方向要么是”下山“,要么是”在周圍隨意閑逛“的方向。
理解梯度與等高線的關系對于我們接下來介紹的內容非常重要,所以沒有看懂的同學建議再仔細看一下圖。
說了一大圈,還沒有說到拉格朗日乘子問題,下面我們來定義一個可以用拉格朗日乘子法求解的約束條件下的最值問題如下:
假設有函數 f ( x 1 , x 2 ) = ? ( x 1 ? a ) 2 ? ( x 2 ? b ) 2 + 4 f(x_1,x_2) = -(x_1-a)^2 - (x_2 - b)^2 + 4 f(x1?,x2?)=?(x1??a)2?(x2??b)2+4,我們要求如下的最優化問題:
max ? f ( x 1 , x 2 ) s . t . a x 2 ? d x 1 ? d = 0 a , b , c , d 均為大于 0 的常數 ( 1 ) \begin{align*} & \max f(x_1,x_2) \\ &s.t. \: a x_2 - d x_1 - d = 0 \\ &a,b,c,d\:均為大于0的常數 \end{align*} \qquad (1) ?maxf(x1?,x2?)s.t.ax2??dx1??d=0a,b,c,d均為大于0的常數?(1)
在這個最優化問題中,我們發現其本質是求 f ( x 1 , x 2 ) f(x_1, x_2) f(x1?,x2?)與平面 a x 2 ? d x 1 ? d = 0 ax_2 - dx_1 -d = 0 ax2??dx1??d=0的交線(如下圖中棕紅色的虛線所示)上的最大值。
我們按照之前找梯度的方法,分別為 f ( x 1 , x 2 ) f(x_1, x_2) f(x1?,x2?), 約束平面以及兩者的交線 L ( x 1 , x 2 ) L(x_1,x_2) L(x1?,x2?)畫出梯度:具體方法為先找等高線,在沿著等高線垂直的方向畫梯度的方向。(不過大套路有時候也不好使,比如說垂直平面(與 y y y軸平行)上的點的梯度是什么?建議大家可以閱讀這篇介紹梯度定義的文章:梯度的含義)。對于垂直平面上的梯度,其實在我們的場景下,還是只涉及 x 1 , x 2 x_1, x_2 x1?,x2?兩個維度,假設約束條件重新表示為 g ( x 1 , x 2 ) = a x 2 ? d x 1 ? d g(x_1,x_2)= ax_2 - dx_1 - d g(x1?,x2?)=ax2??dx1??d,則平面上每一點的梯度為 [ ? g ? x 1 , ? g ? x 2 ] ? [\frac{\partial g}{\partial x_1}, \frac{\partial g}{\partial x_2}]^\top [?x1??g?,?x2??g?]?,即 [ ? d , a ] ? [-d, a]^\top [?d,a]? (圖中黃色箭頭所指方向)。
我們注意觀察棕色的交線上每一個點,圖中我們分別為其標識了 f ( ? ) , g ( ? ) , L ( ? ) f(\cdot), g(\cdot), L(\cdot) f(?),g(?),L(?) 三者的梯度(分別使用紫色、黃色以及綠色),我們注意到由于 g ( ? ) g(\cdot) g(?)是垂直平面,而 f ( ? ) f(\cdot) f(?)是一個對稱的圓形”山坡“,所以直觀理解上,我們要找的極值應該在交線的最高位置。如圖中的 M M M點,由于在這個點上 L ( ? ) L(\cdot) L(?)取得了極大值,所以必然有 ? L = 0 \nabla L = 0 ?L=0, 而且在圖中,可以看出來 ? f \nabla f ?f跟 ? g \nabla g ?g存在明顯的線性關系(方向相反),即 ? f + λ ? g = 0 \nabla f + \lambda \nabla g = 0 ?f+λ?g=0. 所以從這個角度上理解,也確實是證明了拉格朗日乘子法為什么能夠運用幫助我們找到約束條件下的函數極值。
歡迎大家點贊、關注、收藏,你的鼓勵是我最大的創作動力!
參考文獻:https://medium.com/@andrew.chamberlain/a-simple-explanation-of-why-lagrange-multipliers-works-253e2cdcbf74