The Normal Equations
要找 J 的最小值除了 gradient descent 演算法之外,還有許多方式,這裡介紹另一個方法,使用這個方法直接使用 explict 的方式算出最小值,這樣可以不需要使用遞迴的方式。在這個方法中,我們直接把 J 對每個 θj 做微分,然後將其設定為零,為了簡化代數的推導,我們先介紹一些微積分的矩陣表示法。
矩陣的微分
假設 f 是一個從 Rm×n 映射到 R(也就是從 m×n 的矩陣映射到實數)的函數,則 f 對矩陣 A 的微分定義為:∇Af(A)=(∂f∂A11⋯∂f∂A1n⋮⋱⋮∂f∂Am1⋯∂f∂Amn)
所以事實上這個 gradient ∇Af(A) 本身也是一個 m×n 的矩陣,其中第 (i, j) 個元素為 ∂f/∂Aij,例如假設
A=(A11A12A21A22)
而 f:R2×2↦R 定義為
f(A)=32A11+5A212+A21A22
其中 Aij 代表矩陣 A 中的第 (i, j) 個元素。則我們可以得到
∇Af(A)=(3210A12A22A21)
矩陣的 trace
接著我們介紹矩陣的 trace 運算子(表示成「tr」),對於一個 n×n 的方陣 A,它的 trace 定義為對角線上元素的總和tr(A)=n∑i=1Aii
如果 a 是一個實數(也就是 1×1 的矩陣),則 tr(a)=a。
trace 運算子有一些特性,例如如果有有兩個方陣 A 與 B,則我們可以推導出 tr(AB)=tr(BA),進而得到
tr(ABC)=tr(CAB)=tr(BCA)tr(ABCD)=tr(DABC)=tr(CDAB)=tr(BCDA)
另外還有一些簡單的性質也可以很容易推導出來,如果 A 與 B 為方陣,而 a 為實數,則
tr(A)=tr(AT)tr(A+B)=tr(A)+tr(B)tr(aA)=atr(A)
經過一推推導後,可以得到下面這些矩陣微分的等式
∇Atr(AB)=BT∇ATf(A)=(∇Af(A))T∇Atr(ABATC)=CAB+CTABT∇A|A|=|A|(A−1)T
最後的第 (4) 條方程式只適用於 A 是 non-singular 方陣的情況,其中 |A| 是代表 A 矩陣的行列式(determinant)。
假設我們有一個固定的矩陣 B∈Rn×m,我們可以定義一個函數 f:Rm×n↦R 為
f(A)=tr(AB)
這樣的定義是有意義的,因為對所有的 A∈Rm×n,AB 就會是一個方陣,就樣就可以適用於 trace 運算子,也就是把 Rm×n 映射到 R,接著我們對其進行微分,就可以得到 ∇Af(A) 這個 m×n 的矩陣,上面第 (1) 條等式告訴我們這個矩陣的第 (i, j) 個元素會等於 BT 的第 (i, j) 個元素,也就是 Bji 。
詳細的證明這裡就跳過了,若要找詳細的證明在一般線性代數的書中應該都會有。
Least Squares
接著我們可以開始使用矩陣的表示法來推導 θ 在 J(θ) 達到最小時的解析解,首先我們把 J 改用矩陣的形式表示。若給定一組 training set,我們定義它的 design matrix X 為一個 m×n 的矩陣(如果將截距項也算進去,就是 m×(n+1) 的矩陣):X=((x(1))T(x(2))T⋮(x(m))T)
其中每一個 (x(i))T 都是一個列向量(row vector),代表第 i 筆 training example。而 →y 定義為一個 m 維的向量,其中包含所有 training set 的目標變數:
→y=(y(1)y(2)⋮y(m))
因為 hθ(x(i))=(x(i))Tθ,所以可以得到
Xθ−→y=((x(1))Tθ⋮(x(m))Tθ)−(y(1)⋮y(m))=(hθ(x(1))−y(1)⋮hθ(x(m))−y(m))
因為對任何的 z 我們可以得到 zTz=∑iz2i,因此
12(Xθ−→y)T(Xθ−→y)=12m∑i=1(hθ(x(i))−y(i))2=J(θ)
最後配合前面矩陣微分公式的第 (2) 條與第 (3) 條,我們可以得到
∇ATtr(ABATC)=BTATCT+BATC
因此
∇θJ(θ)=∇θ12(Xθ−→y)T(Xθ−→y)=12∇θ(θTXTXθ−θTXT→y−→yTXθ+→yT→y)=12∇θtr(θTXTXθ−θTXT→y−→yTXθ+→yT→y)=12∇θ(tr(θTXTXθ)−1tr(→yTXθ)+→yT→y)=12(XTXθ+XTXθ−1XT→y)=XTXθ−XT→y
在第三行我們使用實數的 trace 就是他自己本身這個性質。第四行是使用 tr(A)=tr(AT) 這個性質。第五行則是令 AT=θ、B=BT=XTX、C=I 然後使用第 (5) 條與第 (1) 條等式推導得到的(其中因為 →yT→y 跟 θ 沒有關係,所以微分之後就不見了)。
因為我們要要求 J 的極小值,所以令其微分等於零,即可得到這個 normal equation:
XTXθ=XT→y
所以就可以得到 J 的極小值就發生在
θ=(XTX)−1XT→y
的時候。
這裡如果 XTX 是一個 singular 矩陣的話(也是說某些資料可能有重複的問題),那它的反矩陣 (XTX)−1 就會不存在,這時候可以使用 pseudo inverse 的方式處理。
繼續閱讀:史丹佛大學機器學習(Machine Learning)上課筆記(三)
沒有留言:
張貼留言