close

簡單介紹

感知器(Perceptron)是機器學習領域最早被開發出來的演算法,也稱為Perceptron Learning Algorithm(PLA),在很多的教科書上面或是一些相關課程,一開始都是會介紹這個演算法。這個演算法是整個機器學習基礎知識,後續許多演算法都是基於這個演算法做修改與發展。

演算法

 

那我們開始討論這個演算法

For X = (x1, x2, x3, ... , xn)

z = w1*x1 + w2*x2 + ... + wn*xn

f(z)= 1 if z > threshold, f(z)= 0 otherwise

為了讓式子顯得比較美,我們可以另x0 = 1 和 w0 = -threshold

這樣公式可以重新寫成

z = w0*x0 + w1*x1 + w2*x2 + ... + wn*xn = summation(wi*xi) for i = 0, 1, 2, ..., n

用向量表示 z = w.transpose * x

f(z) = 1 z > 0, 0 otherwise 

上面這個公式又可以簡化成f(z)= sign(z)

而f(z)就是我們要的輸出y了

說到這邊,可能有些人已經對上面的數學感到頭疼了,那請你先深呼吸,我們還要繼續,目前為止我們只討論到輸出y產生的過程,在AI相關領域,我們會經常聽到有人說要訓練模型,所謂的訓練模型就是更新權重w,接下來就是要說感知器演算法是如何更新權重的。

if  y  ≠ f(z)

w = w + x*y

螢幕快照 2018-08-07 上午11.11.15.png

透過上面這張圖,我們重新整理一下

sigma = z = summation(wi*xi) for i = 0, 1, 2, ..., n

activation = f(z) = sign(z)

演算法

for t = 0,1 ,2 ...

1. find a mistake:sign(wt*xt) ≠ yt

2. update w by w(t+1) = wt + xt*yt

untill no more mistake

then return w

這意味著感知器演算法的資料一定要是線性可分,否則就形成無窮回圈。

 

感知器的python實現:https://github.com/event10342012/ML-practiceing/blob/master/perceptron.py

 

 

 

arrow
arrow

    Leo 發表在 痞客邦 留言(0) 人氣()