好,那我們剛才講到我們只剩下一個問題,就是我們要怎麼樣把 Ein
做得越小越好 我們剛才已經把 Ein 的公式寫下來啦,那剩下的問題是,我們怎麼樣
求到一個 w,它會是一個好的 w,它的 Ein 會是一個小的 w 所以我們先把
Ein 的公式稍微看一下,Ein 的公式裡面有哪些項目呢?我們有 w 乘上
Xn,這是我們的 Hypothesis 說的預測到底是怎麼樣子
我們有 Yn,這是我們希望的預測到底是長什麼樣子
我們有這個平方,這是我們的平方的錯誤,然後我們有這個平均的動作 對於我們現在所看到的所有的點做個平均
那我們現在要做的事情,是想要把這個式子表示成矩陣運算的形式,為什麼要表示成矩陣運算- 的形式?
因為我們希望未來在操作的時候,大家的符號看起來可能會稍微簡單一點,不會有一些例如說 小的
n 的這個 index 在裡面跑來跑去的,好那做矩陣的操作之前呢,我先想辦法
做一件事情,讓大家等一下看得比較清楚一點,我說我這邊有一個 w 乘上
x 這個向量的內積 大家知道,向量的內積是可以交換的,所以我這邊可以簡單的把它寫成
Xn transpose w,也就是說我把 w 跟 x
的角色交換過來 交換過來的目的,只是讓大家待會看得比較清楚一點,說我們在做什麼事情
好,然後怎麼樣呢,我們這邊有個連加,連加這個東西 我們看起來有點討厭,因為就會有那個
n,小 n 的 index 在那邊跑來跑去 我想把它表示成向量的形式的話,我可能就可以把它寫成什麼
我連加一連串東西的平方,實際上我也可以看成是某一個向量的長度的平方 這個向量裡面的每一個
component,實際上就是我連加裡面的 這些每一項,所以例如說這裡,我可以把第一項寫下來說,我的第一項是
x 的第一個 transpose w 減掉
y1 所以呢,我如果在那邊算平方的時候,我就會算到第一項這個東西的平方
同樣的,第二項我可以寫 x2 transpose
w 減掉 y2 好第二項,一路點點點的寫下來
一直到第大 N 項,xn transpose w 減掉 y 大
N 所以大家可以看看,我原來是一串連加,我只是用數學性質 把這一串連加表示成一個向量,然後它的長度的平方
這樣寫下來之後,看起來稍微比剛才複雜一點,因為我把那個小 n
丟掉了 但是接下來,我就可以做一個簡化的動作是什麼,這裡面的每一個人
每一行裡面都有一個共通的 w 我如果把這個共通的
w 有點像提出來的話,那麼今天 紅色的部分是什麼?紅色的部分是跟我的
x 有關的部分 我需要的是 x1 的 transpose
x2 的 transpose,點點點,一路到 x 大 N 的 transpose
好這是紅色的部分,對不對,給大家看看,我們在上面那項裡面 我們需要的是 x1
transpose w,x2 transpose w,我把 w 給它提出來 那麼我的前面乘
w 的矩陣裡面,就留下了這些東西 那這些東西,我原來
x 是這個高高的向量 現在呢躺下來,變成橫排的這個向量
所以 x1 x2 一直到 xn 它們是橫排的向量
然後呢再來我後面要減掉一個 y,我也可以把這些 y 收集起來
變成一個向量,所以我在這邊可能有 y1,可能有 y2,一路點點點
一路到 yn,它們每個收集起來,變成一個向量 好所以,我經過了這一番整理,如果我還為這個向量
稍微取個名字,這個矩陣稍微取個名字,我把它叫做大 X
我為這個向量稍微取個名字,我把它叫做 y,這個矩陣大 X
我把它下面畫兩條線,然後後面那個 y 是向量,我把它畫一條線的話
我就可以把它整理出來說,我有一個大大的矩陣,乘上 w
然後減掉 一個高高的向量,這個是 y,那整理出來最後變成一個比較簡單的式子 我有
n 分之一,這是我原來的 n 分之一,然後呢我要算某個向量的平方 這個某個向量是什麼呢?只跟三個東西有關
大 X,這是我原來的輸入資料 w,這是我在變化的各式不一不同的線
然後還有 y,這是我想要的輸出,然後把它收集在一個向量裡面
好,所以這是我們最後得到的式子,看起來可能比之前的式子
要稍微簡單一些些,至少,我們現在已經把所有的資料,還有所有我們要的 w
等等的 都收到所謂的這個矩陣裡面去了
好,收到這個矩陣裡面去以後有什麼好處? 我們看看這個
Ein 長什麼樣子,我們唯一的變數是 w,x 跟 y 我們都已經知道,唯一的變數是 w
這個函式,大家可以看到說我們的 Ein,w 變一點點的時候,Ein
也會變一點點 那它可以證明說,它是個連續的函數,w
變一點點它就跟著變一點點,然後連在一起 然後實際上,因為你可以算出它的微分來,它是一個可微的函數
如果進一步證明它的性質的話,你會得到它是一個我們叫做凸函數,convex function
那有的同學可能不太知道凸函數是什麼意思,我們先想像它的物理意義是什麼
想像它物理意義就是,它是一個像山谷的形狀,有點像我左邊畫的這個樣子
我左邊是一個示意圖,這個示意圖的橫軸是什麼?是所有不同的 w
它是一個連續的函數,所以呢我的這個函數的曲線是連在一起的
它是一個可以微分的函數,所以大家可以看到說它有若干的這個平滑度
有若干平滑度以後怎麼樣?然後它是凸的,它就像一個山谷,像一個碗一樣
像一個碗一樣這樣的函數有什麼特性呢?像一個碗一樣這樣的函數的話,我們如果要求
到底它哪裡是最低點,大家看到那個山谷的最底下是最低點
最低點是什麼意思?就表示我們在最低點上不管往哪個方向去
都沒有辦法再往更低的地方走,想像你是一個球
你站在最低點,你往哪邊過去都沒有辦法讓你的函數值更低
這樣的性質呢,會對應到大家在微積分可能有學過說,會對應到什麼呢?我在那個最低點
如果去取它的梯度,梯度就是什麼?梯度就是在每個方向上,你到底能不能往下滾
好,那你如果去取它的梯度,我們剛剛說你在那個最低點,你就不能往下滾 不能往下滾的話就代表梯度要是零
往每個方向的梯度要是零,大家看到我這裡有寫下來說,梯度的定義是
我對這個函數在每個方向上做偏微分,然後呢把我現在這個點代進去
如果我已經在谷底的話,我不管是哪一個方向我都沒有辦法滾,所以我的梯度一定要是零
好,那這是這個梯度要設成零的意思,那我們今天如果是一個凸函數的話,大家至少可以想像
當然我們這邊不做很嚴格的數學證明,但是你可以想像說,你如果已經在谷底了 那麼你的梯度就會是零,那這是我們一個
可以求得最佳解的方法,好,所以我們現在的任務變成這樣子 我們要找到一個
w,我們把這個 w 叫做 wLIN,LIN 不是指因為我姓林所以叫 LIN,LIN 是
Linear Regression 的意思 好,我們希望找到了這個 w 以後,這個
w 可以滿足我們那個最佳解的條件 說它在各個方向上的偏微分都是零,它的梯度是零
好,那麼我們來看看我們要怎麼達成這任務呢 我們就說,我們要來算算,什麼時候梯度會是零
那梯度會是零的話,那我們先在簡單,把我們剛才已經算出來的這個 Ein
的矩陣的式子 把它列成一個比較詳細的式子,詳細的式子是什麼意思?我們
Ein 裡面有某個向量的平方 我們把算這個向量平方的式子展開,也就是我等於是算那個向量對自己的內積,這就是向-
量的平方 展開以後我就會得到什麼?我會得到三個不同的項,第一個項 是
w 的二次式,這個二次式的來源是什麼?二次式的來源是我等於是取了這一項的平方
那所以我這個二次式裡面,我需要寫下來的係數就有,我原來的 X
然後呢,還有這個 X 的 transpose,這是我的第一項,就是來自這個東西的平方
我還有個最後一項,最後一項來自什麼?我今天有這個 y 啊,然後這個
y,我有 y 的平方 好就是把 y 的平方的部分寫下來
然後還有那個中間項,好大家應該數學有學到,這個例如說 a 減 b 的平方,我們都能夠寫出來,這個中間項是
兩倍的 ab 負兩倍的 ab,那麼我如果這裡整理出來的話,我這邊把 w
transpose 寫在前面的話 我這邊會有一個 X 的 transpose y
那當然這是有一個兩倍這樣的點 這只是把我原來
Ein 的式子展開,這讓我們 在寫出梯度的式子的時候,看起來會比較容易一點
好所以我們式子長這個樣子,我們有三個項,第一個項是 w 的二次式,第二個項是
w 的一次式,第三個項是常數項 那為了在解 POM
的符號起見呢,我們把xTx這個東西叫做 A矩陣,我們把xTy這個東西叫做b向量
我們把yTy這個東西叫做C 常數,它是一個數字而已。
好,所以我們有A,我們有b,我們有C 好就問大家啦,你要怎麼算這個東西的梯度呢
很多同學到這個時候會感到很害怕,說哎呀我有這個向量啊,向量微積分
我沒有學好啊等等等等,好沒有錯,好你需要花一些向量微積分的力氣 但是這一件事情,沒有那麼不直覺,我們先想一個
簡單一點的例子,我們說,如果你現在W只有一個維度,你會不會做?
好,什麼叫一個維度?好我們這邊abc取出來,我們看如果我們W只有一個維度的話,會發- 生什麼事?
W只有一個維度,我的Ein就是一個一元二次方程式了
它有一個係數a是二次項係數,它有一個係數b是一次項係數,它有一個係數c是常數項係數
既然只有一個變數,那你要算梯度,那就只要對這個 變數微分就好了,我問你,好你對W微分的話得到什麼
好你說,誒這我會啊,2倍a乘上w,然後呢 減掉2倍的b,當然外面的那個N分之一這個常數我們先暫時留在那邊
你說哎呀這太簡單了,只有一個的話很簡單 那今天如果我的W是一個向量呢?好對
哪一個東西做,做了之後呢,如果你善用這些矩陣的表達方式的話
你會發現我們現在要解也是這樣,它的梯度其實是長成這個樣子
好你看看,跟左邊是對應的哦,我左邊有個a,小a
這個一個常數,然後呢,右邊有個大A,大A的這個矩陣,好 小a乘上了一維的w,大A這個矩陣乘上了向量w,這是對應的。
好左邊有一個b這個一維的常數,右邊有一個b這個矩陣,好左邊一個b出現
在這個變成,在梯度裡面變成一個常數項,右邊的b向量在梯度裡面變成 常數項是一樣的。
好實際上,這就是線性代數漂亮的地方 那我這邊實際上用了一些性質,例如我用到A其實上是一個對稱矩陣等等等等。
但是如果你花一些定義去把它推導一下的話,實際上 最後的結果非常地漂亮。
我們要寫的梯度長得就像什麼樣子?好長得就像,好我的N分之一在繼續
留著,然後裡面就是2A乘上W,現在不是那個a常數,而是大A的這個矩陣
然後減掉2倍的b,好這個b是我們的b向量,也不再是左邊的那個b常數。
好,所以再把上面我們對A跟b的定義,A跟b只是我們暫時叫的名字,
把它叫出來的話,我們就會得到,誒我們要求的梯度是長這個樣子
好所以我們現在只剩下一個任務啦,什麼時候這個梯度 會是0呢?對每個w我都可以算出它的梯度,我現在想要找到的點、
我的目標點是那個梯度是0的點 好所以怎麼樣?我就想辦法確定什麼時候這個梯度是0
要把它設成0,設成0以後你發現怎麼樣?誒,你知道啊,xTx你知道啊
你知道xTy,你知道啊,這些都從你資料裡面,你就算得出來
唯一你不知道的,就是W那個向量,所以這個是一個
這個一次的方程式,好我有很多個不知道的東西在w
裡面,不過呢我所有的事情都是一次方,好這些連立方程式
所以如果今天我的xTx是 可以求得反矩陣的話,我們講invertible,可以求得反矩陣,可以求得反矩陣
反矩陣怎麼樣?哎呀那太簡單了,我把這個反矩陣乘上去
乘上去以後,我就得到一個w跟一個反矩陣乘上去的東西,我和w就一定要等於那個東西- ,好我想
這個對大家來說不是太大的問題。
我今天,好有兩個部分,第一個部分是這個等於是我剛才的 A矩陣弄出來的這個反矩陣,這個是我的b向量,我的b向量
告訴我一個向量,然後我把兩個乘起來,就會得到我的 我要的這個最好的W到底是長什麼樣子。
好,那麼今天呢這個 我如果把這個xTx
inverse 然後乘上xT 這個部分拉出來的話,通常我們把它取一個特別的名字叫做pseudo-inverse
假的inverse,那為什麼要叫假的inverse?因為你如果想象說,這裡如果每個- X都是方方正正的
或者就是對稱,方方正正,然後有反矩陣存在的話,你這邊等於是什麼?把兩個X反矩陣,然後
一個X不反矩陣,三個乘起來,a等於一個反矩陣,然後在有一些證明裡面,你會發現說它跟- 我們常見的
方塊矩陣和反矩陣具有類似的性質,所以一般把它叫作pseudo-inverse
好那大部分的情形,xTx實際上都是
invertible,OK,都有反矩陣的存在。
為什麼會這樣呢?因為 誒這個我們看看四弦維度,xTx的維度是多少?
xTx這個矩陣的維度是d+1
乘上d+1,好這兩個矩陣乘起來。
X的維度是N乘d+1,所以誒這兩個乘起來是d+1乘d+1,好所以我只有一個d+1乘- d+1的維度
我N大概多少?N通常要比d大,啊對不對?大家學過VC dimension,現在新有一個概念說我們的
自由度是低的時候,我的N,我的資料量要比d來得大,所以
當你的N很大,然後d相對比較小的時候,大部分的時候可能因為等於是你在這個
矩陣裡面就有足夠多的自由度,然後這個足夠多的自由度會轉化成 瑣碎,它會是一個可逆的矩陣,我們說有反矩陣存在的。
好所以我們大部分的情形,我們都會碰到這種 好那如果今天沒有反矩陣的存在呢?沒有反矩陣存在的話,我們就可能
會有很多組解,啊也就是說這個解的數量可能就不是唯一的,這跟大家以前 在解這個聯立方程式面臨的情形是類似的
那這時候怎麼樣?這時候,好如果去翻翻你的線性代數課本的話,有其他的方式來定義說
pseudo-inverse這個假的反矩陣到底長什麼樣子,然後你還是可以求到 這個很多組解中的其中一組解。
但是你要去了解 這個反體中的定義是怎麼回事。
那麼在大部分呃的,例如說一些數值方法的軟體裡面呢
你都可以看到它們已經寫好了說,pseudo-inverse 這個虛假反矩陣到底要怎麼樣子show,然後可以怎麼定義出來
好所以呢,在實際上我們使用Linear Regression的時候,我們通常建議什麼?好你
看一看你要寫成這個平台上是什麼?如果那個平台上已經寫好了pseudo-invers- e的程式的話
我們建議你直接使用那個,因為直接使用那個它不但,首先你避免說誒我要去判斷說到底它是-
可逆還是不可逆的 另外呢,在那個看起來好像有反矩陣,可是實際上很接近
singular、 很接近沒有反矩陣的那些情形,數值上也能夠處理得很好。
所以這是通常我們建議大家做的 事情。
好,所以來看看我們已經推導了一個 很簡單的演算法,這個簡單的演算法這樣,第一步,第一步幾乎不用做事
你的資料拿來,從這些資料裡面做出兩個矩陣來,第一個矩陣是X
第二個,好第二個實際上不是矩陣,是一個向量y,好這是你的資料裡面 輸入跟輸出,想要的輸出的部分做一個分開的處理。
然後再來怎麼樣呢?從這個X這個大大的矩陣,你去 算它的虛假的反矩陣,它的pseudo-inverse到底長什麼樣子
然後呢,你用pseudo-inverse跟你的y乘起來,這就是你要回傳的
位置,你要回傳的這些權重,你要回傳的你的hypothesis,你的W、 你的Linear到底是 長什麼樣子。
好這就是Linear Regression的演算法。
跟大家以前可能會說,有的同學可能只在一維 或者是二維裡面學過,那個不太一樣,我們在這邊推導都是基於向量
跟矩陣,所以你可以想象,這個演算法可以很輕易地 延伸到多維空間、
多維的資料裡面,那你只要有一個在你的 所使用平台上有一個好的幫你求 pseudo-inverse的程式就好。
好那講完這個演算法呢,我們來看看說我們這個演算法非常簡單就是一堆一堆的矩陣 運算。
那大家來玩一玩看看說,誒你已經,如果你已經用這個演算法已經求到你最好的 W,最好的那個W Linear
是什麼了,那請問你如果拿這個 W Linear 去在你的訓練的資料上做預測的話
那你會得到什麼?一般這個預測我們把它叫做^y,也就是說誒今天 你是一個估計的值,好到底是長什麼樣子。
那這個^y它的矩陣形式,我們到底要怎麼表達? 好大家看一看之後,我希望大家選到正確的答案是3。
呃這只是把這個你 對Linear的這個W還有最佳值,把它帶進去,帶進去之後你就得到^y是長什麼樣子?
那大家注意到說,這個形式裡面其實非常地簡單,好我們是從 原來的y然後經過一個轉換,這個轉換有什麼?這個轉換有X
還有X的這個 pseudo-inverse,兩個乘起來,這是我們從y轉成
^y的一個方式,那這在我們下一半的分析,會慢慢地用到