跳轉到

8.4 Loss 與 Metrics

範例程式:Open In Colab

Loss function 是模型訓練時真正被 optimizer 最小化的目標,metrics 則是人類用來理解模型表現的觀察指標。兩者常一起出現在 model.compile(),但用途不同。本篇用 regression、binary classification 與 multi-class classification 三種任務整理常見選擇,並示範如何在 Keras 中設定。

1. 學習目標

訓練模型時,常見錯誤是 loss、輸出層 activation 與標籤格式不一致。例如:

  1. 多類別分類用 softmax,卻搭配 binary_crossentropy
  2. 標籤是整數類別,卻使用需要 one-hot label 的 loss。
  3. 資料高度不平衡,卻只看 accuracy。
  4. regression 任務使用分類 metrics。

本篇要建立的判斷方式是:先確認任務型態與標籤格式,再選 loss、輸出層與 metrics。

2. Loss 與 Metrics 的差異

名稱 用途 是否直接影響權重更新
Loss function optimizer 最小化的目標
Metrics 訓練與評估時顯示的觀察指標 通常否

例如 binary classification 常用 binary_crossentropy 作為 loss,並同時觀察 accuracyPrecisionRecallAUC。模型更新權重時主要看 loss,但我們判斷模型是否適合實務情境時,會一起看 metrics。

3. 常見任務對照表

任務 輸出層 標籤格式 常用 loss 常用 metrics
Regression Dense(1) 連續數值 msemae maeRootMeanSquaredError
Binary classification Dense(1, sigmoid) 0/1 binary_crossentropy accuracyPrecisionRecallAUC
Multi-class classification Dense(num_classes, softmax) 整數類別 sparse_categorical_crossentropy accuracy
Multi-class classification Dense(num_classes, softmax) one-hot categorical_crossentropy accuracy
Multi-label classification Dense(num_labels, sigmoid) 多個 0/1 標籤 binary_crossentropy AUC、自訂 threshold metrics

4. 本篇實作流程

Notebook 會先用小表格整理 loss 與 metrics 的搭配,再使用合成 binary classification 資料訓練模型,示範:

  1. model.compile() 如何同時設定 loss 與多個 metrics。
  2. model.evaluate() 回傳的數值如何對應到 metrics 名稱。
  3. 如何用 classification_report 與 confusion matrix 補充 Keras metrics。
  4. 如何改變 decision threshold,觀察 precision 與 recall 的取捨。

Keras compile 範例如下:

model.compile(
    optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
    loss='binary_crossentropy',
    metrics=[
        'accuracy',
        tf.keras.metrics.Precision(name='precision'),
        tf.keras.metrics.Recall(name='recall'),
        tf.keras.metrics.AUC(name='auc')
    ]
)

5. Accuracy 不一定夠用

若資料不平衡,accuracy 可能很高但模型沒有抓到重要類別。例如詐欺偵測、疾病篩檢或異常偵測,真正重要的可能是 recall 或 precision。

指標 適合觀察
Precision 模型判定為正類時,有多少是真的正類
Recall 真正的正類中,有多少被模型抓到
AUC 不固定單一 threshold 時的整體排序能力
Confusion matrix TP、FP、TN、FN 的分布

6. 如何套用到自己的資料?

替換資料時,先回答四個問題:

  1. 這是 regression、binary classification、multi-class classification 還是 multi-label classification?
  2. y 的格式是連續數值、0/1、整數類別、one-hot,還是多欄 0/1?
  3. 最後一層 activation 是否和任務一致?
  4. 評估指標是否能反映實務需求?

只要這四件事一致,compile() 的設定就比較不容易出錯。

7. 小結

Loss 是模型學習的目標,metrics 是我們判斷模型是否有用的觀察角度。選擇 loss 與 metrics 時,不要只背 API 名稱,而要從任務型態、標籤格式、輸出層與實務需求一起判斷。