Learning to answer Yes/No
Recap
目標:判斷該不該給一個用戶核發信用卡
Perceptron Hypothesis Set
對每一筆 我們都計算一筆權重分數,然後根據有沒有大於 threshold 來通過或拒絕,換成數學式如下:
如此一來,輸出 就變成只有 1 (good) 和 -1 (bad)
用矩陣表達
我們可以將上面的式子化成矩陣來表示,透過將 threshold 視為權重的一部份(),並將 設為 1,就能得到下列的數學式:
Notation Conventions
- traning examples size:
- features size:
- : an input vector
- : the -th vector in
- 和 同理
從空間視角來看
如果我們放在空間中來看:
- featrues : points in
- labels : +1 或 -1 (用顏色表示)
- perceptron : 中的超平面 (可以將空間一分為二的邊界)
我們的目的就是找到一個 可以很剛好地把 不同的 們分開
只有兩種,所以 perceptrons 其實就是 linear binary classifiers
Perceptron Learning Algorithm (PLA)
如何在 (所有可能的 perceptrons) 裡面找到一個 ,讓這個 和 (理想中的完美函數) 盡可能地接近?
註: 由於 perceptron 內的需要設定的數值只有 ,因此接下來直接用 來表示
PLA 流程
從 (零向量) 開始,
第一步: 找 mistake
使用 進行分類,找到一個 mistake ,也就是
第二步: 更新
如下圖,如果 ,但 sign 的結果是 -1,即 ,也就是說 和 的夾角大於 90 度,分類錯了,因此我們必須將 旋轉讓夾角小於 90。更新的方法就是直接做向量的合成:
實際上表示的是 (分類線) 的法向量,因此如果 和 的夾角小於 90 度,也就是 ,則分類為 +1,反之亦然。
就這樣直到找不到 mistake 為止
sign = 0 怎麼辦
當 sign = 0 的時候,實際上有許多種處理方法,每個人都有自己的慣例:
- 將 sign(0) 視為 -1
- 將 sign(0) 視為 +1
- 直接更新
實際上除了 會出現這種情況外,其餘要發生 sign = 0 的機會不高
Cyclic PLA
上面的流程還有問題沒有解決: 怎麼找 mistake? 如果有很多個 mistake 怎麼辦? 實務上,常用的方法是遍歷每個點,從 到 ,遇到 mistake 就更新,直到遍歷了每個點都沒有找到 mistake 為止,這種方法稱為 cyclic PLA。
Linear Separability
PLA 基本上只適用於可以線性二分的 ,如下圖所示:
證明 PLA 會停止
假設 linear separable,也就是說一定有一個 使得 因為可以完美分類,代表每一個 和 的夾角都大於 0:
然後,我們可以從更新的式子中推出,每一次更新, 都會更靠近 (夾角越小):
w 的(長度)成長速率
changed only when 因此我們可以推出, 的成長幅度不會超過用來更新的 的長度,也不會超過最長的 的長度:
PLA Bound
從上面兩個推導可以知道
- 內積的成長速率快:
藍色替換成 - 長度的成長速率慢:
紅色替換成
在 次更新後
接著就可以發現 和 的 cos 夾角會有 lower bound,而且更新次數 有 upper bound
Overview
優點: 簡單、快速、適用於任何維度 缺點:
- 需要 linear separable (而且我們通常不會知道)
- 因為 depends on ,不能確定什麼時候會停 (雖然如果會停的話通常很快就會停)
PLA with noisy data
如果我們的 是有雜訊的 (不是 linear separable),我們或許可以讓 PLA 多一點容忍度,只要「大多數」的 都有符合 就好,因此我們的目標就是找到 mistake 最少的那個 就好:
然而,這是一個 NP-hard 問題