close

第一週談完基本的單變數線性迴歸 (y=wx+b) 和 cost function的概念之後,

第二週把概念擴展到多變數的線性迴歸上。

image

真實的世界不會只有一個變因,比方說影響房價的不只會有大小,還包括有幾層樓、屋齡有多久等等,

這些變因,也就是 input,我們稱之為 feature (特徵),特徵的數量以n來表示,

既然有多個特徵,則要給他們編號 j ,編號就會放在右下角,而樣品編號 i 則放在右上角。

image

公式就是從原本的 f=wx+b變成 f=w1x1 + w2x2 +... +b ,w可以視為每一個input 對 output的影響力,

b即截距就是基本價格,即便所有變因都是0,還是還有一個基本的數字。

image

為了要方便計算,所以慣例上會把這些model的參數與特徵分別拉出來變成一組向量,

所以可以再把方程式中的w與x 改成向量形態,而 w 與 x之間我們也不再叫它相乘,而是叫「內積」dot product。

這個 Vectroization (向量化) 概念對於加速運算很重要,如下張slide所示: 

image

最差的方式就是用手刻方程式的方程式來做,

如果引入 summation 的方式就可以像右上角那樣用 for loop 來執行,

但最有效率的方式就是用向量向積來表示,

不但程式寫起來簡單明瞭,而且能善用CPU或GPU的平行運算能力大大增速。

為了要使用vectorization,最方面的就是引入 NumPy 這個套件,

要注意的在純量的世界中都是從1開始計數,但是向量的世界則是從0開始,所以第一個input是 x[0]而不是x[1]。

接下來進一步闡釋 vectorization的概念: 

image

要注意到如果是採用傳統的for loop,需要從0開始一個一個跑這個loop 之後再去加總,

但如果是用vectorization,則電腦會幫你把所有的w與x都列出來後每一組w與x的內積都同時運算,

因此時間自然而然就省下很多。這個流程對於大量資料的情境尤其有意義。

image

在做Gradient descent 時 vectorization 的效果也很明顯,

使用 gradient descent 來調整參數是把原始參數扣掉 learning rate 與 微分項 之間的乘積,

如果有16個weighting要更新,在不使用vectorization 的情況下需要一個一個慢慢用for loop更新,

反觀 vectorization 就是把 weighing 和 gradient 化成向量後全部一起更新,速度自然就快很多了。

 

Notebook中也示範了 vectorization 和 for loop 之間的差異,

如果是要用 vectorization 的內積去運算 a 與 b 兩個1000萬個數字的內積只要花 174 ms,

image

image

而如果是用一般的乘積來運算則要花9543 ms,花費接近60倍的時間。

image

image

image

arrow
arrow

    William.Echoes 發表在 痞客邦 留言(0) 人氣()