neural.hk

機器學習是什麼:從訓練到預測的一整條流程

一間機構想讓系統判斷個案屬於哪個類別時,重點不只在模型名稱,而在資料、判斷、預測與日常工作如何串成完整流程。

機器學習與逐條編寫規則的分別

Google Machine Learning Glossary 將機器學習定義為:讓計算機從資料中學習,而不是由程式逐條明文編寫規則。傳統規則式程式把判斷條件明確寫在程式內;機器學習則透過訓練,從資料中學到模型參數。

兩者的分界在於規則從哪裏來。規則式程式由人預先決定條件,機器學習則把可調整的判斷參數交由訓練過程形成。判讀一個方案時,可以問:條件是作者逐條寫定,還是從資料中學到?對機構而言,這比只看方案是否稱呼自己為「AI」更有意義。

分類與預測的基本概念

分類是把資料分到離散類別。feature(特徵)是作判斷的輸入欄位;label(標籤)是預測的目標答案;model(模型)則是訓練後所得的參數組合。機構首先要分清哪些欄位屬於輸入,以及哪個答案才是預測目標。

Google Machine Learning Crash Course — Classification 指出,模型通常輸出機率,再由閾值決定哪一邊算正類。閾值改變,機率輸出中哪一邊算正類也會改變。機率是模型作出的預測輸出,不等於模型整體表現的評估結果。

閱讀分類方案時,要判斷特徵是否真的是模型作出判斷時使用的輸入、標籤定義是否明確,以及採用哪個閾值把輸出轉成類別。評估模型時亦要用指標衡量,不能只看模型自己說多有信心。

標註:把目標答案放進資料

標註是為用作學習的資料配上目標標籤。要判斷的是標籤定義是否清楚、不同標註是否一致,以及特徵是否確為模型判斷時使用的輸入欄位。 若標註者對目標答案有不同理解,便應先整理標註定義,否則模型無法清楚知道要學習甚麼關係。

切分資料:分開學習與評估

scikit-learn 的 train_test_split 文件說明,資料可以隨機切成訓練與測試子集。傳入固定的 random state,可以令切分結果可重現;面對類別不平衡的分類任務,可使用 stratify 作分層劃分,讓各組別的比例在兩份資料中大致維持。

scikit-learn 的 Cross-validation 文件則把交叉驗證描述為:將資料輪流切成 k 折,每一折輪流作驗證集,用來比較不同模型或參數的表現。測試集則必須獨立保留到最後。

要判斷的是切分能否重現、分類資料是否需要分層劃分,以及測試集是否真正獨立保留。 這些安排的目的,是讓後續評估不會建立在已經參與學習或選擇的資料上。

訓練:從資料學出模型參數

訓練是在訓練資料上,讓模型學出參數組合。要判斷的是參數來自哪批資料,而該批資料的特徵與標籤是否已經明確。 訓練完成代表模型從訓練資料形成了參數,仍不代表方案已經通過驗證或測試。

驗證:比較模型、參數與閾值

驗證用來比較不同模型或參數的表現。k-fold 交叉驗證會讓每折資料輪流作驗證集,配合評估指標比較方案。對分類任務,也要把閾值納入檢視,因為它會決定機率輸出中哪一邊算正類。

要判斷的是哪些方案在既定指標下較合適,以及正類與閾值的定義是否清楚。 Google Machine Learning Crash Course — Classification 提醒,評估應使用指標,而不是只依模型輸出的信心程度。

測試:用獨立資料作最後評估

測試集在模型、參數與閾值決定前不應參與選擇,並須獨立保留到最後。測試階段以指標評估已選方案,而不是只報出某次預測的機率。

要判斷的是測試集是否真正獨立,以及測試所用的標籤、任務與指標是否和驗證階段一致。 測試結果應成為最後評估依據,而不是繼續用來挑選方案。

部署:把預測接入實際工作

部署是把通過評估的模型接到實際預測介面:輸入特徵,模型輸出機率,再由閾值把輸出轉成類別。機構要判斷實際介面收集的欄位是否與訓練時使用的特徵一致,並記錄模型、標籤定義、閾值及採用指標。 這些資料令使用輸出有可核對的依據,也方便日後判斷問題出在哪個環節。

監控:在使用期間持續核對

監控要延續整套流程,而不是只看介面有沒有回應。應檢查實際輸入是否仍能按原有特徵定義解釋、機率與類別是否按同一閾值解讀,以及評估是否仍以指標而不是模型自信程度為依據。

要判斷的是資料、標籤、模型輸出、閾值與評估指標是否仍然對得上。 當實際使用中出現無法解釋的輸入或類別判定時,便應回到相應環節,重新檢視標註、特徵、訓練、驗證或部署設定。