您當前的位置:首頁 > 詩詞

【量化課堂】拉格朗日乘子

作者:由 JoinQuant 發表于 詩詞時間:2017-02-08

導語:拉格朗日乘子法是用於解決一類有約束的非線性規劃問題的方法。它並不是一個計算結果的演算法,而是把規劃問題轉化成一個更簡便的格式,便於使用其他的演算法進行計算。著名的馬科維茲均值-方差問題就可以用拉格朗日乘子解決。

閱讀本文前需要掌握線性代數、多元微積分以及非線性規劃的基礎知識。

要解決的問題

設 f 和 g 是

C^{1}

R^{n}

→R 函式,並且 c∈R 是一個實數,我們考慮以下的數學規劃問題:

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

拉格朗日乘子是一個解決這類問題的方法。直接介紹拉格朗日乘子的話並不是很好理解,於是我們先把上述規劃問題的解題思路捋一遍,文章最後再介紹拉格朗日乘子的時候,其中的原理就一目瞭然了。

g 的水平集

首先我們要了解規劃問題的的可行域,

也就是所有滿足 g(x)=c 的 x∈

R^{n}

。下面給這個集合一個定義:

定義。 設 g:

R^{n}

→R 是一個函式,我們說 g 在 c∈R 的

水平集 (level set)

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

舉個一例子。考慮一個固定的

R^{2}

→R 函式 g˜(x,y)=

x^{2}

y^{2}

,它的影象如下

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

我們來選擇一個水平集。嗯,c 等於多少好呢。。。 就 c=−1 吧。

看一眼水平集

\tilde{L} _{-1}

={(x,y)∈

R^{2}

x^{2}

y^{2}

=−1},如下圖紅線所示

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

如果從上方向下看函式 g˜ 的熱力圖,那麼下圖中的每一條線是 g˜ 的一個水平集,根據顏色的從紫到黃,依次是 c=−23,−22,…,22,23 的水平集。其中兩條紅線是我們的 c=−1 水平集

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

機智的讀者一定已經算出,組成水平集

\tilde{L} _{-1}

的兩條曲線在 (x,y) 座標系上可以分別用函式

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

的影象表示。

我們來看水平集

\tilde{L} _{-1}

一個重要的的幾何性質。假設從前有座山,山裡有座廟,廟前有片空地,地形和圖二里的一模一樣。你順著上邊的那條紅線走呀走,發現自己的 x 座標和 y 座標都在變動,可是豎向的 z 座標一直不變,也就是說海拔不變。你摸著自己地良心問:“我走過了哪裡,又將走向哪裡?”

良心答曰:“你在時間 t 的 (x,y) 座標是

p(t)=(t,\sqrt{t^{2} +1} )

。”如夢初醒的你掏出小木棍在土地上一陣劃拉,計算出自己在時間 t 的行走方向是

p^{

“謝謝你,我的良心。”

“嗯,別煩我了。”

無視了來自良心的蔑視,你又不禁遐想,這片大地的梯度又是多少呢?經過十三年的艱苦鑽研,你最終算出了地形的梯度函式 ∇g˜(x,y)=(2x,−2y)。代入函式 p(t),你得知在時間 t 的時候你的所在地的地形梯度是

∇g˜(p(t))=

(2t,-2\sqrt{t^{2} +1} )

於是你一邊走一邊向 ∇g˜ 的方向死死盯著不放,最終得了頸椎病。你扶著已經轉不回來的脖子,恍然大悟:原來 ∇g˜(p(t)) 和 p′(t) 是垂直的。是哪

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

也就是說 g˜ 的水平集的切線和 g˜ 的梯度是永遠垂直的!

仔細想一想的話這也是當然。根據線搜尋方法文章中所講,函式 g˜ 在 (x,y)的梯度 ∇g˜(x,y)是 g˜ 的取值上升最快的方向,而 −∇g˜(x,y) 則是 g˜ 的取值下降最快的方向。水平集是 g˜ 取值不變的集合,那麼在水平集上行走的話,行走方向應該和上升方向 ∇g˜ 之間保持一定角度,這樣就不會上升,當然也要和下降方向 −∇g˜保持一定角度,這樣就不會下降。用腳趾頭一想,既然 ∇g˜ 和 −∇g˜ 之間的角度是 180 度,那麼折中的不上不下的角度應該就是那個的一半吧,也就是說行走方向應該是和 ∇g˜ 垂直的。

以上的現象用直白的話說,就是梯度和水平集是垂直關係的,這也是多元微積分裡的一個基礎定理:

定理。 設 g:

R^{n}

→R 是一個

C^{1}

函式,c∈R 是一個實數,而

L_{c}

R^{n}

是 g 取值為 c 的水平集。對於任何一個 a>0 和

C^{1}

曲線 α:(−a,a)→

L_{c}

,都有 ∇g(α(t))⋅α′(t)=0。

證明。

因為對於所有 t∈(−a,a) 都有 α(t)∈

L_{c}

,所以也有 g(α(t))=c。微分,並且使用鏈式法則可得

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

是想要的等式。

用紅色箭頭表示函式 g˜的梯度的話,它會是像下圖中這樣,和水平集相垂直。

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

當然,這個現象不只是針對於例子中這個特定的 g,上面的定理適用於任何一個函式 g,它們的梯度和它們的水平集都是相互垂直的。

有請目標函式 f

我們回顧一下最初要解決的問題

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

在上一節中我們對這個規劃問題的可行區域

L_{c}

有了一個初步的認識。那麼接下來,當然是要在可行域上尋找目標函式 f 的最大值了。

好,我們就設一個目標函式

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

它長得像這樣,中間是一個小山丘。

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

在規劃問題中,我們想要的是在 g 的水平集

L_{c}

上找到 f 的最大值,那麼把上一章節計算出的水平集

\tilde{L} _{-1}

畫在 f˜ 的影象上,是這樣的。

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

現在就假設你又來了一座山,又發現了一座廟,廟前有個小山坡,長得這個樣。站在山腳下,你回想起了以前沿著 g˜的水平集走過的路徑,也就是

p(t)=(t,\sqrt{t^{2} +1} )

,你決定還沿著這條路來走這個山坡。

不過這次可和上一次不一樣了,雖然走的同樣的路徑,但是地形不一樣,所以海拔不再是一成不變,而是時高時低。你不禁好奇,在這條路上海拔最高的點在哪裡?

你摸了摸自己的良心,“良心良心告訴我,…… ”

“請你不要摸我了好嗎?好惡心的。”

“好,”你乖乖地把手拿開,“良心良心告訴我,我的海拔是多少?”

“你在時間 t 的海拔是 f˜(p(t))=20/(32+3

t^{2}

)。”

啊!你再次恍然大悟,算出了 f˜(p(t)) 的導數並且設它等於零,不就知道海拔高度出現極值的地方了嗎?事不宜遲,你掏出了小木棍,又開始在地上胡亂劃拉起來。

這一晃又過去了二十三年,你終於長嘆一口氣,得到了一個如此簡練的公式:

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

具體的數值什麼的,已經都無所謂了(其實是因為你到最後也沒搞清楚怎麼微分 1/(32+3

t^{2}

),不過這種事就讓它過去吧)。如果在時間 t 的海拔高度是最高的,那麼上面的這條公式必定被滿足。也就是說,對於一個點

x_{0}

\tilde{L} _{c}

,如果

x_{0}

是 f˜ 在

\tilde{L} _{c}

上的一個極大點,那麼梯度 ∇f˜(

x_{0}

) 和

\tilde{L} _{c}

x_{0}

的切線一定是垂直的。

“謝謝你,我的良心。”

“你好煩吶。”

可是,這個公式看著真的是好眼熟啊,眼熟到好像剛剛看過。。。 是吧,

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

g˜ 的梯度和它的水平集永遠是垂直的。那麼,在極大點上,∇g˜ 和水平集垂直,∇f˜ 也和水平集垂直,也就是說。。。 ∇g˜ 和 ∇f˜ 是平行的!!

事實上,這個現象不只是針對於例子中的 f˜ 和 g˜,對於任何

C^{1}

函式 f 和 g 都是這樣的。我們有定理如下:

定理。 設 f,g:

R^{n}

→R 是

C^{1}

函式,c∈R 並且

L_{c}

={x∈

R^{n}

:g(x)=c}。如果

x_{0}

L_{c}

滿足對於所有 x∈

L_{c}

都有f(

x_{0}

)≥f(x) 或者f(

x_{0}

)≤f(x),那麼存在某個 λ∈R 滿足 ∇f(

x_{0}

)=λ∇g(

x_{0}

),滿足這個條件的點叫做一個

駐點 (critical point)

這個定理在 n=2 情況下的證明正如本文中對 f 和 g 的推導一樣,但是在更高的維度裡有一些細節會增加證明的難度。不過,你只要堅定地相信這個定理是對的,就一定沒有問題了!

那麼,對於在上邊例子中的函式,如果俯視觀看 f 的水平集和行走的路徑 p(t),是如下圖:

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

圖中紅色箭頭是 g 的梯度方向,藍色箭頭是 f 的梯度方向,在紅線上 f 取值極大點的地方,兩者的梯度方向是重疊的,標為紫色。

當應用於更一般性的 f 和 g 的規劃問題中,定理告訴我們如果有

x_{0}

R^{n}

max_{g(x)}

=cf(x) 問題的極大點的話,那麼它不僅要滿足 g(

x_{0}

)=c,還要存在一個 λ∈R 以至於 ∇f(

x_{0}

)=λ∇g(

x_{0}

)。所以如果我們能找出滿足這些條件的點,那就可以更簡單地找到

x_{0}

。 當然,用這個方法算出的點不一定是極大點。它也有可能是極小點或者反射點,這就要用其他的辦法來驗證了,或者乾脆把所有的駐點都算出來,然後比一比哪個大哪個小就知道了。

我們還要拉格朗日乘子幹什麼?

在以上的計算中,我們沒用什麼特殊的方法就解決了在

\tilde{L} _{-1}

上最佳化 f˜ 的問題,那麼為什麼還要需要拉格朗日乘子?

上面的例子的一個特點就是,它太簡單了,或者說維度太低了,只用兩條曲線就完全描述了水平集

\tilde{L} _{-1}

,在此之上只需要微積分就可以算出答案。但在更高的維度中,

L_{c}

是不能用曲線描述的,所以也不會有這麼簡單的計算方法。但是,前面得出的兩個定理在高維中同樣適用,並且根據定理,我們知道要找的極大點必須滿足

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

這時,拉格朗日就來了,他給我們一個可以同時囊括上面兩個條件的函式。什麼函式這麼神奇呢?那就是

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

這裡 x∈

R^{n}

並且 λ∈R,所以 L 是一個

R^{n+1}

→R 的函式。嚴格來講,這個函式中的 λ 被稱為

拉格朗日乘子 (Lagrange multiplier)

,但我們一般說“拉格朗日乘子”的時候指的是這裡介紹的方法。

計算 L 的導數,分別得到

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

或者寫作

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

那麼,

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

因此,在 g 的水平集上最佳化 f 的取值時,只需要計算 ∇L(x,λ) 的零點就可以了。

拉格朗日乘子完全版

拉格朗日乘子的功力還不止於此,它可以應用於有多於一個約束函式的規劃問題。

定理。 設 m∈N。對於 i∈{1,2,…,m},

g_{i}

和 f 都是

R^{n}

→R 的

C^{1}

函式,並且設

c_{i}

∈R。考慮規劃問題

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

定義函式

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

這裡λ=(λ1,λ2,…,λm)∈

R^{m}

。那麼如果 x˜∈

R^{n}

是上述規劃問題的極值點,必定存在某個 λ˜∈

R^{m}

滿足

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

如果想要理解或者證明這個完整版的定理,我們需要更多的線性代數和微積分的工具,本文中則不進行更深入的討論。

到此為止我們找到了算出極值點的條件,但是把它算出來終究是個問題。如果 f 和

g_{i}

都是很醜的函式,那麼 L 必定是其醜無比,計算 ∇L 的零點的準確值也是不可能的,所以一般會採取一些數值最佳化的方法進行估算。一個可行的思路是解決

R^{n+m}

上的無約束的非線性規劃問題

【量化課堂】拉格朗日乘子

【量化課堂】拉格朗日乘子

而它使用線搜尋方法的演算法就可以計算。將有約束的規劃問題簡化成無約束的規劃問題,這已經足以體現拉格朗日乘子的價值了。

結語

當然,f 和

g_{i}

並不一定都非常醜。如果目標函式和約束函式都是二次多項式,求得 ∇L 零點的準確值還不是絕望的難,而且很多重要的應用場景都在這個範疇之內,比如。。。 在量化課堂的下一篇文章中,我們就將針對馬科維茲的均值-方差問題使用拉格朗日乘子進行最佳化,並計算出有效前沿的解析解。

後記

一個白髮蒼蒼的老人獨自蹲在荒涼的山脊上,攥著一根細小的木棍,胡亂在土地上劃拉著。不論風吹雨打還是春去秋來,他日日都在,一寫就是幾十載。他書寫的的看似是瘋狂,又像是真理,模糊、混沌、捉摸不清。一條蜿蜒的紅線記載了老人的路程,一頭連著彼生,一頭連著來世。我們知道,他是一個有良心的人,因為他的良心會說話,你聽。。。

歡迎到JoinQuant檢視策略並與作者交流討論:【量化課堂】拉格朗日乘子。

標簽: 函式  乘子  拉格朗  水平  良心