機器學習-感知機perceptron

在機器學習中,感知機(perceptron)是二分類的線性分類模型,屬於監督學習算法。輸入爲實例的特徵向量,輸出爲實例的類別(取+1和-1)。感知機對應於輸入空間中將實例劃分爲兩類的分離超平面。感知機旨在求出該超平面,爲求得超平面導入了基於誤分類的損失函數,利用梯度下降法 對損失函數進行最優化(最優化)。感知機的學習算法具有簡單而易於實現的優點,分爲原始形式和對偶形式。感知機預測是用學習得到的感知機模型對新的實例進行預測的,因此屬於判別模型。感知機由Rosenblatt於1957年提出的,是神經網絡支持向量機的基礎。

定義

假設輸入空間(特徵向量)爲XRn ,輸出空間爲Y={-1, +1}。輸入xX 表示實例的特徵向量,對應於輸入空間的點;輸出y∈Y表示示例的類別。由輸入空間到輸出空間的函數爲

f(x)=sign(wx+b)

稱爲感知機。其中,參數w叫做權值向量weight,b稱爲偏置biaswx 表示w和x的點積

i=1mwixi=w1x1+w2x2+...+wnxn

sign爲符號函數,即

f(x)={+11if x>=0else

在二分類問題中,f(x) 的值(+1或-1)用於分類x 爲正樣本(+1)還是負樣本(-1)。感知機是一種線性分類模型,屬於判別模型。我們需要做的就是找到一個最佳的滿足wx+b=0 的w和b值,即分離超平面(separating hyperplane)。如下圖,一個線性可分的感知機模型


這裏寫圖片描述

中間的直線即wx+b=0 這條直線。

線性分類器的幾何表示有:直線、平面、超平面。

學習策略

核心:極小化損失函數。

如果訓練集是可分的,感知機的學習目的是求得一個能將訓練集正實例點和負實例點完全分開的分離超平面。爲了找到這樣一個平面(或超平面),即確定感知機模型參數w和b,我們採用的是損失函數,同時並將損失函數極小化。

對於損失函數的選擇,我們採用的是誤分類點到超平面的距離(可以自己推算一下,這裏採用的是幾何間距,就是點到直線的距離):

1w|wx0+b|

其中||w||L2 範數。

對於誤分類點(xi,yi) 來說:

yi(wxi+b)>0

誤分類點到超平面的距離爲:

1wyi(wx0+b)

那麼,所有點到超平面的總距離爲:

1wxiϵMyi|wx0+b|

不考慮1||w|| ,就得到感知機的損失函數了。

L(w,b)=xiϵMyi(wx0+b)

其中M爲誤分類的集合。這個損失函數就是感知機學習的經驗風險函數

可以看出,隨時函數L(w,b) 是非負的。如果沒有誤分類點,則損失函數的值爲0,而且誤分類點越少,誤分類點距離超平面就越近,損失函數值就越小。同時,損失函數L(w,b) 是連續可導函數。

學習算法

感知機學習轉變成求解損失函數L(w,b) 的最優化問題。最優化的方法是隨機梯度下降法(stochastic gradient descent),這裏採用的就是該方法。關於梯度下降的詳細內容,參考wikipedia Gradient descent。下面給出一個簡單的梯度下降的可視化圖:


這裏寫圖片描述

上圖就是隨機梯度下降法一步一步達到最優值的過程,說明一下,梯度下降其實是局部最優。感知機學習算法本身是誤分類驅動的,因此我們採用隨機梯度下降法。首先,任選一個超平面w0b0 ,然後使用梯度下降法不斷地極小化目標函數

minw,bL(w,b)=xiϵMyi(wx0+b)

極小化過程不是一次使M中所有誤分類點的梯度下降,而是一次隨機的選取一個誤分類點使其梯度下降。使用的規則爲 θ:=θαθ(θ) ,其中α 是步長,θ(θ) 是梯度。假設誤分類點集合M 是固定的,那麼損失函數L(w,b) 的梯度通過偏導計算:

L(w,b)w=xiϵMyixi

L(w,b)b=xiϵMyi

然後,隨機選取一個誤分類點,根據上面的規則,計算新的w,b ,然後進行更新:

w:=w+ηyixi

b:=b+ηyi

其中η 是步長,大於0小於1,在統計學習中稱之爲學習率(learning rate)。這樣,通過迭代可以期待損失函數L(w,b) 不斷減小,直至爲0.

下面給出一個感知器學習的圖,比較形象:


這裏寫圖片描述

由於上圖採取的損失函數不同,所以權值的變化式子有點區別,不過思想都是一樣的。

算法描述如下:

算法:感知機學習算法原始形式

輸入:T={(x1,y1),(x2,y2)...(xN,yN)}(其中xi∈X=Rn,yi∈Y={-1, +1},i=1,2...N,學習速率爲η)
輸出:w, b;感知機模型f(x)=sign(w·x+b)
(1) 初始化w0,b0,權值可以初始化爲0或一個很小的隨機數
(2) 在訓練數據集中選取(x_i, y_i)
(3) 如果yi(w xi+b)≤0
           w = w + ηy_ix_i
           b = b + ηy_i
(4) 轉至(2),直至訓練集中沒有誤分類點

解釋:當一個實例點被誤分類時,調整w,b,使分離超平面向該誤分類點的一側移動,以減少該誤分類點與超平面的距離,直至超越該點被正確分類。

僞代碼描述:

這裏寫圖片描述

對於每個wx 其實是這樣子的(假設x表示的是七維):


這裏寫圖片描述

yj(t)=f[w(t)xj+b]=f[w1(t)xj,1+w2(t)xj,2++wn(t)xj,n+b]

對於輸入的每個特徵都附加一個權值,然後將相加得到一個和函數f,最後該函數的輸出即爲輸出的y值。

實例

正樣本點:x1=(3,3)T ,x2=(4,3)T
負樣本點:x1=(1,1)T
求感知機模型f(x)=sign(wx+b) ,其中w=(w(1),w(2))T,x=(x(1),x(2))T

解答思路:根據上面講解的,寫初始化權值w和偏置b,然後一步一步的更新權值,直到所有的點都分正確爲止。

解:

(1) 令w0=0,b0=0
(2) 隨機的取一個點,如x1 ,計算y1(w0x1+b0) ,結果爲0,表示未被正確分類,根據下面的式子更新w,b(此例中,我們將學習率η 設置爲1):

ww+ηyixi

bb+ηyi

計算得到

w1=w0+ηy1x1=(3,3)T

b1=b0+ηy1=1

得到一個模型

w1x+b1=3x(1)+3x(2)+1

(3)接着繼續,計算各個點是否分錯,通過計算得到,x1x2 兩個點,yi(w0xi+b1) 都大於0,所以是被正確分類的點,無需修改權值w和bias項;而對於x3 通過計算得到y3(w0x3+b1)<0 ,誤分了,所以修改權值:

w2=w1+y3x3=(2,2)T

b2=b1+y3=0

得到線性模型:

w2x+b2=2x(1)+2x(2)

一次下去,知道所有的點都有yi(w0xi+b1)>0 即可


……
……
……

最後求得

w7=(1,1)T,b7=3

所以感知機模型爲:

f(x)=sign(x(1)+x(2)3)

即我們所求的感知機模型。

小結

感知器Perceptron在機器學習當中是相當重要的基礎,理解好感知器對後面的SVM和神經網絡都有很大的幫助。事實上感知器學習就是一個損失函數的最優化問題,這裏採用的是隨機梯度下降法來優化。

好吧,對於感知機的介紹,就到此爲止!在複習的過程中順便做下筆記,搜搜資料,整理整理,也算是給自己一個交代吧。希望本文章能對大家能有點幫助。

References

[1] 統計學習方法, 李航 著
[2] Wikiwand之Perceptron http://www.wikiwand.com/en/Perceptron
[3] Wikipedia https://en.wikipedia.org/wiki/Machine_learning



本欄目機器學習持續更新中,歡迎來訪:Dream_Angel_Z 博客
新浪微博: @拾毅者


發佈了234 篇原創文章 · 獲贊 150 · 訪問量 105萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章