江寒越寫越順,下筆如飛。
“……
我們定義損失函數如下:L(w,b)=?(1/||w||)∑yi(w?xi+b),根據預設的學習率η,不斷調整權重w和偏置b,直到損失函數到達極小點,即可得到可用的函數模型。
綜上所述,學習算法如下:
首先選定訓練數據集T=(x1,y1),(x2,y2),...,(xN,yN),yi∈{?1,+1}并指定一個學習率η(0<η<1);
1、任意選定權重w和偏置b;
2、讀入數據點(xi,yi);
3、判斷該數據點是否為誤分類點,如果yi(w?xi+b)≤0則更新w=w+ηyixi;b=b+ηyi;
4、重復進行2、3步,直到沒有誤分類點。
此時,我們就獲得了最佳的w和b,把它們代入y=wx+b,就得到了一個數學模型。”
感知機的學習過程,有個非常形象的比喻。
假設在一個棋盤上,有一堆黑子,和一堆白子,它們不相混合。
下面,拿一根細棍放上去。
我們希望這根棍子,能恰好將黑子和白子分開,棍子的一邊全是黑子,另一邊全是白子。
先把棍子隨機扔到棋盤上,如果恰好將黑子和白子分開了,那就皆大歡喜,否則的話,就平移和調整棍子的角度,直到所有白子和黑子恰好分開……
那根棍子就是感知機,而挪動棍子的過程,就是感知機在學習。
棍子的角度和平移量,就是要尋找的參數w和b,也就是直線(棍子)在平面直角坐標系(棋盤)里的函數解析式。
瞧,夠通俗易懂吧?
可惜寫論文就不能這么寫了。
感知機是人工神經網絡的雛形,其中有個關鍵概念,叫激活函數,它決定了一個神經元是否有輸出。
江寒在這里,用一個階躍函數sign(x)作為激活函數,其定義為:x<0時函數取值-1;x≥0時函數值為1。
只要將sign換成sigmoid或者其他非線性函數,就是真正的單層前饋神經網絡了。
但江寒并沒有著急將sign之外的函數拋出去。
在第一篇論文里,最重要的是提出概念,其他東西完全可以在下一篇論文中再討論。
能多水幾篇,豈不更加美滋滋?
搞定了輸入空間是1維的情況,接下來,就可以擴展到N維。
“對于一般情況,當有n個輸入信號時,假設輸入空間是x∈Rn,輸出空間是y∈{+1,-1}。輸入x∈X表示實例的特征向量,對應于輸入空間的點;輸出y屬于Y表示實例的類別。
由輸入空間到輸出空間的如下函數:Ψ(x)=rsign(w1x1+w2x2+……+wnxn+b)=rsign(wTx+b),就可以稱之為感知機,其中w∈Rn,b∈R為感知機算法的參數……”
在討論完n個輸入信號的情況后,江寒指出:
“模型建立之后,經過訓練,就可以得到一組權重和偏置,這些參數確定了一個分離超平面(定義為n維空間上的一個n-1維子空間),此超平面可以將訓練集中的數據,完全正確地分成兩份,一份為正,一份為負(或者0,可以自己定義)。”
取得了模型的參數后,就可以把測試數據放進去,根據模型函數運算的結果,就能對數據進行分類。
感知器用處很廣泛,幾乎所有二分類問題,都可以用它來試一試。
當然,必須是線性可分的問題,線性不可分的問題,是不能用單層感知器解決的。
例如年齡和有沒有生活經驗,就不存在線性關系;長得帥不帥和學習好不好,也沒有線性關系……
關于如何高效地判斷數據是否線性可分,江寒還真研究過,只是這個題目比較大,三言兩語說不清楚。
嗯……好像又能多水一篇或幾篇SCI?