本系列是臺灣大學資訊工程系林軒田(Hsuan-Tien Lin)教授開設的《機器學習基石》課程的梳理。重在梳理,而非詳細的筆記,因此可能會略去一些細節。
該課程共16講,分為4個部分:
- 機器什麼時候能夠學習?(When Can Machines Learn?)
- 機器為什麼能夠學習?(Why Can Machines Learn?)
- 機器怎樣學習?(How Can Machines Learn?)
- 機器怎樣可以學得更好?(How Can Machines Learn Better?)
本文是第1部分,對應原課程中的1-3講。雖然第4講在原課程中也放入了第1部分,但我認為它與後面第2部分的連貫性更強,因此移到後面。
本部分的主要內容:
- 介紹機器學習的概念與流程,並將它和其他幾個相似的領域進行比較;
- 介紹感知機模型,說明普通的感知機學習演算法PLA在什麼條件下可以停下,如果不滿足條件該怎麼辦;
- 列舉機器學習的類別。
1 機器學習的概念
1.1 定義
機器學習的定義:improving some performance measure with experience computed from data。
什麼時候可以用機器學習?有幾個關鍵的地方:
- 確實存在一些需要學習的“潛在模式”,如預測下一次丟骰子的點數,就不能用機器學習;
- 沒有簡單的可程式設計的定義,如判斷一張影像中是否包含了圓,就可以直接通過程式設計解決,不需要使用機器學習;
- 有一些關於要學習的模式的資料,如預測未來核能的濫用是否會導致地球毀滅,就不能用機器學習,因為沒有歷史資料。
1.2 組成部分
機器學習的實用定義如下圖(灰字是以信用卡審批為例):
可以看到,機器學習有以下幾個要素:
- 未知的目標函式\(f: \mathcal X\rightarrow\mathcal{Y}\),在例中為理想的信用卡審批規則;
- 訓練樣本\(\mathcal{D}\),在例中為銀行中信用卡審批的歷史記錄;
- 假設集\(\mathcal{H}\),在例中為一系列的候選規則;
- 學習演算法\(\mathcal{A}\);
- 最終挑選出的假設\(g\),滿足\(g\approx f\),在例中為最終“學習”出的規則。
機器學習的實用定義:使用資料計算出最接近於目標函式\(f\)的假設\(g\)。
1.3 和其他領域的關係
1.3.1 資料探勘(DM)
資料探勘:用(大)資料尋找感興趣的性質。
- 如果這裡所說的“感興趣的性質”就是“接近目標函式的假設”,那麼機器學習就等同於資料探勘;
- 如果“感興趣的性質”與“接近目標函式的假設”是相關的,那麼資料探勘可用來幫助機器學習,反之亦然;
- 傳統的資料探勘還關注在大資料庫中的有效計算。
在現實中,很難區分ML和DM。
1.3.2 人工智慧(AI)
人工智慧:計算一些的有智慧行為的東西。
如果\(g\approx f\)就是那個有智慧行為的東西,那麼ML可用於實現AI。
如下棋,傳統AI的做法是做博弈樹,而ML的做法是從大量資料中進行學習。因此,機器學習是實現人工智慧的一種途徑。
1.3.3 統計學(Statistics)
統計學:使用資料對未知過程進行推斷。
- 如果推斷的結果就是\(g\),\(f\)是未知的,那麼統計學就可以就用來實現機器學習;
- 傳統的統計學聚焦於在數學假設下可證明的結果,而不太關注計算。
統計學為機器學習提供了很多有用的工具。
2 分類學習之感知機模型
2.1 PLA
這裡介紹一個簡單的分類模型:感知機(Perceptron)。
回顧上一節,在假設集\(\mathcal{H}\)中,我們可以使用哪些假設?
在分類問題中,要預測的變數是正/負,或表示成\(+1\)/\(-1\)。我們可以對自變數做線性加權求和,然後設定一個閾值,若高於閾值,則分類為正,若低於閾值,則分類為負。若將“閾值”也看作在自變數中補入的常數項(\(\mathbb{w}\)中補入對應的常數1),則這個模型可以寫作\(h(x)=\text{sign}(\mathbf{w}^T\mathbf{x})\)。
每一個\(\mathbb{w}\),都對應了一個假設。
那麼,要如何從假設集\(\mathcal{H}\)中找出最接近於目標函式的\(g\)呢?也就是如何找出最好的\(\mathbb{w}\)?
可以這樣做,先任意設一個初始的\(\mathbf{w}_0\)(比如\(\mathbf{0}\)),然後:
- 從該點開始,尋找錯誤分類的樣本點,即找到滿足\(\text{sign}(\mathbf{w}^T_t \mathbf{x}_{n(t)})\ne y_{n(t)}\)的點\((\mathbf{x}_{n(t)}, y_{n(t)})\);
- 利用找到的錯誤分類點對\(\mathbf{w}\)進行更新,更新規則是:\(\mathbf{w}_{t+1}\leftarrow\mathbf{w}_t +y_{n(t)}\mathbf{x}_{n(t)}\)。
- 不斷重複上述過程,直到找不出錯誤分類的點為止,最終得到要找的\(\mathbf{w}_{PLA}\),把它作為\(g\)。
這就是感知機學習演算法PLA(Perceptron Learning Algorithm)。更新規則的圖示如下:
但是,以上演算法仍然有不少問題:
- 該如何遍歷所有的樣本點?
- 它最終會停下來嗎?需要滿足什麼條件?
- 停下來說明在樣本\(\mathcal{D}\)內已經沒有錯誤了,\(g\approx f\),那麼在樣本\(\mathcal{D}\)外有用嗎?
- 如果不滿足使它能停下的條件怎麼辦?
2.2 PLA會停下嗎?
PLA能停下來的必要條件是,存在一些\(\mathbf{w}\)可以在\(\mathcal{D}\)內不會犯錯。這叫線性可分(linear separable)條件。那麼,線性可分是PLA能停下來的充分條件嗎?
答案是肯定的。證明的思路是,既然資料集線性可分,則一定存在某個\(\mathbf{w}\)將樣本完美分開,記為\(\mathbf{w}_f\),只需證明在經過有限次的迭代後的\(\mathbf{w}\)和\(\mathbf{w}_f\)的夾角的餘弦的下限會超過1即可(因為餘弦無法超過1,如果在經過特定次數的迭代後餘弦的下限超過了1,說明在上一次迭代之後必定已經完成了完美的分類,無法找出錯誤分類的點進行迭代了),而餘弦可以從分子(兩個向量的內積)和分母(兩個向量模的乘積)分別突破。具體證明如下:
因為\(\mathbf{w}_f\)能完美分開資料集中的樣本,即滿足
可令\(\min_\limits{n} y_n \dfrac{\mathbf{w}_f^T}{\Vert \mathbf{w}_f\Vert} \mathbf{x}_n=\rho\),則有
而更新一定是在犯錯的點處,所以觸發第t次更新的樣本一定滿足\(y_{n(t-1)}\mathbf{w}^T_{t-1} \mathbf{x}_{n(t-1)}\le 0\)。令\(R^2=\max_\limits{n} \Vert x_n\Vert^2\)(\(R>0\)),則有
接下來就看一看在經過\(T\)次迭代後得到的\(\mathbf{w}_{T}\),它和\(\mathbf{w}_f\)的夾角的餘弦:
而餘弦必定小於1,因此必有迭代次數\(T\le \dfrac{R^2}{\rho^2}\),證明完畢。
從直覺上理解,PLA演算法通過不斷迭代,可以使得\(\mathbf{w}\)越來越接近於\(\mathbf{w}_f\)。
PLA演算法的優點是簡單、快、對任意維度的資料都可用,但缺點在於,一方面我們假設了資料集\(\mathcal{D}\)是線性可分的,而現實中我們不知道是否真的如此,另一方面我們不知道它到底多久會停下,儘管在實踐中演算法往往很快停下。
2.3 Pocket演算法
如果資料中有噪聲,導致資料集不是線性可分的,怎麼辦?
當然,可以直接取\(\mathop{\arg\min}\limits_{w}\sum\limits_{n=1}^{N}{\mathbf{1}_{[y_n\ne \text{sign}(\mathbf{w}^T\mathbf{x}_n)]}}\)作為\(\mathbf{w}_g\),但由於要一一遍歷所有樣本,這是個NP-hard問題。
那怎麼辦呢?可以對PLA做一些修改:
- 把當下找到的最佳\(\hat{\mathbf{w}}\)先存起來,就好比放在口袋裡;
- 在找到一個使\(\mathbf{w}_t\)分類錯誤的樣本之後,進行和PLA一樣的更新,即\(\mathbf{w}_{t+1}\leftarrow\mathbf{w}_t +y_{n(t)}\mathbf{x}_{n(t)}\);
- 比較\(\mathbf{w}_{t+1}\)和\(\hat{\mathbf{w}}\)在整個資料集上誰犯的錯誤較少,若前者少,則將前者放入口袋,反之仍保留\(\hat{\mathbf{w}}\)在口袋中;
- 不斷迴圈,在經過一定次數的迭代後,停止上述過程,最終在口袋中的\(\hat{\mathbf{w}}\)就取為\(g\)。
由於始終有一個\(\hat{\mathbf{w}}\)在口袋中,因此這種演算法被稱為Pocket演算法。
3. 學習的分類
依據輸出空間\(\mathcal{Y}\)的不同來分:
- 二分類問題:\(\mathcal{Y}\)為\(+1\)或\(-1\);
- 多分類問題:\(\mathcal{Y}\)有更多的類別;
- 迴歸:\(\mathcal{Y}=\mathbb{R}\)或\(\mathcal{Y}=[\text{lower}, \text{upper}]\subset\mathbb{R}\);
- 結構學習(Structured Learning):\(\mathcal{Y}\)是某種結構,如學習出句子的結構等。
依據資料標籤\(y_n\)的不同來分:
- 監督(Supervised)學習:每個\(\mathbf{x}_n\)都有對應的\(y_n\);
- 無監督(Unsupervised)學習,沒有標籤\(y_n\),如聚類、密度估計、離群點檢測等;
- 半監督(Semi-supervised)學習:只有一小部分資料有標籤,需要充分利用無標籤資料,避免代價昂貴的手動打標籤;
- 強化學習(Reinforcement Learning):\(y_n\)被隱含在goodness\((\tilde{y}_n)\)中。
依據\(f\Rightarrow (\mathbf{x}_n, y_n)\)的不同來分:
- Batch:所有的資料都是已知的;
- Online:被動獲取的序列資料;
- Active Learning:通過策略不斷主動詢問某個\(\mathbf{x}_n\)的\(y_n\)是什麼,來獲得序列資料。
依據輸入空間\(\mathcal{X}\)的不同來分:
- 具體的(Concrete)特徵:\(\mathcal{X}\subseteq \mathbb{R}^d\)的每個維度都有複雜的物理意義。
- 原始的(Raw)特徵:只有簡單的物理意義,如手寫數字識別,特徵是每個畫素點的灰度,往往需要人或機器將它轉換為具體的特徵。
- 抽象的特徵:沒有或幾乎沒有物理意義,如打分預測系統,\(\mathcal{X}\)是使用者id,\(\mathcal{Y}\)是對某部電影的評分,也需要做特徵轉換/抽取/構造。