玩統計機器學習筆記

機器學習策略Machine Learning Strategy

模型表現不如預期時,該先調哪一個旋鈕?用正交化、偏誤與變異分析、錯誤分析,建立一套有順序的改善流程。

第 1 章,共 11 章|初版 2019 年 4 月・2026 年 10 月修訂

本章內容
  1. 1.1正交化
  2. 1.2評估指標
  3. 1.3訓練、開發與測試集
  4. 1.4偏誤與變異分析
  5. 1.5錯誤分析
  6. 1.6參考資料

訓練一個模型不難,難的是當結果不理想時,知道下一步該做什麼。可以嘗試的方法很多:收集更多資料、換一個更大的網路、加強正則化、調整學習率、改變損失函數……如果每次都憑直覺挑一個試試看,往往花了幾週,卻說不清楚是哪個改變真正帶來了進步。

這一章整理的是「做機器學習專案的方法論」。核心想法只有一個:把問題拆成彼此獨立的幾個環節,一次只處理一個。每個環節都有自己的診斷指標,也有專門對應的調整手段。

1.1正交化Orthogonalization

正交化(orthogonalization)借用的是線性代數的概念:兩個互相正交的方向,調整其中一個不會影響另一個。套用到模型調校上,就是希望每一個「旋鈕」只控制一件事。

可以把它想像成顯微鏡的粗調節輪與細調節輪:先轉粗調節輪,讓影像落在視野範圍內;再轉細調節輪對焦。如果一個旋鈕同時改變位置與焦距,就很難調到清楚的畫面。

一個監督式學習專案,通常要依序通過四道關卡,每一關失敗時對應不同的處理方式:

關卡 失敗時代表 對應的旋鈕
在訓練集表現好 偏誤過高(模型學不起來) 更大的網路、更好的最佳化演算法、訓練更久
在開發集表現好 變異過高(過擬合) 正則化、更多訓練資料
在測試集表現好 對開發集過度調校 更大的開發集
在真實世界表現好 開發/測試集或評估指標選錯 重新設計開發/測試集,或更換成本函數與評估指標

Training set

訓練集表現好

可避免偏誤

未通過時更大的網路、更好的最佳化方法、訓練更久

Dev set

開發集表現好

變異

未通過時正則化、更大的訓練集

Test set

測試集表現好

對開發集過度調校

未通過時更大的開發集

Real world

真實世界表現好

目標設定

未通過時重新設計開發/測試集,或更換成本函數與評估指標

圖 1.1 正交化的四道關卡。由左而右依序通過,每一關只用對應的旋鈕處理,不必同時調整全部。

建議的工作順序

  1. 先決定評估指標。選一個能代表專案目標的指標,例如準確率(accuracy)、召回率(recall)或 F1 分數,作為之後所有比較的共同基準。
  2. 快速建立一個初始模型。不必一開始就追求最好的架構,先用簡單的模型得到一個基準結果。這個結果能幫助我們縮小參數調校的範圍、選擇值得優化的方向,也能及早發現程式錯誤這類人為問題。
  3. 進行偏誤與變異分析、錯誤分析。根據診斷結果,挑選對應的旋鈕,然後回到第 2 步反覆迭代。

1.2評估指標Evaluation Metrics

單一數字的評估指標

迭代的速度取決於「能不能快速判斷哪一個模型比較好」。如果同時看精確率(precision)與召回率兩個數字,模型 A 精確率高、模型 B 召回率高時,就很難做決定。因此建議使用單一數字的評估指標(single-number evaluation metric),例如結合兩者的 F1 分數。各種指標的定義請見第 5 章。

最佳化指標與滿足指標

實務上,「好模型」往往有多個條件。常見的做法是:

  • 選一個最佳化指標(optimizing metric):希望它越高(或越低)越好,例如準確率。
  • 其餘條件設為滿足指標(satisficing metric):只要達到門檻即可,例如「每張影像的推論時間低於 100 毫秒」、「某一類重要類別的誤判率低於 1%」。

這樣一來,比較模型時只需要在符合所有門檻的候選者中,挑出最佳化指標最好的那一個。

1.3訓練、開發與測試集Train / Dev / Test Sets

資料通常切成三份:

  • 訓練集(training set):用來訓練模型參數。
  • 開發集(dev set):又稱驗證集,用來比較不同模型與超參數,決定下一步的方向。
  • 測試集(test set):在開發告一段落後,用來估計模型在真實世界的表現,不應該參與任何調校決策。

切分比例

在資料量只有數千筆的年代,常見的比例是 60/20/20。但在資料量達到百萬筆的情境下,開發集與測試集只需要「足夠大,能可靠地分辨模型好壞」即可,即使只佔全部資料的 1%,也有上萬筆。因此 98/1/1 這樣的比例在大數據情境並不罕見。

分布要一致

開發集就像是團隊瞄準的靶心。如果開發集與測試集的分布不同,團隊可能花了好幾個月把模型調到很準,結果發現測試時靶心早就換了位置。相對地,訓練集與開發/測試集的分布略有不同是可以接受的,例如用大量網路圖片訓練,但開發與測試集只使用手機實際拍攝的照片。

1.4偏誤與變異分析Bias and Variance

偏誤(bias)與變異(variance)是診斷模型問題最重要的兩個概念。直覺上,偏誤描述模型「平均而言離目標多遠」,變異描述模型「對訓練資料的變動有多敏感」。完整的數學分解請見第 5 章。

以人類表現作為參考

理論上能達到的最低錯誤率稱為貝氏最佳誤差(Bayes optimal error)。它通常無法直接得知,在影像、語音這類人類擅長的任務上,常以人類水準的誤差(human-level error)來近似。有了這個參考點,就能把模型的誤差拆成兩段:

誤差的差距 名稱 代表的問題
人類水準誤差 → 訓練集誤差 可避免偏誤(avoidable bias) 模型擬合不足
訓練集誤差 → 開發集誤差 變異(variance) 模型無法泛化

例如人類誤差為 1%、訓練集誤差 8%、開發集誤差 10%:可避免偏誤是 7%,變異是 2%,應該優先處理偏誤。若訓練集誤差是 2%、開發集誤差 10%,則變異才是主要問題。

對應的處理方式

診斷結果 優先嘗試 說明
偏誤過高 更大的網路(更寬或更深)、訓練更久、更好的最佳化演算法、不同的網路架構 更大的網路幾乎總是有幫助;訓練更久則不一定
變異過高 收集更多資料、正則化、資料擴增、不同的網路架構 更多資料是最可靠的方法,但成本也最高

1.5錯誤分析Error Analysis

當模型在開發集上的表現不理想時,與其直接換方法,不如先把預測錯誤的資料點拿出來逐一檢查,找出讓模型失靈的潛在原因。

步驟

  1. 從開發集中隨機抽出一批預測錯誤的樣本(例如 100 筆)。
  2. 人工檢視每一筆,標記錯誤的類型。
  3. 統計各類型所佔的比例,估計「若完全解決這一類錯誤,整體誤差最多能降低多少」,據此決定處理的優先順序。

兩種常見的錯誤類型

  • 標註錯誤(mislabeled):資料的標註本身就是錯的,也就是標註值不等於真實值。如果這類錯誤在開發集中佔了相當比例,就值得花時間修正開發集與測試集的標註(兩者要一起修正,才能維持相同分布)。深度學習模型對訓練集中隨機的少量標註錯誤通常相當穩健。
  • 模型分類錯誤(misclassification):標註正確,但模型預測錯了。這才是需要透過改進模型處理的部分。

當訓練集與開發集分布不同時

如果訓練集與開發集來自不同的分布,開發集誤差偏高時,就無法判斷原因是過擬合,還是兩者的分布差異(data mismatch)。這時可以從訓練集中切出一小部分作為訓練開發集(train-dev set),它與訓練集同分布,但不參與訓練。

分布 D′:模型實際用來學習的資料來源
分布 D:真正關心的資料
圖 1.2 加入訓練開發集(train-dev set)的切分方式。它與訓練集同分布、但不參與訓練,用來區分「過擬合」與「資料分布不一致」。
誤差比較 差距大時代表
訓練集 → 訓練開發集 變異:模型對同分布的新資料也無法泛化
訓練開發集 → 開發集 資料分布不一致(data mismatch)
開發集 → 測試集 對開發集過度調校

確認是資料分布不一致之後,可以考慮以下做法:

  1. 重新混合後再隨機切分:如果所有資料其實都同樣具有代表性,把訓練、開發、測試集合併後重新隨機切分,是最直接的解法。
  2. 調整切分方式:保留真正關心的資料作為開發集與測試集,訓練集則可以混入其他來源的資料,並以訓練開發集監控變異。
  3. 收集更多貼近目標分布的訓練資料:效果最好,但通常費時費力,可行性需要評估;資料合成(data synthesis)是另一個可考慮的替代方案。

1.6參考資料References

  • Andrew Ng, Machine Learning Yearning(2018)。
  • deeplearning.ai, Structuring Machine Learning Projects(Coursera 深度學習專項課程第三門課)。
  • Goodfellow, Bengio & Courville, Deep Learning, MIT Press, 2016,第 11 章 Practical Methodology。