一文弄懂各種 loss function

有模型就要定義損失函數 (又叫目標函數),沒有損失函數,模型就失去了優化的方向。大家往往接觸的損失函數比較少,比如迴歸就是 MSE,MAE,分類就是 log loss,交叉熵。在各個模型中,目標函數往往都是不一樣的,如下所示:

Loss Function

損失函數是一種評估 “你的算法 / 模型對你的數據集預估情況的好壞” 的方法。如果你的預測是完全錯誤的,你的損失函數將輸出一個更高的數字。如果預估的很好,它將輸出一個較低的數字。當調整算法以嘗試改進模型時,損失函數將能反應模型是否在改進。“損失”有助於我們瞭解預測值與實際值之間的差異。損失函數可以總結爲 3 大類,迴歸,二分類和多分類。

常用損失函數:

Mean Error (ME)

Mean Squared Error (MSE)

Mean Absolute Error (MAE)

Root Mean Squared Error (RMSE)

Categorical Cross Entropy Cost Function(在只有一個結果是正確的分類問題中使用分類交叉熵)

Binary Cross Entropy Cost Function.

Hinge Loss(hinge 損失不僅會懲罰錯誤的預測,也會懲罰那些正確預測但是置信度低的樣本)

Multi-class Cross Entropy Loss

這裏我們要區分 Multi-class 和 Multi-label,如下圖:

對於 Multi-Label 我們不能使用 softmax,因爲 softmax 總是隻強制一個類變爲 1,其他類變爲 0。因此,我們可以簡單地在所有輸出節點值上用 sigmoid,預測每個類的概率。

Divergence LOSS (KL-Divergence)

KL 散度是一個分佈與另一個分佈的概率差異的度量,KL 散度在功能上類似於多類交叉熵,KL 散度不能用於距離函數,因爲它不是對稱的。

Huber loss

a 爲比較小的值,此函數是二次函數;對於 a 爲大值時,此函數是線性函數。變量 a 通常是指殘差,即觀測值和預測值之間的差值。與平方誤差損失相比,Huber 損失對數據中的異常值不那麼敏感。使函數二次化的小誤差值是多少取決於 “超參數”,𝛿(delta),它可以調整。

有的時候,我們的任務並不是迴歸或分類,而是排序,下面介紹 rank loss。

Rank Loss

排名損失用於不同的領域,任務和神經網絡設置,如 Siamese NetsTriplet Nets。這就是爲什麼他們會有名稱,如 Contrastive Loss, Margin Loss, Hinge Loss or Triplet Loss

與其他損失函數(如交叉熵損失或均方誤差損失)不同,損失函數的目標是學習直接預測給定輸入的一個標籤、一個值或一組或多個值,rank loss 的目標是預測輸入之間的相對距離。這個任務通常被稱爲度量學習。

rank loss 在訓練數據方面非常靈活:我們只需要得到數據點之間的相似性得分就可以使用它們。分數可以是二元的(相似 / 不同)。例如,假設一個人臉驗證數據集,我們知道哪些人臉圖像屬於同一個人(相似),哪些不屬於(不同)。利用 rank loss,我們可以訓練 CNN 來推斷兩張人臉圖像是否屬於同一個人。

爲了使用 rank loss,我們首先從兩個(或三個)輸入數據點中提取特徵,並得到每個特徵點的嵌入表示。然後,我們定義一個度量函數來度量這些表示之間的相似性,例如歐幾里德距離。最後,我們訓練特徵提取器在輸入相似的情況下爲兩個輸入產生相似的表示,或者在兩個輸入不同的情況下爲兩個輸入產生距離表示。

Pairwise Ranking Loss

我們從上式可以看到,當兩個人的描述的是一個人時,他們嵌入表示距離大小就是 loss,當描述不是一個人時,嵌入表示距離大於 margin 纔不會產生 loss。我們也可以把公式改寫爲:

Triplet Ranking Loss

通過使用三組訓練數據樣本(而不是成對樣本),這種設置優於前者(同時優化類內距離和類間距),目標就是使得錨點與負樣本距離顯著大於 (由 margin 決定) 與正樣本的距離,loss 定義如下。

我們來分析一下這種損失的三種情況:

Easy Triplets: 相對於嵌入空間中的正樣本,負樣本已經足夠遠離錨定樣本。損失是 0 並且網絡參數不會更新。

Hard Triplets: 負樣本比正樣本更接近錨點,損失是正的。

Semi-Hard Triplets: 負樣本比正樣本離錨的距離遠,但距離不大於 margin,所以損失仍然是正的。

負樣本選擇:

在 triplets loss 訓練過程中,負樣本選擇和三元祖樣本挖掘是非常重要的。選擇的策略對訓練的效率和最終效果有很大的影響。一個很重要的點是,訓練三元祖應避免 easy triplets,因爲他們所造產生的 loss 是 0,不能用於優化模型。

樣本挖掘的第一種策略離線進行三元組挖掘,這意味着三元組是在訓練開始時定義的,或者是在每個 epoch 前。後來又提出了 online triplet loss(在線三元組挖掘),即在訓練過程中爲每一個 epoch 定義三元組,從而提高了訓練效率和性能。

需要注意的是,選擇負樣本的最佳方法是高度依賴於任務的。

Circle loss

在理解了 triplet loss 之後,我們終於可以開始研究 circle loss:A Unified Perspective of Pair Similarity Optimization。Circle Loss 獲得了更靈活的優化途徑及更明確的收斂目標,從而提高所學特徵的鑑別能力。它使用同一個公式,在兩種基本學習範式,三項特徵學習任務(人臉識別,行人再識別,細粒度圖像檢索),十個數據集上取得了極具競爭力的表現。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/g2-66EFcHDsYdi3elv4Ckg