跳至主要内容

機器學習任務攻略

基本任務流程

機器學習的過程通常包含以下階段:

  1. 準備資料:訓練資料包含輸入 xx 與標籤 y^\hat{y};測試資料則僅有 xx
    • 應用實例:語音辨識(xx 為訊號,y^\hat{y} 為音標)、影象辨識(辨識圖片內容)、語者辨識(判斷說話者身份)、機器翻譯。
  2. 訓練模型(三個步驟)
    • 定義一個含未知參數 θ\theta 的函數 fθ(x)f_{\theta}(x)
    • 定義損失函數 (Loss function),判斷參數好壞。
    • 最佳化 (Optimization):找出能讓損失值最小的參數 θ\theta^*
framework-of-ml-1framework-of-ml-2
應用實例訓練模型(三個步驟)

核心攻略:如何診斷與解決問題

當模型在測試資料上的結果不滿意時,請依照下列流程檢查:

檢查訓練資料的損失 (Training Data Loss)

首先要確認模型在訓練集上是否已經學好,而非直接看測試集的結果。

  • 狀況 A:訓練損失過大 (Training Loss is large) training-loss-is-large

    • 原因 1:模型偏差 (Model Bias) model-bias
      • 現象:模型過於簡單,其函數集合 (Function Set) 太小,根本不包含能讓損失變低的函數(如「大海撈針,針不在海裡」)。
      • 對策:增加模型彈性。例如:增加輸入特徵 (Features)、增加模型深度或層數(Deep Learning)。
    • 原因 2:最佳化問題 (Optimization Issue) optimization-issue
      • 現象:函數集合夠大(針在海裡),但演算法(如 Gradient Descent)不給力,卡在局部最小值 (Local Minima),沒撈到針。
      • 診斷方法比較深淺模型。若 56 層網路的訓練損失比 20 層高,通常是最佳化問題,而非模型偏差(因為 56 層的彈性理論上一定大於 20 層)。
      • 對策:更換最佳化演算法或調整訓練策略。
  • 狀況 B:訓練損失小,但測試損失大 (Training Loss is small, Testing Loss is large) training-loss-small-testing-loss-large

    這可能是以下兩種情況之一:

    • 狀況 B-1:過擬合 (Overfitting) overfitting

      • 現象:模型彈性太大,產生了「Freestyle」,在訓練資料上完美擬合,但在沒看過的測試資料上表現極差(如極端例子:直接背下訓練集)。
      • 對策
        1. 增加訓練資料:最有效的方法。
        2. 資料增強 (Data Augmentation)data-augmentation 根據對問題的理解創造新資料(如圖片左右翻轉,但不可亂翻轉如上下顛倒)。
        3. 限制模型彈性constrained-model 給予限制,使其接近真實分布。方法包括:減少參數、減少特徵、共用參數(如 CNN 結構)、早停法 (Early stopping)、正則化 (Regularization) 或 Dropout。
    • 狀況 B-2:資料不匹配 (Mismatch)

      • 現象:訓練資料與測試資料的分佈不同。此時增加訓練資料也無濟於事(如用 2020 年的數據預測 2021 年反常的點閱狀況)。
      • 對策:需要對資料產生方式有深刻理解,並採用特定技術(如作業十一的設計)。

偏差與複雜度的權衡 (Bias-Complexity Trade-off)

1. 定義模型複雜度

  • 參數越多、包含的函數集合 (Function Set) 越廣,模型就越複雜。

2. 複雜度對損失 (Loss) 的影響

  • 訓練集 (Training):模型越複雜,訓練損失會持續下降
  • 測試集 (Testing):隨複雜度增加,測試損失會先下降;但超過臨界點後會因過擬合 (Overfitting)突然暴增

bias-complexity-trade-off


模型選擇與驗證策略 (Model Selection)

  1. 驗證集 (Validation Set)
    • 將訓練資料切分為「訓練集」與「驗證集」(如 9:1 分)。
    • 在訓練集訓練,並以驗證集的分數挑選模型
    • 挑選好後再上傳,這能讓公開分數較真實地反應私有分數。 dataset-split
  2. N-折交叉驗證 (N-fold Cross Validation)
    • 將訓練資料切成 N 等份,輪流以其中一份作驗證集,其餘為訓練集。
    • 計算各模型在 N 種狀況下的平均表現,挑選最優模型,最後再用全部訓練資料重新訓練該模型。 n-fold-cross-validation