機器學習筆記(一) 感知機算法 之 原理篇

這篇學習筆記強調幾何直覺,同時也注重感知機算法內部的動機。限於篇幅,這裏僅僅討論了感知機的通常情形、損失函數的引入、工做原理。關於感知機的對偶形式和核感知機,會專門寫另一篇文章。關於感知機的實現代碼,亦不會在這裏出現,會有一篇專門的文章介紹如何編寫代碼實現感知機,那裏會有幾個使用感知機作分類的小案例。算法


感知機算法是經典的神經網絡模型,雖然只有一層神經網絡,但前向傳播的思想已經具有。究其本質,感知機指這樣一個映射函數:\(sign(w_ix_i + b)\),將數據帶進去計算能夠獲得輸出值,經過比較輸出值和數據本來對應的標籤值是否正負號相同從而推斷出模型訓練的結果。網絡

1. 何爲感知機?

接上面的敘述,感知機的數學模型爲\(sign(w_ix_i + b)\),其中\(w = (w_1,w_2,...,w_n)\)是權重向量,\(x_i = (x_i^{1},x_i^{2},...,x_i^{n})\)是一個樣本點,從符號很容易理解,它們都是定義在\(R^n\)空間的(若是難以理解,能夠簡單的理解爲樣本點有\(n\)個維度,相應的權重向量也須有\(n\)個維度和它相匹配).機器學習

下面是一副經典的感知機模型圖:函數

單層感知機

最左邊的表示輸入一個樣本點的特徵向量,經過各自的權重前向傳播到神經元,在神經元有一個加法器,最後經過一個激活函數來決定是否激活。最下面的\(x_0\)是bias項,通常文獻中記爲\(b\)工具


2. 感知機能夠解決什麼問題?

這裏咱們能夠看一個經典的例子,利用感知機模型來解決經典的\(OR問題\)學習

【例1】設有4個樣本點,\((0,0),(0,1),(1,0),(1,1)\),根據\(OR\)的邏輯,必須至少有一個不爲\(0\)才能斷定爲真,翻譯成機器學習的表達即標籤爲\((-1,1,1,1)\),這裏負數表示負樣本,正數表示正樣本。優化

OR邏輯

咱們但願的是能找到一條直線(分類器),將正負樣本點準確分開。根據\(\S1\)中的敘述,樣本點是定義在\(R^2\)空間的,顯然權重向量爲\(w = (w_1,w_2)\),考慮偏置項\(b\),通常添補一個\(x_i^{0}\)\(-1\)以便把式子\(\sum\limits_{1}^{n} w_ix_i + b\)直接寫成\(\sum\limits_{0}^{n}w_ix_i\)。先給出權重更新公式$ w_{ij} ← w_{ij} − η(y_{j} − t_{j} ) · x_i $, 稍後會給出解釋。spa

設置權重初值爲\(w = (0,0)\)。而且約定當且僅當\(sign(x=0)=0\),算做誤分類。依次代入樣本點:翻譯

  1. 代入\((0,0)\)點,\(sign(wx + b) = sign(0 * 0 + 0 * 0 + 0*(-1)) = 0\),沒法斷定是否爲負類,錯誤。blog

    • 更新權重

      \(b = 0 - 1 * (1-0) * (-1)=1\)

      \(w_1 = 0 - 1 * (1-0) * 0=0\)

      \(w_2 = 0 - 1 * (1-0) * 0=0\)

  2. 代入\((0,1)\)點,\(sign(wx + b) = sign(0 * 0 + 0 * 1 +1 *(-1)) = -1\),斷定爲負類,錯誤。

    • 更新權重

      \(b = 1 - 1 * (1 - (-1)) * (-1) = -1\)

      \(w_1 = 0 - 1 * (1 - (-1))*0 = 0\)

      \(w_2 = 0 - 1*(1-(-1))*1 = 2\)

  3. 代入\((1,0)\)點,\(sign(wx+b)=sign(0 * 1 + 2 * 0 + (-1) * (-1))= 1\),斷定爲正類,正確。

  4. 代入\((1,1)\)點,\(sign(wx + b)=sign(0 * 1 + 2 * 1 + (-1)* -1)=3\),斷定爲正類,正確。

  5. 第二輪遍歷,代入\((0,0)\)\(sign(0*0 + 2*0 + (-1)*-1)=1\),沒法斷定是否爲負類,錯誤。

    • 更新權重

      \(b = -1 - 1*(1-(-1))*(-1)=1\)

      \(w_1 = 0 - 1*(1-(-1))*0=0\)

      \(w_2 = 2 - 1*(1-(-1))*0 = 2\)

  6. 代入\((0,1)\)\(sign(0 * 0 + 2 * 1 + 1 * (-1))=1\),斷定爲正類,正確。

後面的步驟就省略不寫了,讀者能夠自行驗算。根據代碼計算的結果,若是初始權重設爲[0,0,0]這樣比較極端的值,學習速率爲1時,且按照順序選擇樣本點時,須要完整的走完兩輪迭代才能獲得穩定的權重。最後解得分類函數爲: \(sign(2x^{(1)} + 2x^{(2)} - 1)\),讀者能夠帶數據進去驗算。


3. 感知機不能解決什麼問題?

這裏有一段經典的公案,《感知機》是這本書的出現,直接讓神經網絡這一流派的研究中止了二十年。由於書中在詳盡介紹感知機原理的同時,還指出了感知機的致命缺陷:沒法解決\(XOR\)問題。

\(XOR\)又稱爲異或,它的邏輯以下:

變量1 變量2 邏輯運算結果
0 0 0
0 1 1
1 0 1
1 1 0

這是個比較奇怪的邏輯,變量之間當且僅當不相等時爲真。

XOR邏輯

憑着幾何直覺,咱們很快就能發現,不可能有這樣的超平面,能準確的分開紅色和藍色兩類樣本。

這裏小結一下:

感知機能夠解決徹底線性可分的問題。

這彷佛是一句廢話,可是感知機背後強大的思想確衍生出了支持向量機這個傳統機器學習的巔峯。而對於線性不可分的樣本,可使用多層神經網絡(\(Multi \space Layer \space Network\))或者使用核感知機,事實上兩層的感知機就能夠解決\(XOR\)問題


4. 感知機是如何工做的?

在上面這個略顯囉嗦的例子,咱們看到了感知機的工做方法。它的算法流程能夠歸納以下:

  1. 選取初始值\(w_0, b_0\)
  2. 在訓練集中選取一個數據點\((x_i,y_i)\)
  3. 檢查在這個樣本點上,模型是否會錯誤分類,若是錯誤分類,則更新\(w_i,b_i\)
  4. 回到第2步,直到整個訓練集中沒有誤分類點

從上面的算法,咱們至少能讀出這麼幾層意思:

  1. 初始值是隨機給的,賦值爲0是一個簡便的作法,但一般設置爲一個很小的隨機值,後面會詳細討論
  2. 每次訓練其實只用到一個樣本點,即便訓練集中有不少數據點亦是如此。這和 \(w_ix_i\)這個表達式的計算方式有關,詳見上面的數值例子。
  3. 算法的重點在誤分類這裏,那麼如何定義誤分類就很是要緊了。
  4. 算法是一個迭代的過程,且要知足全部樣本點都分類正確才停機。反過來理解,就是感知機算法只能運用於徹底線性可分的數據集。若是數據集是不能徹底線性可分的,感知機永遠不會停機,除非訓練以前先設置好停機條件,常見的好比設置訓練次數或者偏差上界(一旦偏差小於$ \varepsilon $ 便可停機)。

顯然,如何定義錯誤是感知機算法裏的頭等大事。


5. 該如何定義錯誤?

通俗定義:映射函數\(sign(wx + b)\)求解獲得的值和原始標籤值異號,即表示分類錯誤。

根據這個表述,咱們能夠很容易地將數據集分類:正確分類和錯誤分類。顯然咱們要作的事就是想辦法讓模型把分錯的樣本點分對,同時對於本來已經分對的點不能又分錯了。

若是採用幾何做圖的方法,能夠不斷調整超平面(即上面提到的直線,術語上通稱爲超平面)來達到目標,只要給定的數據集是徹底線性可分的。可是,若是是高維空間的數據集,幾何直覺就不靈了,這時須要引入代數工具。而引入損失函數就是這樣的工具,它和咱們依靠幾何直覺作的事情是相同的:把全部點分對 \(\iff\) 將損失函數降到最小。

損失函數的定義能夠憑直覺而爲:計算誤分類樣本的個數。例如樣本空間共有\(M\)個樣本,其中錯誤分類的樣本屬於區域\(E\),顯然損失函數就是 \(\sum\limits_{i\in E}x_i\) 。但問題隨之而來,咱們沒有工具來優化這個函數,使之向最小值運動。因而天然地想到,計算全部誤分類點到超平面的距離,對距離之和作優化。具體的思路是這樣的:

  1. 找到描述樣本點到超平面距離的計算式
  2. 正確分類的樣本點的距離和丟棄不看
  3. 定義誤分類的距離和,對它求最小值

\(R^n\)空間中,任何一個樣本點\(x_0\)到超平面的距離公式 \(\frac{1}{||w||}|w\cdot x + b|\)。對於誤分類來講,\(y_i(w \cdot x + b) < 0\),因而若是有一個誤分類點\(x_0\),那麼它到超平面的距離能夠寫做 \(-y_i\frac{1}{||w||}|w\cdot x + b|\)。對於全部的誤分類來講,天然能夠寫出下面的損失函數:\[L(w,b) = -\sum\limits_{i\in E} y_i \frac{1}{||w||}|w\cdot x + b|\]。這裏添加負號的目的是使得損失函數的值恆爲正數,這樣對它求最小值可使用凸優化工具。顯然地,誤分類樣本點越少,\(L(w,b)\)越小;誤分類點離超平面的距離越小,\(L(w,b)\)越小。

這裏捨棄掉\(\frac{1}{||W||}\)是由於它是一個正的係數,而且對於\(L(w,b)\)具備伸縮性,所以不影響最小化\(L(w,b)\)


6. 知錯後如何改錯?

回顧微分學知識,咱們知道一個全局的凸函數取得最小值是在導數爲0處。可是,放在多元函數的觀點來看,一元函數的導數本質上也是梯度。當一個函數沿着負梯度的方向運動是,函數值的減小是最快的;沿着正梯度方向運動時,函數值增長啊是最快的。下面咱們就來求其梯度。

\[\frac{\partial L}{\partial w} = - \sum\limits_{x_i \in E} y_i x_i\]

\[\frac{\partial L}{\partial b} = - \sum\limits_{x_i \in E} y_i\]

咱們來看關於\(w\)的梯度表達式,本質上就是找到全部的誤分類點,而後把標籤值\(y_i\)做爲一個權重(\(+1/-1\))。若是\(x_1\)是一個被錯誤分類的點,假設這個點對應的原始標籤是正類,如今被分紅負類,因此在前面加一個符號,表示往反方向彌補。因此\(\sum\limits_{x_i \in E}y_ix_i\)

能夠理解爲經過全部錯誤分類的樣本點擬合出一個運動方向,往那個方向運動能夠彌補模型中\(w\)參數的錯誤。

而例1中,咱們每次只選取一個樣本點,假設這個樣本點是\((x_i,y_i)\),那麼更新公式就是 \(w = w + \eta y_i x_i\),其中的\(\eta\)是每次更新的步長,術語爲學習率。同理,偏置項的更新公式爲 \(b = b + \eta y_i\)


7. \(Novikoff\) 定理

先敘述一下這個定理。定理來自李航老師的《統計學習方法》第二版Page42。

設訓練數據集\(T = {(x_1,y_1),(X_2,y_2),...,(x_N,y_N)}\)是線性可分的,其中\(x_i \in X = R^n, y_i \in Y = \{-1,+1\}, i = 1,2,...,N\),則

(1) 存在知足條件\(||\hat{w}_{opt}|| = 1\)的超平面\(\hat{w}_{opt} \cdot \hat{x} = w_{opt} \cdot x + b_{opt}\)將訓練數據集徹底正確分開;且存在\(\gamma > 0\),對全部的\(i = 1,2,...,N\)\[y_i (\hat{w}_{opt} \cdot \hat{x}_i) = y_i (w_{opt} \cdot x_i + b_{opt}) \ge \gamma\]

(2)令\(R = \max\limits_{1 \le i \le N} ||\hat{x}_i||\),則感知機算法在訓練數據集上的誤分類次數\(k\)知足不等式 \[k \le (\frac{R}{\gamma})^2\]

先從直覺上理解下這個定理表述的意思。大意是對於能夠找出線性超平面作分類的數據集,存在一個下界$ \gamma $,全部樣本點到超平面的距離都至少大於這個 $ \gamma $,同時錯誤分類的次數有一個上界,第 \(k+1\) 次以後,分類都是正確的,算法最終是收斂的。

證實

(1) 因爲數據是線性可分的,所以必定存在一個分割超平面\(S\),不妨就取\(S\)的參數爲\(\hat{w}_{opt}\),顯然對於超平面上的全部點\(x\),都有\(\hat{w}_{opt} \cdot x = w_{opt} \cdot x + b_{opt} = 0\),並知足\(||\hat{w}_{opt}||=1\)。而對於訓練數據集中的樣本點,因爲如今都被正確分類了,因此有\(\hat{w}_{opt} \cdot x_i > 0\),因而取 \(\gamma = \min\limits_{i} \{y_i(w_{opt} \cdot x_i + b_{opt} \}\),這就獲得了下界。

(2) 由 \(k \le (\frac{R}{\gamma})^2\)推出\(k \gamma \le \sqrt{k} R\)

假設\((x_i,y_i)\)是一個在第\(k\)次被誤分類的點,那麼這件事的觸發條件是 \(y_i (\hat{w}_{k-1} \cdot x_i) \le 0\).

由更新公式,\(\hat{w}_k = \hat{w}_{k-1} + \eta y_i \hat{x}_{i}\) .

  • \(\hat{w}_{k} \cdot \hat{w}_{opt} = \hat{w}_{k-1} \cdot \hat{w}_{opt} + \eta y_i \hat{w}_{opt} \cdot \hat{x}_i \ge \hat{w}_{k-1} \cdot \hat{w}_{opt} + \eta \gamma\) .

    迭代\(k-1\)次當即獲得 \(\hat{w}_{k} \cdot \hat{w}_{opt} \ge k\eta\gamma\).

  • \(\hat{w}_k\)兩邊平方,

    \(||\hat{w}_k||^2 = ||\hat{w}_{k-1}||^2 + 2\eta y_i \hat{w}_{k-1} \cdot \hat{x}_{i} + \eta^2 ||\hat{x}_{i}||^2\). 注意到中間這項是負數(由於這是誤分類點)

    當即獲得 \(||\hat{w}_k||^2 \le ||\hat{w}_{k-1}||^2 + \eta^2 ||\hat{x}_{i}||^2 \le ||\hat{w}_{k-1}||^2 + \eta^2 R^2\).

    迭代\(k-1\)次後當即獲得 \(||\hat{w}_k||^2 \le k \eta^2 R^2\) .

便可創建不等式

\(k\eta\gamma \le \hat{w}_{k} \cdot \hat{w}_{opt} \le ||\hat{w}_{k}|| \cdot ||\hat{w}_{opt}|| \le \sqrt{k}\eta R\). 再稍加變形就獲得欲證的式子。

這裏\(R\)其實只是一個記號而已,它表明的意思是從全部誤分類中找到模長最大的,而這個記號實際上是從證實過程當中產生的。


做爲介紹感知機原理的文章,已經寫得很是長啦,能夠就此打住~

若是有任何紕漏差錯,歡迎評論互動。

相關文章
相關標籤/搜索