1. 程式人生 > >記一下機器學習筆記 Rosenblatt感知機

記一下機器學習筆記 Rosenblatt感知機

一入ML深似海啊…
這裡主要是《神經網路與機器學習》(Neural Networks and Learning Machines,以下簡稱《神機》)的筆記,以及一些周志華的《機器學習》的內容,可能夾雜有自己的吐槽,以及自己用R語言隨便擼的實現。
話說這個《神經網路與機器學習》還真是奇書,不知是作者風格還是翻譯問題,一眼望去看不到幾句人話(也許是水利狗看不懂),感覺我就是純買來自虐的。
作為開始當然是最古老的機器學習演算法之一,神經網路的板磚感知機,對應《神機》的第一章。

因為是Rosenblatt提出的模型所以就加上了他名字作為字首。這是一個有監督學習,也就是不僅給出自變數還要給出結果值讓機器自個擬合的模型,而且是一個二分類模型。再說清楚一點,這玩意只能分線性可分的樣本,也就是對於二維的資料,它只能搞一條直線把樣本分開,對於三維的資料,只能搞個平面把樣本分開。
所以像居然連異或運算都不能弄之類的對它的吐槽歷來不少。

感知機概念

感知機由一個線性組合器(說白了就是把一系列輸入值加權求和)以及一個硬限幅器(說白了就是拿前面的求和取符號)組成。具體樣子參考下圖(來自《神機》):
這裡寫圖片描述
我們將一組輸入值記為x1,x2,...,xm,相應的權值記為w1,w2,w3...wm,另外還要有個偏置值b(相當於線性迴歸裡邊的截距)。把這些輸入到感知機裡邊進行加權求和:

v=i=1mwixi+b
加權和v稱為誘導區域性域
然後對這個v取符號,也就是大於0取1,小於0取-1,就這樣決定這組輸入值歸為哪類:
y=sign(v)
y={+11xC1xC2.
可以用逼格更高的矩陣形式簡潔表示:
y
=sign(wTx+b)

xw就是把w1,w2,w3...wmx1,x2,...,xm寫成一列陣,然後把前者轉置為橫陣再兩矩陣相乘,也就是兩者對應的每一項相乘再求和。
那麼每組輸入值x就各是一個樣本。

又或者從幾何角度理解:在m維空間上有這麼一個超平面wTx+b=0x=[x1,x2,...,xm]T是這個空間上的一個點,這個點在超平面的一邊歸為一類,若在另一邊歸為另一類。

所以說樣本必須線性可分的才可以被它分類。

感知機收斂定理

然後這玩意的學習方式是不斷的誤差修正,稱為誤差修正學習原則
當一個樣本被正確分類的時候就沒啥事,要是被錯誤分類了就根據樣本的各個分量調整權值,就這樣把整套樣本丟進去跑幾趟直到誤差收斂為止。
現在乾脆把偏置b

弄進樣本x裡去,定義第n個輸入樣本:

x(n)=[+1,x1(n),x2(n),...,xm(n)]T
然後根據迭代步數n把權值向量這樣定義:
w(n)=[w0(n),w1(n),w2(n),...,wm(n)]T
其中w0(n)即對應偏置b。這樣輸出可以簡約的改成:
v(n)=i=1mwi(n)xi(n)=w(n)Tx(n)

經過學習之後的感知機應該有這麼一套權值w

wTx>0wTx0xC1x