損失函數
損失函數就是一個衡量標準,告訴你模型的「預測」和「正確答案」有多接近——越小表示越準確。
訓練神經網路(包括 CNN)時,每一步「優化」其實就是試著把這個 loss 變小。
為什麼 CNN 必須有損失函數?
你可以想成:
-
模型給每張圖做預測(outputs)
-
真正的正解標籤(labels)已知
-
把 outputs、labels 丟給損失函數
-
得到一個數字 loss,代表這批預測的「總誤差」
-
最終 optimizer (SGD, Adam…)就是根據這個 loss 來更新所有權重
多分類 CNN 常用的損失函數:交叉熵 CrossEntropyLoss
-
**PyTorch 實作最常見就是
nn.CrossEntropyLoss()** -
一次處理一個 batch,輸入形狀是 (batch, 類別數),標籤是每張圖的正確類別
-
這個 loss 函數自帶 softmax + log,無需你自己在模型裡加 softmax 層
-
他的物理解釋可以想成:「正確類別的預測機率越大,loss 越小;錯的機率越大,loss 越大」
簡化直觀流程:
-
CNN 輸出每個類別的「得分」(logits),常不是機率
-
CrossEntropyLoss先自動經過 softmax 變成機率分布 -
比較這分布和正確答案(one-hot 或 index)
-
算出整體誤差 loss
其他常見的損失函數(CNN裡也常用)
-
BCEWithLogitsLoss:二元分類(只有 0 或 1—如貓或不是貓)或多標籤(圖可同時屬多個類別)問題
-
MSELoss:回歸問題(預測連續數值)
-
Focal Loss:解決類別極不平衡時,專門加大難分類樣本的權重
相關筆記
- 前向傳播(Forward Propagation):產生預測值
- 反向傳播(Backpropagation):對損失求梯度
- 正則化:加在損失上的懲罰項
- moco.py:實例:對比學習的交叉熵(InfoNCE)損失