機械學習

(由機械學習演算法跳轉過嚟)

機械學習gei1 haai6 hok6 zaap6英文machine learningML)係人工智能(AI)一個子領域,專門研究點樣設計一啲特殊嘅演算法統計模型,嚟去教電腦喺唔使個用家開口俾明文指示嘅情況下,學識有效噉樣做一啲特定嘅作業。機械學習嘅典型做法如下[2][3]:p. 2

  1. 編寫一個電腦程式,教部電腦點樣由數據嗰度建立一個數學模型嚟描述佢對啲變數之間嘅關係嘅知識;
  2. 搵啲樣本數據(即係所謂嘅「訓練數據」)返嚟,俾個程式處理吓啲數據入面嘅個案,等部電腦按個程式建立一個數學模型;跟住
  3. 喺將來再撞到同類個案嗰時,部電腦就會曉按佢個程式,用建立咗嗰個模型,對呢啲之前未見過嘅個案作出預測-個設計者唔使明文噉教部電腦點樣應對呢啲前所未見嘅個案,部電腦都會有能力一定程度上應對。
ML 可以大致諗成拉曲線:部電腦有個數學模型(用線表達)表示佢心目中兩個變數間嘅關係,ML 教部電腦點按數據建立同改變個模型[1]
一個人工神經網絡抽象圖解;人工神經網絡係 ML 上常用嘅數學模型。
機械人都可以曉學習,段片顯示一班機械人慢慢噉學識一齊合作推郁物件。

機械學習演算法做嘅嘢係令部電腦曉「用手上資訊,自動噉預測某啲特定嘅變數嘅數值」,所以機械學習嘅技術可以將「做預測」呢家嘢自動化,而因為「做預測」呢家嘢喺好多領域都會用到,機械學習可以有好多實用價值,例如係[4]

  • 醫療:機械學習可以用嚟教電腦由手上嘅醫療數據,學識邊啲病徵同邊啲病症有關,所以可以攞嚟幫手診斷病人(用「手上病人嘅病徵」預測「佢有乜嘢病」)[5]
  • 金融:機械學習上有技術可以教電腦由手上嘅金融(例如係之前嗰幾個月嘅股價)嚟預測打後股價會點變化,呢點喺金融業上可以幫手做預測[6]
  • 市場學:機械學習可以用嚟教電腦由過去有關唔同產品嘅銷售量嘅數據,預測將來(間公司想出)嘅同類產品嘅銷售量[7]

... 等等。

機械學習同數據科學(data science)好有關係,例如係做數據探勘(data mining)噉,就可以涉及教部電腦點樣搵出數據當中嘅規律,令到部電腦曉自動化噉探勘一啲人手好難分析嘅數據,由呢啲數據嗰度抽取有用嘅資訊,而因為「由數據抽取資訊」呢樣嘢基本上無論乜嘢科學商學領域都會用到,所以機械學習對於好多領域嚟講都係一種好有用嘅技術[8][9]

概論

定位

機械學習呢個領域嘅定義如下[10]

英文原文:"A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P if its performance at tasks in T, as measured by P, improves with experience E."
粵文翻譯:如果一個電腦程式能夠喺一樣或者一類工作 T 上嘅表現-表現以 P 做指標量度-隨住經驗 E 而改進嘅話,噉呢個程式就可以稱得上係「有由經驗 E 嗰度對工作 T 同表現量度指標 P 作出學習」(而機械學習就係指研究點樣幫電腦程式做呢樣嘢嘅領域)。

上述呢個定義避免咗一啲歧義性嘅問題:英國著名數學家亞倫圖靈(Alan Turing)對於人工智能曾經問過「機械有冇能力思考?」呢條問題,所以有人提出將人工智能(包括機械學習)定義為「研究點樣令機械思考」嘅領域。但呢個定位俾好多科學家嫌佢含糊得滯(例如「思考」呢個詞應該要定義就經已好摎攪[11]),所以研究機械學習嘅科學家一般唔主張用呢個詞定義一個領域;而相比之下,上述嘅定義唔使依賴啲乜嘢零舍含糊嘅詞語-呢個定義只係要求電腦程式有類似人噉嘅行為,所以俾人覺得比較適合用嚟做成個科學領域嘅定位[11]

理論基礎

一個常態分佈嘅圖解;X 軸表示研究緊嗰個變數,而 Y 軸反映咗每個變數出現嘅頻率。

一個學習者(無論係機械定係人)嘅主要目的係要將經驗普遍化(generalize)[12]:由經歷過嘅嘢當中,抽取嗰啲嘢普遍具有嘅特性,並且用呢啲資訊嚟解難;例如一個人喺俾隻咬過之後,可能會產生「狗普遍傾向會咬人」嘅諗頭,並且從此之後傾向避開狗(將「呢一隻狗會咬我」普遍化成「狗普遍都會咬我」)。機械學習都係同一道理:做機械學習會俾一部電腦處理一啲數據,再要部電腦對於一啲佢之前未見過嘅同類個案作出預測,好似係一啲金融上會用嘅機械學習程式噉,設計者嘗試教部電腦用「過去嘅股價數據」預測「將來嘅股價」(將「我處理過嗰啲股票嘅股價變化法則」普遍化做「股票股價變化起上嚟普遍會跟從嘅法則」)[3][13]

統計學行話講嘅話,呢個過程如下:學習用嘅數據係出自一個有特定概率分佈(probability distribution)嘅現實,而假設柞數據係大致上準確噉代表到嗰個現實嘅概率分佈嘅(柞數據嘅概率分佈同個現實嘅近乎一樣),噉個機械學習程式就要靠佢嘅演算法加埋啲數據,砌返個合乎現實嘅數學模型出嚟[14]

舉個例說明:想像家陣有個常態分佈(normal distribution;睇附圖),佢 X 軸表示研究緊嘅變數,而 Y 軸就反映咗變數每個值出現嘅機會率。如果 X 軸代表「人類身高」,噉個常態分佈表達嘅嘢如下:人類嘅身高最常喺中間嗰個數值(嗰個數值出現率最高),而距離中間嗰個數值愈遠嘅身高值就出現得愈少(好少有極高或者極矮嘅人)。個常態分佈條線會有一條相應嘅方程式。而家假想個常態分佈代表住全人類嘅身高,跟住研究者抽一個樣本(sample),例如係由全世界嘅人當中搵 500 個返嚟,量度佢哋嘅身高。喺最理想嘅情況之中,個樣本會完美噉代表到人類總體嘅身高分佈-即係話如果將個樣本入面嘅「身高值」同「每個值出現嘅率」畫條線,條線嘅形狀會同總體人類嗰條完全一個板。而如果家陣話要訓練一個機械學習程式,去靠個樣本嘅數據學習人類嘅身高分佈,個程式要做嘅嘢就係「由啲數據嗰度,砌返一個代表到人類總體身高分佈嗰條線嘅數學式出嚟」[3]

運算學習論(computational learning theory)係專門研究機械學習演算法嘅表現嘅電腦科學子領域。呢個領域會用到大量嘅統計學技巧分析機械學習所要面對嘅問題,例如係喺抽樣本嘅過程當中,一般都假設咗個樣本代表到所研究嘅總體(例:「手上嘅股票嘅行為」大概正確噉反映到「古往今來所有嘅股票嘅行為」),而呢個假設喺最嚴格嘅邏輯基準嚟睇查實並唔正確(「我見過嘅天鵝都係白色」唔代表「古往今來嘅天鵝冚唪唥都係白色」)。因為呢啲原因,雖然話事實經已說明咗,機械學習喺實用上表現好好,但喺理論上機械學習嘅原理查實唔係冇漏洞嘅,所以研究運算學習論嘅科學家就要去思考呢啲問題[15]

基本流程

喺實用上,機械學習嘅流程基本上如下[16]

  1. 搜集數據:用某啲方法搜集一啲描述緊要預測嘅現象嘅數據,並且以某啲形式(例如係一個表)呈現啲數據,數據嘅質同量會影響最後個模型嘅準確性;
  2. 事前處理數據:處理吓啲數據先,清走啲會擾亂機械學習演算法嘅嘢,好似啲缺失數據(missing data)呀噉;
  3. 揀個演算法:機械學習可以用好多唔同嘅演算法嚟做,唔同演算法各有利弊;
  4. 訓練個 ML 程式:將啲數據輸入去個程式嗰度,等佢按自己嘅演算法建立一個模擬個現象嘅數學模型,個數學模型會有若干個參數(parameter, );
  5. 評估個 ML 程式:用某啲指標評估個程式學得有幾好,通常嘅做法係要個程式對佢未見過嘅數據進行預測,再睇吓佢預測得準唔準;
  6. 執吓啲參數:執吓個程式啲參數(例如係學習率或者係初始化嘅數值等),睇吓呢啲改變可唔可以再改善個程式(可以睇吓最佳化[註 1]
  7. 作出預測:用個程式對現實世界嘅現象進行預測。
參數 p
誤差率
最佳選擇
X 軸表示個模型啲參數,而 Y 軸表示某個量度個模型「有幾好」嘅指標;假想而家用緊嗰個指標係數值愈低愈好嘅(例如誤差),一個理想嘅學習演算法會將啲參數變成「最佳選擇數值」(誤差率數值最低化)嘅數值。

事前數據處理

一個典型嘅數據庫;當中每一個直行代表一個變數,每一個橫行代表一個個案,個數據庫會有每個個案喺各變數上嘅數值。

事前數據處理(data preprocessing)係攞到數據之後要做嘅第一個步驟。喺搜集數據嘅過程之後,個研究者手上會有一個數據庫,個數據庫嘅數據包含咗每一個個案喺每個變數上嘅數值。現實嘅搜集數據過程都係唔完全受控嘅,所以搜集到嘅數據幾乎梗會出啲錯,例如係某幾個個案喺某個變數上嘅數值量度唔到(即係所謂嘅缺失數據)或者有啲擺明冇可能嘅數值(例:有個個案喺「年齡」呢個變數嘅數值係負數),等等。呢啲噉嘅數據直接攞去分析嘅話好多時會搞到個程式出錯,所以做機械學習嘅人喺開始俾個程式做學習之前往往會做啲事前處理先。另一方面,做事前數據處理又會涉及「將啲數據轉化成要用嘅機械學習能夠處理嘅格式」等嘅工序[17][18]

例子碼

以下係一段用 Python 程式語言寫嘅源碼,用途在於將啲數據重新縮放成 0 至 1 之間嘅數值(將每個變數,最大嘅數值設做 1,最細嘅數值設做 0,而喺中間嗰啲數值就按比例變成 0 至 1 之間嘅實數)。噉樣做係因為,有某啲機械學習演算法需要數據係 0 至 1 之間嘅數先至行得到[19]

# Python code to Rescale data (between 0 and 1) import pandas import scipy import numpy from sklearn.preprocessing import MinMaxScaler url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data" # 指定一個網址names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] # 指定每個變數嘅名dataframe = pandas.read_csv(url, names=names) # 由網址嗰度攞數據。array = dataframe.values # 將數據擺入去屬於個程式一個 array 嗰度。  X = array[:,0:8] # X 呢個 array 包含咗用嚟做預測嘅變數。Y = array[:,8] # Y 呢個 array 包含咗要預測嘅變數。# 將 X 入面嘅數字重新縮放。scaler = MinMaxScaler(feature_range=(0, 1))rescaledX = scaler.fit_transform(X)   # 將做完縮放嘅嗰柞數據 show 出嚟睇。numpy.set_printoptions(precision=3) print(rescaledX[0:5,:]) # 跟住打後嘅碼就會開始做學習過程。

數學模型

喺準備好啲數據之後,個機械學習程式就要建立一個數學模型。佢要將數據當中嘅某啲變數做輸入,然後用佢內部嘅數學模型計個佢預想嘅輸出出嚟(「預想輸出」係啲輸入嘅函數 )。喺最簡單嘅監督式學習裏面,個程式跟住會計吓,用佢個數學模型( )計嘅「預想輸出」同實際嘅輸出差幾遠(睇誤差函數),按照呢個誤差調較自己個數學模型嘅參數( 係第 個參數),

係指「 嘅改變」;

呢個過程用虛擬碼表達嘅話係[3]

讀取事前處理完嘅數據建立一個數學模型f), y要預測嘅變數寫成 x用嚟做預測嘅變數嘅函數逐個逐個噉讀取數據入面嘅個案for 每一個個案    按照個數學模型同個個案嘅 x 計出預想嘅 y     計吓預想中嘅 y 個數據所顯示嗰個個案嘅實際 y 差幾遠    按呢個誤差計吓個模型要點樣改# 如果一切順利,讀取嗮所有數據之後,最後嗰個數學模型會能夠做有返咁上下準嘅預測。

當中 可以有好多唔同款:

迴歸模型

一個線性迴歸模型嘅圖解;幅圖嘅兩條軸分別代表研究緊嗰兩個變數(x 同 y)。

迴歸分析(regression analysis)係統計模型上嘅一類技術,用嚟預測兩個或者以上唔同變數之間嘅關係[20]:喺統計學上,研究者好多時會想用一個變數嘅數值嚟預測第啲變數嘅數值;喺最簡單嗰種情況下,個統計模型會涉及兩個連續性(continuous)嘅變數,當中一個係自變數(independent variable;IV),而另一個就係應變數(dependent variable;DV),而個研究者會用個 IV 嘅數值嚟預測個 DV 嘅數值;對個研究者嚟講,一個可能嘅做法係搜集啲數據返嚟,用啲數據做迴歸分析,整個模型(即係畫條線)出嚟,個模型就能夠幫佢預測「當 IV 係呢個數值嗰陣,假設第啲因素不變,個 DV 嘅數值會傾向係幾多」[21][22]。迴歸模型有以下呢啲[23]

(線性迴歸;linear regression);
(多項式迴歸;polynomial regression);

... 等等。

原則上,如果有個方法可以搵出 同埋 等參數嘅數值,就可以靠條式大致上用 IV 嘅值估計 DV 嘅值,而機械學習可以用一個迴歸模型做佢嘅數學模型,例如係以下呢段碼噉,做嘅嘢就係(攞到數據同做完啲事前處理之後)建立一個參數值係隨機設嘅線性迴歸模型,再按柞數據入面啲個案慢慢噉調較個模型[20]

人工神經網絡

一個前饋人工神經網絡嘅抽象圖;每個圓圈代表咗一粒模擬嘅神經細胞,而每粒神經細胞嘅啟動程度由佢打前嗰排神經細胞嘅啟動程度話事-就好似動物嘅神經系統噉。

人工神經網絡(artificial neural network)係受生物神經系統啟發嘅一種數學模型[24]。一隻(例如)靈長目動物閒閒地有斷百億計嘅神經細胞(neuron),一粒神經細胞喺俾電同化學物訊號刺激到嗰陣,會跟住以電或者化學物嚟傳新訊號,所以當一粒神經細胞射訊號嗰陣可以引起連鎖反應,將資訊喺成個神經網絡嗰度傳開去;而人工神經網絡主要係以電腦程式嘅方法嚟模擬呢個過程,令一個電腦程式能夠出現一啲好似動物神經系統噉嘅行為[25]

一個人工神經網絡由大量嘅人工神經細胞(artificial neuron)組成。喺用電腦程式整神經網絡嗰陣,個研究者(通常)會每粒人工神經細胞都同佢設返個數值,用呢個數代表佢嘅啟動程度(activation level)[26],而每粒神經細胞嘅啟動程度嘅數值都有條式計,呢條式包括咗喺佢之前嗰啲神經細胞嘅啟動程度。啲函數當中嘅參數可以變化,而如果一個神經網絡嘅程式令到佢識得靠自己嘅經驗嚟到調整呢啲參數嘅話,嗰個神經網絡就會具有學習嘅能力[27][28]

舉個例說明,例如家吓搵個神經網絡入面某一粒人工神經細胞集中睇佢,佢會有返個數字嚟反映佢嘅啟動程度,而呢個數字取決於第啲人工神經細胞嘅啟動程度-即係話個程式入面每粒細胞都會有一條類似噉樣嘅算式:

喺呢條式當中, 代表嗰粒神經細胞嘅啟動程度, 代表其他神經細胞當中第 粒嘅啟動程度,而 就係其他神經細胞當中第 粒嘅權重(指嗰粒神經細胞有幾影響到 )。所以當一粒人工神經細胞啟動嗰陣,會帶起佢後面啲人工神經細胞跟住佢啟動-似十足生物神經網絡入面嗰啲神經細胞噉。假如個神經網絡嘅程式令佢能夠自行按照經驗改變 嘅數值嘅話,佢就會曉學習[27]

喺演算法上,一個最簡單嘅監督式學習神經網絡同一個用迴歸模型嘅機械學習演算法一個板,分別只係在於 y 同 x 之間嗰條式唔同咗。喺一個人工神經網絡嘅程式當中,會有若干粒細胞做輸出值,若干粒細胞做輸入值,每粒輸出層細胞嘅啟動程度會係佢之前嗰層細胞嘅啟動程度嘅函數,如此類推。喺程式編寫上,呢啲咁多嘅權重值同啟動值可以用矩陣(matrix)輕易噉儲住。好似係以下呢段虛擬碼噉[27]

X = [0, ...]; # 個 IV 層,呢個係一個 array(陣列)。...Y = A_1*H_1; # 輸出 Y 嘅啟動程度係之前嗰層嘅啟動程度嘅函數,當中 Y 同 H_1 係 array,而 A_1 係一個矩陣。H_1 = A_2*H_2 # 如此類推如此類推H_2 = A_3*X# 隨機噉設啲權重嘅數值,噉做會整出一個唔準嘅迴歸模型。A_1 = random(0,1);A_2 = random(0,1);A_3 = random(0,1);...

一開始嗰陣,人工神經網絡嘅技術係諗住用嚟普遍噉解難嘅,但隨時間過去,啲人開始發覺設計上偏離生物神經網絡嘅人工神經網絡喺好多情況下能夠更加有效噉解難,於是出咗好多唔同種嘅神經網絡。到咗廿一世紀,人工神經網絡經已廣泛噉俾人用嚟教電腦辨識圖像、辨識語音、管控社交網站、做機械翻譯同埋玩遊戲[28]

決策樹

一個用嚟預測一個鐵達尼號乘客有幾大機會生還嘅決策樹

決策樹學習(decision tree learning)係機械學習嘅一種模型,一個決策樹(decision tree)會有若干個節點(node),每個節點代表咗一個考慮緊嘅變數,並且喺接收到一個個案嗰陣,先後噉用呢啲變數作出預測,例如係附圖入面嗰個決策樹噉樣,佢會接收一個個案嘅數據,然後先後噉按照個個案嘅各種變數(性別、年紀同有幾多個親屬喺船上呀噉)預測嗰個鐵達尼號乘客有幾大機會生還。而一個用決策樹嘅機械學習演算法要做嘅嘢就係用手上嘅數據,砌出一個噉樣嘅決策樹[29]。一個建立決策樹嘅演算法步驟大致如下[30]

  1. 喺淨低嘅「用嚟做預測嘅變數」當中,揀出能夠最有效噉預測到個結果變數嗰個(個演算法可以用資訊熵變化等嘅指標嚟量度「一個變數預測起第個變數上嚟有幾有效」;詳情可以睇資訊理論);
  2. 繼續分枝;
  3. 返去步驟 1。

例如係以下嘅虛擬碼噉,就能夠由手上數據砌一個決策樹出嚟(呢個演算法就係所謂嘅 ID3[31][32]

計吓成個數據庫嘅 information entropy資訊熵簡單啲講就係指柞數據有幾接近完全隨機For 每一個用嚟做預測嘅變數    計吓用咗佢分類之後嘅總 entropy    計吓用咗佢分類之後嘅總 entropy 同成個數據庫嘅 entropy 差幾多information gain information gain 最高嗰個變數嚟分類For 每一個分咗嘅類用嗰個類內嘅個案做數據庫做多次上述嘅過程直至用嗮所有用嚟做預測嘅變數或者到咗指定嘅分枝數上限為止

貝葉斯網絡

一個簡單嘅貝葉斯網絡

貝葉斯網絡(Bayesian network)係一種可以用嚟教電腦推理[33]、學習[34]、同計劃[35]嘅工具。一個貝葉斯網絡會考慮大量嘅變數,並且用一柞基於貝葉斯定理(Bayes' Theorem)嘅方程式模擬唔同變數之間嘅關係。舉個簡單例子說明,假想家吓有一個貝葉斯網絡,佢會睇某啲變數(包括咗「有冇落雨」同埋「啲灌溉花灑有冇開著」)嘅數值,並且計出「啲草係濕嘅」呢個狀態係「真」嘅機會率,會用到(例如)以下呢條式[36][37]

當中 係指「啲草濕咗」呢個狀態, 係指「啲灌溉花灑著咗」呢個狀態,而 係指「有落雨」呢個狀態。成條式用日常用語講嘅話係噉嘅:「嗰三個狀態都係真嘅機會率」( )等如「如果有落雨而且啲灌溉花灑著咗,啲草濕咗嘅機會率」( )乘以「如果有落雨,啲灌溉花灑著咗嘅機會率」( )乘以「有落雨嘅機會率」( )。

個設計者寫好程式之後,可以(例如)走去搵一大柞有關呢幾個變數之間嘅關係嘅數據俾個程式睇,跟住叫個程式用呢啲過往嘅數據,計出變數同變數之間嘅關係係點,而個程式就可以攞嚟預測未來[36]。貝葉斯式嘅人工智能有相當廣泛嘅用途,例如 Xbox Live 噉,就會喺幫啲打緊網上遊戲嘅玩家搵比賽加入嗰陣就會用到考慮嗰個玩家嘅贏率嘅貝葉斯網絡[38],並且寫個演算法搵出令到呢個機會率最接近 50% 嘅分隊法(即係盡可能令場比賽勢均力敵,一般認為勢均力敵嘅比賽會好玩啲)[38]

支援向量機

支援向量機(support vector machines,簡稱「SVM」)係一類機械學習上會用嘅數學模型,用嚟做分類,多數係監督式學習之下先會用嘅。當一個支援向量機接到收有關一柞個案嘅數據嗰陣時,會將每個個案分類做兩個(事先指定咗嘅)類別嘅其中一個。例如係下圖入面噉,黑點同白點係兩類唔同嘅個案,每個個案喺 X 軸同 Y 軸呢個變數上有個數值,H1 呢條線唔能夠將個案清楚噉分類,H2 叫勉強做到分類,而 H3 就能夠清楚噉將個案分做兩類,係最理想嗰條線-而用多個兩個變數做分類嘅支援向量機可以按同一道理想像[39][40]

一個建立一個支援向量機嘅演算法大致上要做以下嘅工作[39]

  1. 讀取數據;
  2. 將數據入面每一個個案用一個向量表達( 係個個案所屬嘅類別,而 就係若干個用嚟將個案分類嘅變數);
  3. 喺個空間(維度數量 = 用嚟分類嘅變數嘅數量)入面畫一條線(唔一定係直線),再用某啲指標量度呢條線「能唔能夠有效噉將啲個案清楚分類」;
  4. 按指標睇吓使唔使改吓條線同埋要點改。

學習範式

喺建立咗一個數學模型之後,個程式就要以某啲方法慢慢噉改變個模型啲參數-係迴歸模型或者支援向量機嘅話,就要執條線嘅式嗰啲系數;係人工神經網絡嘅話,就要執啲神經細胞之間嘅權重值... 等等,目的係最後達致一個能夠準確噉做預測同決策嘅模型-就好似人同第啲動物嘅學習過程噉樣。喺機械學習上,呢個過程可以用好多演算法做,而呢啲演算法可以分幾大類[41][42]

監督式

監督式學習(supervised)可以話係最簡單直接嗰種學習範式。監督式學習演算法做嘅嘢係建立一個數學模型模擬柞數據,佢當中某啲變數扮演輸入、又有啲變數扮演輸出。柞學習用嘅數據係所謂嘅訓練用數據(training data)。用數學行話講返,即係要搵出一柞已知嘅例子,有

  • 若干對輸入( )同正確輸出( ),
  • 再由容許得嘅函數當中搵返個同啲例子最啱搭嘅函數 出嚟。

喺呢種學習之下,個神經網絡會由研究者度收到一柞數據俾佢學,好似有個老師噉-所以就叫「監督」式學習[41][43]

監督式學習演算法要做嘅工作如下[10][14]

  1. 攞數據入面嘅一個個案(通常用一個向量表示);
  2. 用嗰個個案嘅「預測用變數」嘅值做自己個數學模型( )嘅輸入,計自己個模型所俾嘅輸出;
  3. 比較自己計嗰個輸出值同埋數據顯示嘅實際輸出值(即係所謂嘅「監督訊號」;supervisory signal);
  4. 攞呢兩個數嘅落差(誤差),計吓自己個模型啲參數要點變,先可以令到自己下次更有可能計到正確輸出值;
  5. 攞數據入面嘅下一個個案做多次呢個過程,直至讀完嗮個數據入面嘅所有個案為止。

用監督式學習可以訓練一個機械學習程式做好多唔同嘅工作,好似係規律辨識(pattern recognition)呀噉[44]。舉個例說明,家吓有個研究員想訓練一個程式分辨一個病人係咪有肺癌[45],用嚟幫啲醫生手做檢查;佢可以去問醫院同醫學院等嘅單位借有關肺癌病人嘅數據,呢柞數據要包括咗每個病人嘅檢查結果( )以及佢係咪真係有肺癌( )等嘅資訊;跟手個研究員就會逐個逐個將啲病人個案嘅檢查結果同 X 光片嗰柞數字入落去個程式嘅輸入嗰度,而個輸出層就會係是但一個二元(binary)嘅輸出-「有肺癌」(用「1」代表)同「冇肺癌」(用「0」代表)。喺初頭嗰陣,個程式會犯好多錯,但係喺用呢柞數據訓練到咁上下之後,個程式會根據佢啲學習法則改變咗佢啲參數,順利嘅話啲誤差會變到愈嚟愈細[46];而最後如果個誤差細到去一個可以接受嘅水平嘅話,啲醫護人員就有可能會有興趣用呢個程式幫佢哋手做肺癌檢查。事實係,喺醫學上經已有唔少醫護人員會用機械學習程式幫手做診斷,有研究甚至發現,用機械學習程式嚟做診斷有陣時仲準過用人手做[47]

非監督式

聚類分析嘅圖解;每一點代表一個個案,每個個案喺用 X 軸同 Y 軸分別代表嗰兩個變數上都各有其數值,由幅圖睇得出,啲個案明顯可以按呢兩個變數分三大類。

非監督式學習(unsupervised)同監督式學習最大分別在於非監督式學習唔會有個設計者話俾個程式知乜嘢先係「正確答案」。一個用非監督式學習嘅機械學習程式淨係會接收輸入,並且嘗試由收到嘅輸入當中搵出一啲規律。一個典型嘅非監督式學習演算法嘅步驟大致如下[48]

  1. 攞數據入面嘅一個個案;
  2. 將佢同第啲個案比較,例如係佢會唔會同某柞個案(「某柞個案」係手上個案嘅子集)有共通點或者喺各變數上嘅數值距離特別近等等;
  3. 將下一個個案噉樣做。

非監督式學習最常見嘅用途係攞嚟做聚類分析(cluster analysis)。譬如話,家吓有個生態學家想研究吓一柵區域入面嗰啲傾向於聚集喺啲乜嘢位置,佢可以坐直昇機或者用人造衛星影啲返嚟,再記錄嗮嗰柵區域入面每樖樹生喺邊個位(呢個過程會嘥唔少時間),噉樣得出一個數據庫,之記錄嗮每樖樹喺 X 軸同 Y 軸嗰度嘅坐標。跟手佢就可能會想睇吓:啲樹會唔會傾向於聚集喺個區域入面嘅某啲特定位置(呢啲資訊可能有助佢保育一啲靠樹生存嘅動物)。如果相對嚟講有某一柞、啲樹彼此之間距離近、又同佢哋以外嘅樹距離遠,噉就可以話佢係「聚埋一羣」。而聚類分析就正係用嚟分析一柞個案入面會唔會有幾羣個體係「彼此之間距離近,同羣以外啲個體距離遠」嘅[49][50]

喺呢次研究入面,個生態學家唔會事先知道要點將啲樹分羣,所以用唔到監督式學習[50]。但係佢可以使非監督式學習嚟整一個神經網絡幫佢手做呢個聚類分析。一個簡單嘅可能做法係好似以下噉:將浸輸入層設做「樖樹嘅坐標」,等啲隱藏層用每一樖樹嘅數據逐個逐個計吓。而浸輸出層就有(例如)5 粒人工神經細胞。對每樖樹嘅運算結束之後都會有一粒輸出層嘅神經細胞個啟動程度係大過其他嘅-據此個生態學家就可以按「將樖樹嘅數據入咗落去個神經網絡度之後,邊粒輸出層神經細胞嘅啟動程度最大」為準則將啲樹分做唔同聚類,而且佢仲有得按照分類結果分得好唔好,嚟計吓使唔使改變吓個神經網絡啲參數-個神經網絡就噉喺度進行緊學習。除咗噉,電腦科學界仲有第啲更加精良嘅演算法嚟做開非監督式學習[50][51]

強化學習

強化學習(reinforcement learning)係機械學習嘅一種學習範式,喺機械人設計上好有用。喺強化學習嘅過程裏面,個研究者唔會有個數據庫 俾個程式睇同跟住學,而係俾個程式係噉同佢周圍嘅環境互動(個環境可以係現場,又可以係一個模擬嘅環境):喺每一個時間點 ,個程式會產生一個用輸出數字表示嘅動作(例如「0」代表「企喺度唔郁」同「1」代表「向前行」呀噉),而跟住佢周圍個環境會俾返一啲 feedback-簡單啲講就係話返俾個程式聽,佢個動作啱唔啱(例如個地下有個窿,「向前行」會跌得好痛)。而個程式跟手就會根據呢個 feedback 計吓,睇吓要點樣改佢嗰啲參數先可以令到下次佢做行動嗰陣得到正面回應嘅機會率高啲-而上述嘅呢個例子就有可能可以攞嚟教一個機械人行路[52][53][54]

強化學習嘅過程大致可以想像成噉[55][56]

  1. 個程式俾出一個輸出,
  2. 環境會根據佢嘅內部運作法則決定 feedback, ,係乜( 係現時狀態,而 係下一個狀態);
  3. 個程式會根據 決定係咪要修改自己內部嘅參數,若果係,要點改;
  4. 返步驟 1做過。

個程式內部要有一個演算法,個演算法要用 做輸入,俾出「內部參數要變幾多」做輸出[55]

遺傳演算法

遺傳演算法(genetic algorithm,簡稱 GA)係一種建基於進化論物競天擇過程嘅一種機械學習演算法:喺進化論上,一個族群內部嘅生物個體(例如一群人類)彼此之間或多或少噉喺遺傳上有所差異,而呢啲差異會引致佢哋喺表現型(包括外表、行為同體質等)上有個體差異,當中佢哋有啲生存同繁殖能力勁啲,所以就更加有機會將自己啲遺傳基因傳俾下一代。假設環境唔變,個族群就會一代一代噉喺遺傳上有變異,變到愈發適合喺嗰個環境生存同繁衍。遺傳演算法就係受呢個理論啟發嘅一種演算法,做法如下[57][58]

  1. 整一大柞同類嘅數學模型出嚟,當中每個啲參數都有唔同;
  2. 叫每個數學模型做若干次嘅預測,每個按佢做預測陣時嘅準確度得返個分數 ,分數愈高表示佢表現愈好;
  3. 揀選分數 最高嗰柞模型,將其餘嘅模型淘汰;
  4. 做「繁殖」嘅過程-用最高分嗰柞模型做「父母」,生產下一代嘅模型。啲仔喺參數上會似佢哋嘅父母(「每個仔嘅每粒參數」都係「佢父母嘅同位參數」嘅函數);
  5. 再做過上述過程,重複若干代;

如果一切順利,若干代之後手上嘅模型會係一啲預估估得啱嘅模型[59]

GA 嘅想像圖;
啲模型(A1、A2、A3...)每個都有自己嘅模型參數(模型掕住嗰啲值),
啲參數對應物競天擇當中嘅基因(gene)同埋染色體(chromosome)。

模型評估

兩條 ML 研究用嘅訓練曲線;X 軸係讀取咗嘅數據個案嘅數量,而 Y 軸表示表現指標。

喺做完學習過程之後,就要評估吓最後得出嗰個模型好定唔好。要評一個模型係咪「好」,有以下指標使得[60][61]

準確度

最常用開評估機械學習模型嘅指標就係準確度(accuracy)。即係喺做完學習之後,要個機械學習程式睇一啲佢之前未見過嘅個案,同埋要佢對嗰啲個案進行預測。譬如一個訓練嚟預測股價嘅機械學習程式噉,要評估佢嘅準確度,最好方法就係要佢預估吓一啲股價、係佢之前未見過嘅時間點嘅。如果個程式做嘅嘢係將個案分做離散(discrete)嘅類,準確度可以用以下嘅式計[62]

  • 係估啱咗幾多個個案;
  • 係個案嘅總數。

而要評估一個模型嘅準確度,主要有幾種做法[62][63]

  • 將手上啲數據分成訓練集(training set)同測試集(test set):喺開始做學習之前,將手上數據分做訓練集同測試集。用訓練集(通常包含咗 2/3 嘅個案)做學習,然之後用測試集(通常包含 1/3 嘅個案)要個程式試吓做預測,再用某啲指標嚟量度個程式喺測試當中個預測有幾準-如果係做分類嘅話,可以用準確度(估啱嘅比率)做指標;而如果要預測嘅變數係連續變數嘅話,就可以使平均誤差(平均嚟講,預測嘅數值同正確數值差幾遠)。
  • 自助抽樣法(bootstrapping);設個數據入面嘅個案數量係 n;個演算法會由啲數據度隨機抽一個個案出嚟,將個個案放入自助樣本(bootstrap sample),跟住再擺返第個個案入去抽過(即係所謂嘅邊替換邊抽樣 sampling with replacement),重複 n 次。最尾得出一個(可能有重複嘅)自助樣本,用個自助樣本做過測試。
  • K 次交叉驗證(K-fold cross-validation):隨機噉將數據嘅個案劏做 K 份(喺實際應用上,K 一個常見數值係 10);然後攞其中一份做測試,其餘啲份做學習-跟住逐份逐份(每次都係一個疊代;iteration)過呢個過程。同一道理,都要使用某啲指標量度準確度。以下係 次( )交叉驗證嘅抽象圖解:

靈敏同特異

除咗預測準確度之外,一個做分類嘅機械學習模型嘅質素仲可以用靈敏度同特異度(sensitivity and specificity)作為指標嚟量度。靈敏度同特異度包括咗四個數值:

  • 歸啱咗啲陽性個案嘅真陽性率(True Positive Rate,TRP)
  • 歸啱咗啲陰性個案嘅真陰性率(True Negative Rate,TNR)
  • 歸錯咗啲陽性個案嘅假陽性率(False Positive Rate,FRP)
  • 歸錯咗啲陰性個案嘅假陰性率(False Negative Rate,FNR)

亦都有啲設計者嫌呢啲數字淨係顯示到比例,所以喺寫論文同報告嗰陣會將啲比例嘅分子分母都報埋出嚟[64][65]

想像有一柞個案(圓點),個案分兩種(實心點同空心點),家吓個機械學習演算法嘅任務係要揀啲實心點,大圓圈(selected elements)表示嘅係個演算法判定為「實心點」嘅點,可以畫成下圖實心點係「relevant elements」(對個演算法嚟講重要嘅嘢):

過適嘅問題

人工智能學起嘢嗰陣好多時都會跟奥坎剃刀(Occam's razor)嘅原則:呢條原則話,假設其他因素不變,一個學習者會偏好比較簡單啲嘅理論假說,除非比較複雜啲嗰個模型(例如)解釋同預測現實嘅能力勁好多。

當一個人工智能(通常因為設計得唔好)喺學習嗰陣,為咗要令自己信嗰個模型完美符合過去數據,而選擇一個太複雜嘅模型嗰陣,呢個現象就係所謂嘅過適(overfitting):雖然話呢啲複雜嘅模型解釋過去數據嘅能力比較勁,但係統計學上嘅研究顯示,呢啲模型通常解釋將來數據嘅能力會渣啲。因為噉,喺用手上數據評估一個機械學習模型嗰陣,研究者通常會係想個模型嘅表現有返咁上下好,但如果個模型表現好得滯(例如準確度有成 100%),研究者往往會開始擔心有過適嘅問題[66]

下圖係過適嘅展示。喺學嘢嗰陣,人工智能會嘗試搵條有返咁上下合乎過去數據(黑點)嘅線,用條線做心目嘅模型。藍色嗰條線有過適嘅問題-藍色線完美符合過去數據,但佢條式複雜過黑線好多,通常解釋將來數據嘅能力會比較渣。

應用

異常檢測

數據探勘上,異常檢測(anomaly detection)係指探測一啲同手上嘅大多數個案唔同嘅異常個案,好多時係因為呢啲個案有啲可疑-例如係喺醫療上探測邊啲病人身體狀況數據異常、金融上邊啲銀行交易似係詐騙,又或者一段字入面邊啲句子似係文法錯誤啊噉。喺現實應用當中,要檢查嘅個案數量通常閒閒地都論千計,所以好難用人手做。因為噉,有唔少機械學習專家都落力研究點樣用機械學習技術做異常檢測[67][68]

異常檢測方面嘅技術常用於探測異常網絡活動(因為呢啲活動可能暗示黑客攻擊等等網絡安全問題)。喺呢種情況下,異常檢測未必會依賴「異常」作為分類指標,因為呢啲活動未必咁罕有;一種常見嘅做法係運用聚類分析,教部電腦(例如)認出同黑客攻擊有拏褦嘅網絡活動通常都有啲乜嘢特徵,最後令部電腦曉自動噉探測邊啲活動似係黑客攻擊[69][70]

無論監督式學習定非監督式學習,機械學習演算法都可以攞嚟做異常檢測。非監督式學習嘅例子通常係,個程式自動噉用聚類分析將啲個案分類、再自動噉將啲屬於少數類型嘅個案歸類做「異常」。呢種做法大前題係啲屬少數嗰類型嘅個案真係想要探測嘅類型(喺網絡安全上,呢條假設未必成立)。而監督式學習嘅例子通常嚟講就係個程式設計者明文噉教個程式,講埋佢聽邊啲個案係「異常」,邊啲係「正常」。半監督式學習嘅做法就係用一柞「正常」個案嘅數據,建立一個數學模型;跟手喺撞到下一個個案嗰陣,計吓「假設個產生個案嘅模型同程式內部嗰個一樣、會出現呢啲數值」嘅機會率。而假如計出嚟呢個機會率數值夠細,就有理由相信呢個個案屬於「異常」[69][71][72]

推薦系統

推薦系統(recommendation system)指一個曉預測用家對某件物件會俾乜評價嘅系統,當中成日會用到機械學習演算法。推薦系統嘅例子有 YouTube 等影片分享平台會做嘅「向用家推介有啲乜片佢會有興趣睇」或者 Google 搜尋等嘅搜尋器會做嘅「向用家推介有啲乜新聞佢會有興趣睇」-呢啲技術基本原理都係一樣,涉及個程式攞有關用家以前睇過乜片或者乜網站等嘅資訊,預測個用家對唔同影片或者網站會有乜評價[73][74]

喺最基本嗰種協同過濾(collaborative filtering)做法如下:協同過濾淨係攞有關個用家同啲物件嘅過去互動嘅數據做分析,想像以下呢段噉嘅演算法[73]

import graphlabimport pandas as pd # 攞要用嘅 library# 攞數據;呢個演算法用嘅數據包括每個用家對每件嘢食嘅評價,喺現實應用當中,評價可以用對影片嘅 like 等指標量度。r_cols = ['user_id', 'food_item', 'rating']train_data_df = pd.read_csv('train_data.csv', sep='\t', names=r_cols)test_data_df = pd.read_csv('test_data.csv', sep='\t', names=r_cols)train_data = graphlab.SFrame(train_data_df)test_data = graphlab.SFrame(test_data_df)# 訓練一個模型,例如整個迴歸模型,搵用家嘅特性(性別、年紀同睇開乜嘢網站等)做 x,佢對某件嘢食嘅評價做 y。collab_filter_model = graphlab.item_similarity_recommender.create(train_data,                                                                   user_id='user_id',                                                                   item_id='food_item',                                                                   target='rating',                                                                   similarity_type='cosine')                                                                  # 當有一個用家撳 search 嗰陣,向佢推薦佢最有可能會俾高評價嘅嘢食。which_user_ids = [1, 2, 3, 4]how_many_recommendations = 5item_recomendation = collab_filter_model.recommend(users=which_user_ids,                                                   k=how_many_recommendations)

第啲應用

機械學習能夠令電腦自動噉預測某啲變數嘅數值,所以基本上任何科學或者商學領域都可以用到機械學習嘅技術[8]

... 等等。

研究

電腦科學等領域嘅科學家有著力做機械學習方面嘅研究,務求令機械學習更加有效率。機械學習研究一種簡單做法係噉嘅:研究者可以去搵個數據庫返嚟,將個數據庫嘅個案斬做兩份,一份做訓練集,另一份做測試集,然後用每個研究緊嘅演算法做訓練同埋評估表現(睇返上面「模型評估」)嘅過程,比較吓呢啲演算法嘅表現係點[75][76]

另一方面,又有啲機械學習研究會用一個研究者已知嘅數學模型嚟產生數據,然後再喺所產生嘅數據上用個演算法做學習,睇吓最後個演算法俾嗰個數學模型有幾似原裝嗰個,即係行好似噉樣嘅虛擬碼[77]

有一個已知嘅數學模型產生數據# 例:#    x = rand(100,1) (x 係一個向量,包含 100 個隨機產生嘅數字)#    y = rand(100,1) (set y 做 100 個數字嘅隨機向量先)#    for ii < 100 (for 每個 y 入面嘅數值,將嗰個數值設做 x 嘅相應數值嘅兩倍;y = x * 2 就係個已知嘅數學模型)  #        y(ii) = x(ii) * 2   #        ii = ii + 1 x  y 做數據嘅輸入同輸出將一個監督式學習嘅 ML 演算法行一次最後個程式應該會有個由學習產生嘅數學模型將個數學模型同個已知嘅數學模型比較如果學習產生嘅數學模型同個已知數學模型相近表示個演算法能夠有效噉做學習# 然後研究者可以比較吓唔同演算法邊個最能夠準確噉學到個真嘅數學模型。

上述呢啲研究令學界能夠不斷創造更新更強嘅機械學習演算法[8][78][79]

事實係,雖然機械學習係一種重大嘅革新,但喺應用上,機械學習好多時都達唔到理想嘅效果[80][81][82]。原因可以有好多:數據本身嘅偏差同埋用錯演算法等都可以搞到個機械學習演算法失敗[83]。「機械學習可能失敗」係一個好受關注嘅議題,因為廿一世紀初好多技術都係靠機械學習做嘅。例如係喺 2018 年,優步(Uber)架靠機械學習訓練嘅自駕車探測唔到行人,於是炒咗車,仲撞死咗人[84]。而仲有個案報告話用嚟做醫療診斷嘅機械學習程式出咗錯,搞到病人好長手尾[85][86]。呢啲噉嘅問題令到機械學習嘅專家開始思考機械學習有啲乜嘢缺陷,同埋啲缺陷要點補救[80][87]

註釋

亞倫圖靈(Alan Turing)嘅相;佢對「機械有冇能力思考」等嘅問題作出咗深入嘅考究。

相關領域

睇埋

文獻

  • Nils J. Nilsson, Introduction to Machine Learning.
  • Trevor Hastie, Robert Tibshirani and Jerome H. Friedman (2001). The Elements of Statistical Learning, Springer. ISBN 0-387-95284-5.
  • Pedro Domingos (September 2015), The Master Algorithm, Basic Books, ISBN 978-0-465-06570-7
  • Ian H. Witten and Eibe Frank (2011). Data Mining: Practical machine learning tools and techniques. Morgan Kaufmann, 664pp., ISBN 978-0-12-374856-0.
  • Ethem Alpaydin (2004). Introduction to Machine Learning, MIT Press, ISBN 978-0-262-01243-0.
  • David J. C. MacKay. Information Theory, Inference, and Learning Algorithms. Cambridge: Cambridge University Press, 2003. ISBN 0-521-64298-1
  • Richard O. Duda, Peter E. Hart, David G. Stork (2001) Pattern classification (2nd edition), Wiley, New York, ISBN 0-471-05669-3.
  • Christopher Bishop (1995). Neural Networks for Pattern Recognition, Oxford University Press. ISBN 0-19-853864-2.
  • Stuart Russell & Peter Norvig, (2009). Artificial Intelligence – A Modern Approach. Pearson, ISBN 9789332543515.
  • Ray Solomonoff, An Inductive Inference Machine, IRE Convention Record, Section on Information Theory, Part 2, pp., 56–62, 1957.
  • Ray Solomonoff, An Inductive Inference Machine, A privately circulated report from the 1956 Dartmouth Summer Research Conference on AI.
  • VanderPlas, J. (2016). Python data science handbook: essential tools for working with data. O'Reilly Media, Inc.