8.4 Loss 與 Metrics
Loss function 是模型訓練時真正被 optimizer 最小化的目標,metrics 則是人類用來理解模型表現的觀察指標。兩者常一起出現在 model.compile(),但用途不同。本篇用 regression、binary classification 與 multi-class classification 三種任務整理常見選擇,並示範如何在 Keras 中設定。
1. 學習目標
訓練模型時,常見錯誤是 loss、輸出層 activation 與標籤格式不一致。例如:
- 多類別分類用
softmax,卻搭配binary_crossentropy。 - 標籤是整數類別,卻使用需要 one-hot label 的 loss。
- 資料高度不平衡,卻只看 accuracy。
- regression 任務使用分類 metrics。
本篇要建立的判斷方式是:先確認任務型態與標籤格式,再選 loss、輸出層與 metrics。
2. Loss 與 Metrics 的差異
| 名稱 | 用途 | 是否直接影響權重更新 |
|---|---|---|
| Loss function | optimizer 最小化的目標 | 是 |
| Metrics | 訓練與評估時顯示的觀察指標 | 通常否 |
例如 binary classification 常用 binary_crossentropy 作為 loss,並同時觀察 accuracy、Precision、Recall 與 AUC。模型更新權重時主要看 loss,但我們判斷模型是否適合實務情境時,會一起看 metrics。
3. 常見任務對照表
| 任務 | 輸出層 | 標籤格式 | 常用 loss | 常用 metrics |
|---|---|---|---|---|
| Regression | Dense(1) |
連續數值 | mse、mae |
mae、RootMeanSquaredError |
| Binary classification | Dense(1, sigmoid) |
0/1 | binary_crossentropy |
accuracy、Precision、Recall、AUC |
| 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 資料訓練模型,示範:
model.compile()如何同時設定 loss 與多個 metrics。model.evaluate()回傳的數值如何對應到 metrics 名稱。- 如何用
classification_report與 confusion matrix 補充 Keras metrics。 - 如何改變 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. 如何套用到自己的資料?
替換資料時,先回答四個問題:
- 這是 regression、binary classification、multi-class classification 還是 multi-label classification?
y的格式是連續數值、0/1、整數類別、one-hot,還是多欄 0/1?- 最後一層 activation 是否和任務一致?
- 評估指標是否能反映實務需求?
只要這四件事一致,compile() 的設定就比較不容易出錯。
7. 小結
Loss 是模型學習的目標,metrics 是我們判斷模型是否有用的觀察角度。選擇 loss 與 metrics 時,不要只背 API 名稱,而要從任務型態、標籤格式、輸出層與實務需求一起判斷。