01 什么是監督學習
要進行監督學習,我們需要從一組樣本數據開始,每個樣本都帶有計算機可以學習的標簽。比如:
如你所見,樣本可以是許多不同的東西:數據、文本、聲音、視頻等。另外,標簽可以是數值,也可以是類型。數值標簽只是一個數值,就像溫度–檸檬水轉換器一樣。類型標簽表示預先定義的集合中的某個類別,比如在犬種檢測器的例子中。
使用一些想象力,你可以想出許多其他例子來預測一些事物,根據數值亦或類型的標簽來預測其他事物。
我們假設已經收集了一些標記過的樣本。現在可以進行監督學習的兩個階段:
階段1:訓練階段
我們將帶有標簽的樣本提供給一個用于發現模式的算法。比如,該算法可能會注意到,所有的肺炎掃描圖片都具有某些共同的特征(可能是某些不透明的區域),而這些特征在非肺炎掃描圖片中是沒有的。這個階段稱為訓練階段,因為算法會一遍又一遍地觀看樣本數據,并學習識別這些模式。
階段2:預測階段
現在算法已經知道了肺炎的樣子,于是切換到預測階段。我們可以在這個階段收獲訓練工作的成果。向訓練過的算法展示未被標注的X光掃描圖片,算法會告訴我們它是否具有肺炎特征。
這里還有關于監督學習的另一個例子——一種可以識別動物類型的系統。每個輸入數據是一張關于某種動物的圖片,每個樣本的標簽是圖片中動物的物種。在訓練階段,我們向算法展示帶標簽的圖像。在預測階段,我們向算法展示一張未被標注的不帶標簽的圖像,要求算法對該圖像的標簽進行猜測。
前面已經說過,計算機程序可以在機器學習的過程中“算出”數據。監督學習就是這種過程的一個例子。在傳統的編程過程中,可以編寫一個程序讓計算機由輸入算出輸出;在監督學習中,只要給出程序輸入和輸出的樣本數據,計算機就能自己學會怎樣從一個輸入算出一個輸出。
既然你已經閱讀了關于監督學習的一種高屋建瓴的解釋,那么可能會有比初學時更多的問題。我們說過,監督學習程序在樣本數據中“注意共同的特征”,并“發現模式”—但它是怎樣做到的呢?讓我們從一個抽象的層次開始,看看這個魔法是怎樣實現的。
02 魔法背后的數學原理
監督學習系統使用函數擬合這一數學概念來理解樣本數據與其標簽之間的關系。下面我們結合具體實例來介紹這個數學概念的基本原理。
想象一下,你家屋頂上有一塊太陽能板。你就像是一個監督學習系統一樣,學習太陽能板怎樣產生能量,并預測在未來某個時間段內產生能量的大小。
預測太陽能板的能量輸出需要時間、天氣等變量。時間應該是一個重要變量,所以你決定致力于時間這個變量。對于真正的監督學習過程,你應該從收集每天不同時段太陽能板所產生能量大小的樣本數據開始。經過幾周時間的隨機取樣之后,你得到了如下數據列表:
上表中的每一行都是包羅輸入變量(時間)與標簽(產生的能量值)的樣本數據,就像那個識別動物的系統一樣,動物圖片是輸入,動物名稱是標簽。
假如你將這些樣本數據繪成一幅圖表,那么就能很形象地看到時間與太陽能板產能值之間的關系:
我們一看就知道,太陽能板不會在夜間產生能量,并且能量值在中午的時間達到了頂峰。如下圖所示,雖說監督學習系統沒有人腦那樣機敏,不過它能夠將樣本數據近似擬合成某個函數,由此實現對數據的理解。
尋找與樣本數據比較接近的擬合函數并不是一件容易的事情。不過,隨后的預測階段就要簡單得多。系統會忘記所有的樣本信息,并使用找到的擬合函數來預測太陽能板在未來某個時間所產生的能量,比如在正午時產生的能量如下圖所示:
這就是我所說的監督學習通過函數擬合的方式實現算法功能。監督學習系統接收的實際樣本數據通常是混亂且不完整的。在數據訓練階段,我們通常需要構造一個比較簡單的函數來近似擬合比較復雜的實際數據。在預測階段,則使用所構造的擬合函數實現對未知數據的預測。
作為一名程序員,你已經習慣于考慮許多有可能出錯的情形。故此,你可能已經在考慮將樣本數據的處理復雜化的方法。比如,太陽能電池板的能量輸出除了與時間有關之外,還會受到其他因素的影響,譬如云層或月份的影響。
假如收集了所有這些變量的數據,那么我們將會得到一個多維的點云,將無法使用一個簡單的圖表對這些點云數據進行可視化表示。同樣,對于太陽能電池板,我們需要預測的是數值標簽。你可能想知道怎樣將這種數值標簽轉換成非數值標簽(如動物的名稱),即類別標簽。
你現在只需要知道一點:不管你在上面疊加了多少復雜的東西,監督學習的基本思想就和我們剛才所描述的一樣——找一堆樣本數據,再找到一個可以近似擬合這些樣本數據的函數。
現代監督學習系統非常擅長這種擬合工作。事實上,這種擬合功能可以強大到足以擬合出極其復雜的函數關系——比如X光掃描圖片和診斷結論之間的關系。當然,用于擬合這些對應關系的函數對于我們人類而言會是非常復雜的。然而,對于計算機系統而言則是小菜一碟。