簡單介紹
感知器(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
透過上面這張圖,我們重新整理一下
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
留言列表