Appendix A. Data set
Handwritten Digits
本書所使用的handwritten digits來自於MNIST數據集,每一張image的size爲28×28,且每一個元素中的值都是grey scale。
Synthetic Data
整本書中使用了兩個simple synthetic data sets。
第一個是關於regression problem的,它是由正弦函數擬合而來的,如下圖所示:
首先input values {xn} 通過在(0,1)上的均勻分佈進行生成,然後target values {tn} 的生成是由兩個terms相加得到的:第一個term是sin(2πx),第二個term是random noise (通過一個方差爲0.3的Gaussian distribution生成)。
第二是關於classification problem的,該problem的類別有兩個,其中的prior爲兩個類別概率相等,如下圖所示:
其中blue class來自於一個Gaussian distribution,而red class來自於兩個Gaussian distribution的混合分佈。由於我們明確知道prior和class-conditional probability,因此我們可以算出真實的posterior probability,畫出這個probability,並畫出最小決策邊界(如圖中所示)。
Appendix C. Properties of Matrices
Appendix D. Calculus of Variations
其實書中關於變分法的一些內容我沒太理解。因此下面先對網上一些課程中變分法的思進行歸納。
約翰·伯努利曾問到一個問題:如果在空間上有兩個點:點1和點2。然後,我會創造出一些沒有摩擦力的軌道,連接點1和點2,如下圖所示:
如果我放一個小球,從點1滾到點2,那麼請問,我從哪一個線開始,放一個小球滾下來,會使得我所耗費的時間最短。數學上的證明表示,走擺線的時間最短。
而研究走哪條線最短,其核心在於,將球所走的所有可能函數都抓進來,我們來對這一個函數的集合進行研究,並得到其中那個能使得時間最短的函數。那麼此時,我們就可以說,這個函數就是我們所要的函數。
這就是變分法的基本原理。
關於小球下落後的時間消耗公式推導在此略去,最終的時間消耗結果爲:
T=∫2gy1+y′dx
由此,我們可以看到,這裏的T其實是y的函數,當y在變化的時候,T的值也在不斷變化。而y其實是函數,所以T其實就是函數的函數,不同的函數會對應到不同的T的值。所以這裏的T函數就是所謂的“泛函”。
預備定理
(1)
對於下式:
∫abM(x)h(x)dx=0
其中,有h(a)=0,h(b)=0, 且h爲任意函數,那麼顯然有M(x)是零函數(M(x)=0)。
這個結論可以推廣到以多個函數爲變數的變分問題:
∫ab[M(x)η(x)+N(x)ϵ(x)]dx=0
其中η(x)和ϵ(x)都是任意的函數,那麼有M(x)=0,N(x)=0。
假設存在一個解F(x),使得降落時間T最短。同時,我假設Fˉ(x)爲所有函數的函數族。雖然這兩個函數我都不知道,但是我知道這兩個函數之間是會有差別的,我們設差別爲D(x),則:
Fˉ(x)−F(x)=D(x)
此時我們引入一個常數ϵ, 對於這個常數,我們有:
ϵϵD(x)=ϵη(x)
所以我們有:
Fˉ(x)=F(x)+ϵη(x)
此時,由於η(x)是一個任意函數,於是我們就得到了一個以ϵ爲參數的函數族Fˉ(x)。
但是這裏的η(x)函數需要滿足一些重要的性質,即它在1點和2點的橫座標處(分別設爲a和b),有η(a)=0,η(b)=0。
此外,η函數要求其具有較好的連續性,即一階導數和二階導數都存在。這兩個對η函數的約束,其實質意義是因爲降線的一些基本性質,我們通過這些基本性質,對我們所要尋找的函數所在的空間進行收縮約束。
根據Fˉ(x)的公式可知,無論其他地方如何選取,只要ϵ趨近於0,那麼Fˉ(x)一定會趨近於那一個最佳的F(x)(只是說,由於η的不同,我們趨近於0的方式會有所不同)。
Euler方程
對於下式:
I(ϵ)=T(yˉ)=∫x1x22gyˉ1+(yˉ′)2dx=∫x1x2F(x,yˉ,y′ˉ)dx
這裏面的yˉ就是我選取的某一個曲線,這個曲線對應着一個降落的時間T(yˉ)。在這裏的F(x,yˉ,yˉ′)中,除了x這個自變量之外,還有yˉ,yˉ′, 表示各種可能的試驗函數,對應着不同的降落曲線,這樣的函數不止一個。因此這樣的F被稱爲“泛函”。
對這個泛函做積分之後,我們就可以得到我們想要的時間T。
由之前F和Fˉ的關係,我們可以得到:
yˉ=y+ϵη
以及
yˉ′=y′+ϵη′
其中後者需要利用一下求導的性質。
因此,之前關於I(ϵ)的式子可以寫成:
∫x1x2F(x,y+ϵη,y′+ϵη′)dx
注意,我們不能忘記的一個前提是,當ϵ趨近於0的時候,我們的yˉ就會趨近於我們所要找到的這個解y。同時我們注意到,這裏的y,η,yˉ,ηˉ都是x的函數,所以當這個積分式進行計算的時候,所有關於x的部分都消掉了,因此這個式子的最終結果中就只剩下ϵ了,即這個積分的結果其實是一個ϵ的函數。這個函數有一個特性,即“當ϵ趨近於0的時候,這個函數最小”。也就是說,在ϵ=0的這個點上,會出現極值,也即I(ϵ)的微分爲0,即:
dϵdI∣∣∣∣ϵ=0=0
因此我們可以通過對I(ϵ)求導的方式,得到:
dϵdI∣∣∣∣ϵ=0=∫x1x2∂ϵ∂Fdx=∫x1x2(∂y∂Fη+∂y′∂Fdxdη)dx=∫x1x2(∂y∂F−dxd(∂y′∂F))ηdx
又根據前面的預備定理,因爲η是任意的函數,所以有:
∂y∂F−dxd(∂y′∂F)=0
這就是Euler方程。那麼滿足這個條件的函數y的意義是什麼?意義在於,滿足這個條件的y,會使得F產生極值。或者反過來說,如果一個函數不能使得這個式子爲0,那麼微分dϵdI∣∣ϵ=0就不會爲0,所以這樣的函數y就不會使這個泛函F產生極值。
回到附錄的內容
我們可以將一個方程y(x)看作是一個運算符,它通過輸入一個值x的方式,得到輸出值y。對於一個泛函F[y], 我們可以將一個函數y(x)作爲它的輸入,將,將F作爲它的輸出。一個經典的泛函例子是,我們通過二維平面的一條曲線的函數,計算得到這條曲線的長度。。
在machine learning 中,泛函被用於entropy H[x]中。因爲,針對一個連續的變量x,我們將它的任意一種概率密度函數p(x)輸入到這個entropy中,最終我們都會得到一個scalar value。因此,關於p(x)的entropy可以被寫爲H[p]。
函數y(x)的一個重要問題是,尋找一個x,使得函數y(x)的值最大(或最小)。對於泛函而言,它的一個重要問題是,尋找一個函數y,使得泛函F[y]的取值最大(或最小)。
我們可以通過泛函求極值的方式,發現“兩點之間線段最短”這個結論,也會發現“最大熵分佈是高斯分佈”這一結論。
我們可以用泰勒展開式的方式,來描述一個函數y(x)中,當x在小範圍之內出現擾動時候的取值情況,並通過取極限的方式得到dxdy:
y(x+ϵ)=y(x)+dxdyϵ+O(ϵ2) (D.1)
然後我們可以通過極限ϵ→0的方式,得到dxdy的具體取值。類似的,通過一個具有多個變量的函數y(x1,...,xD), 我們可以得到如下的式子:
y(x1+ϵ1,...,xD+ϵD)=y(x1,...,xD)+i=1∑D∂xi∂yϵi+O(ϵ2) (D.2)
以上兩個式子展示了我們在函數中如何對導數/偏導數進行估計的方法。那麼,類比而論,我們應該如何得到一個泛函在出現擾動ϵη(x)的時候,其泛函導數的具體情況?其中,η(x)是一個關於x的函數,具體的函數曲線如下圖所示:
我們將泛函E[f]關於函數f(x)的導數(變分)表示爲δF/δf(x)。注意,這裏的E是泛函,而F是泛函中積分的被積函數(我們稱之爲“拉格朗日函數”),且變分的表達式是關於拉格朗日函數F的式子。由此,我們定義以下關係式:
F[y(x)+ϵη(x)]=F[y(x)]+ϵ∫δy(x)δFη(x)dx+O(ϵ2) (D.3)
我們可以將其看作是(D.2)的一種自然的擴展,因爲我們可以將一個函數看作是無限維的向量,每一個分量都是連續的值,F[x]以該向量作爲輸入。
此時我們給出一個定理(就是上面提到過的預備定理),即當下式成立時:
∫δy(x)δEη(x)dx=0 (D.4)
其中η(x)是任意類型的函數。
有,E(x)=0。證明的方法其實就是對η(x)進行一些特別的構造,讓它在除了點x=x^的一個小鄰域之外的所有點的取值爲0,那麼此時如果要讓式(D.4)爲0的話,那麼就有δy(x)δE在x=x^的鄰域內的取值都爲0。把這種構造方法擴展到整個定義域,則有變分δE/δy(x)=0。
考慮如如下定義的變分函數:
F[y]=∫G(y(x),y′(x),x)dx (D.5)
其中,G函數是拉格朗日函數,並且有函數y(x)在積分區域的邊界點是固定不動的。
如果我們考慮泛函F[x]在y(x)上的變分的話,有:
F[y(x)+ϵη(x)]=F[y(x)]+ϵ∫{∂y∂Gη(x)+∂y′∂Gη′(x)}dx+O(ϵ2) (D.6)
爲了將這個式子轉換爲(D.3)式(由此我們就可以得到這裏變分的表達了),我們將(D.7)式中積分號內的第二項進行分步積分(其中利用了η(x)在邊界爲0,這一邊界條件),遂得到如下的式子:
F[y(x)+ϵη(x)]=F[y(x)]+ϵ∫{∂y∂G−dxd(∂y′∂G)}η(x)dx+O(ϵ2) (D.7)
類比於公式(D.3),我們可以得到這裏的變分式子:
∫{∂y∂G−dxd(∂y′∂G)}
此時又根據預備定理,我們可以得到:
∂y∂G−dxd(∂y′∂G)=0 (D.8)
這就是著名的Euler-Lagrange 公式。
舉個例子,如果我們的拉格朗日函數爲:
G=y(x)2+(y′(x))2 (D.9)
那麼有Euler-Lagrange 公式爲:
y(x)−dx2d2y=0 (D.10)
此時我們可以通過上面的公式與兩個關於y(x)的邊界條件,求解得到y(x)的值。
通常,我們定義的拉格朗日函數形式爲G(y,x), 此時該函數不依賴於y′(x), 此時對於所有的x有歐拉函數的形式爲:∂G/∂y(x)=0。
如果我們要對一個關於概率分佈的泛函採用變分法,那麼我們需要採用拉格朗日橙乘子的方式,在顧及normalization constraint的時候,採用一種unconstrained optimization。
拉格朗日乘子的具體方法見附錄E部分。
Appendix E. Lagrange Multipliers
拉格朗日乘子用於尋找從擁有一個或多個約束條件的函數的駐點。
考慮一個尋找函數f(x1,x2)最大值的問題,該問題有一個關於x1,x2的約束條件:
g(x1,x2)=0 (E.1)
一種方法是,直接把這個g函數求解出來,於是得到一種用x1表達x2的形式:x2=h(x1)。然後我們將這個結果代回原式:f(x1,h(x2)), 然後我們只需要最大化這個關於x1的一元函數即可。我們利用常規的方法解出x1∗, 然後得到x2∗=h(x2∗)。
這種方法的一個問題在於,我們可能很難找到一個等式的解析解,因此無法將x2表示成x1的某種形式。
一種更爲簡潔的方式是使用被稱爲拉格朗日乘子的參數λ。那麼我們該如何理解這種方法?接下來我們將從圖形的角度來解釋這個方法。考慮一個D維的變量x=(x1,...,xD)。約束條件g(x)=0形成了一個D-1維度的在x-上的空間。如下圖所示:
首先,我們注意到,在這個約束表面的任何一個點處,這個約束條件的梯度∇g(x)都是垂直於這個表面的。爲了解釋這個問題,我們考慮一個在約束表面上的點x, 並且考慮該點周圍的一個點x+ϵ, 我們假設這個點也同樣在這個表面上。如果我們在x周圍進行泰勒展開,就會得到:
g(x+ϵ)≃g(x)+ϵT∇g(x) (E.2)
又因爲x和x+ϵ都在約束平面上,所以有g(x)=g(x+ϵ), 因此有ϵT∇g(x)≃0。當取得極限∣∣ϵ∣∣→0的時候,我們有ϵTg(x)=0。又因爲我們知道,ϵ與約束表面g(x)=0是平行的,所以我們可以得出的結論是,∇g與表面垂直。
然後我們在這個約束面上選取一個能使得f(x)值最大的點x∗,這樣一個點同樣具有性質:∇f(x)同樣垂直於約束面(如上圖所示),否則我們可以通過在約束面上移動一個小距離的方式,得到一個更大的f(x)。因此,∇f和∇g之間是平行的,即:
∇f+λ∇g=0 (E.3)
其中,λ=0, 它被稱爲“拉格朗日乘子”。並且注意,λ可以是正數或負數。
因此,我們可以定義拉格朗日函數如下:
L(x,λ)≡f(x)+λg(x) (E.4)
我們可以通過∇xL=0的方式得到帶約束條件的駐點(E.3)。更進一步說,我們可以通過∂L/∂λ=0得到約束等式g(x)=0。
因此,總結看來,如果我們需要找到函數f(x)在約束g(x)=0時的最大值,我們首先需要定義關於x和λ的拉格朗日函數L(x,λ)。對於一個D維的向量x,這種方式提供了D+1個方程,用於確定駐點x∗以及λ的值。如果我們不需要計算出λ,我們可以在這個方程組中,先把λ消去。
爲了加深對這個方法的印象,我們在此舉一個例子。設我們需要找到函數f(x1,x2)=1−x12−x22在約束g(x1,x2)=x1+x2−1=0下的駐點,如下圖所示:
因此相應的拉格朗日函數爲:
L(x,λ)=1−x12−x22+λ(x1+x2−1) (E.5)
爲了使該拉格朗日函數取得駐點,我們需要以下三個等式:
−2x1+λ=0 (E.6)
−2x2+λ=0 (E.7)
x1+x2−1=0 (E.8)
最終我們可以得到駐點(x1∗,x2∗)=(21,21), 相應的拉格朗日乘子爲λ=1。
剛纔我們已經討論了具有“等式”約束的目標方程的最大化問題,現在我們來討論具有不等式約束的目標方程g(x)≥0的最大化問題,如下圖所示:
對於這個優化問題的解,我們可以將其拆分成兩種不同的情況:
- 駐點位於g(x)>0的區域內,此時我們的約束條件是inactive的。此時函數g(x)沒起到任何作用,因此此時的駐點僅僅依賴於等式∇f(x)=0。該情況可以歸於拉格朗日函數(E.4)這種情況中,但同時有λ=0。
- 駐點位於邊界g(x)=0上,此時約束條件是active的,即解在邊界上,那麼這種情況則完全可以類比於之前(E.4)拉格朗日函數中對等式約束的處理,並有λ=0。但是此時,拉格朗日乘子的正負號十分重要,因爲f(x)達到最大值,當且僅當它的梯度方向與區域g(x)>0的方向相反,正如上圖所示。因此,有∇f(x)=−λ∇g(x),λ>0。
但是,無論是上述哪一種情況,總會有:λg(x)=0, 因此在約束條件g(x)≥0下對f(x)進行最大化的問題轉換爲,在滿足以下條件的同時,最大化拉格朗日函數(E.4):
g(x)≥0 (E.9)
λ≥0 (E.10)
λg(x)=0 (E.11)
以上條件就是所謂的Karush-Kuhn-Tucker(KKT)條件。
注意到,如果我們要在條件g(x)的前提下最小化函數f(x),那麼我們需要在保證λ≥0的時候,最小化拉格朗日函數L(x,λ)=f(x)−λg(x)
我們將上述兩種方法結合一下,並擴展到多個等式和不等式約束條件。假設我們需要在滿足gj(x)=0,for j=1,...,J,and hk(x)≥0 for k=1,...,K的前提下最大化f(x)。我們引入拉格朗日乘子{λj}以及{μk}, 並優化如下拉格朗日函數:
L(x,{λj},{μk})=f(x)+j=1∑Jλjgj(x)+k=1∑Kμkhk(x) (E.12)
並具有約束條件:μk≥0以及μkhk(x)=0,for k=1,...,K。