Cross Entropy 與 Binary Cross Entropy 之選擇。

 


To be, or not to be, that is the question.

BY William Shakespeare


選擇 CE 或是 BCE,這是一個問題。


要解答這個問題,我們要從兩個層面探討:

  1. 前置 Activation funtion 選擇(Softmax, Sigmoid)
  2. 下游任務的目標



前置 Activation funtion 選擇:


Softmax 與 Sigmoid 都是把數值壓縮到 [0, 1] 區間的函數,
差別在於 Softmax 會考慮整體數值向量做處理。

舉例來說:

如果給定向量 S = [1, 2, 3]:

Softmax(S) = [0.09003057 0.24472847 0.66524096]

Sigmoid(S) = [0.73105858 0.88079708 0.95257413]

Softmax 輸出的總和會是 1,會有抑制相對小數值的作用;
Sigmoid 則會把每個輸出入都視為獨立去做壓縮。




下游任務的目標:

目前是還沒看到拿 CE 或 BCE 做分類以外的任務,
所以這邊只探討三種分類情境。

  • 單標籤二分類
  • 單標籤多分類
  • 多標籤多分類

先解釋一下標籤跟分類的意思,
這邊標籤指的是 Loss function  input 進去的那張 Ground True,
單標籤 = 對於每個樣本來說只有一個屬性(或類別)標成對的(1),其他都是 0 。

分類的意思是依據任務需求分成幾類,
不一定一個標籤對一個類別。


舉例來說,如果有一則新聞標題是:

"職棒啦啦隊性愛影片外流"


假設有棒球、啦啦隊、性愛的標籤,
那要歸類到棒球、啦啦隊、性愛,還是八卦?

這就是一個多標籤多分類的問題。




單標籤二分類:


CE + Softmax 可以做, BCE + Sigmoid 也可以做。

有一派說法是 BCE 要用一個節點
(意指只提供一個類的正確率,第二類正確率則用 1 - 該類正確率去算。),
否則用兩個節點的話,因為有可能你模型訓練出來會給出 [1, 1]。
(模型認為這個樣本兩個類型都符合,直接做成多標籤任務。)

但是根據我拿 BCE 做單標籤多分類的結論,
應該不會出現這種現象。


單標籤多分類:

CE + Softmax 可以做, BCE + Sigmoid 也可以做。

接續上面一個節點的問題,我認為就算給出 [1, 1] 的 logit 預測結果,
訓練後也會乘上 Ground True 壓抑掉,反而因為有提供預測錯誤標籤的梯度收斂會更快。

提供 CE 與 BCE 公式參考:




多標籤多分類:


CE + Softmax 完全不能做,因為 Softmax 會把最大機率以外的其他機率壓抑掉。

那就用 CE + Sigmoid 不就好了(天真),
不能這樣做的原因是 CE 只會照正確的標籤分類給梯度,
多標籤裡面會難以收斂。

所以這邊通常拿 BCE + Sigmoid 來做。




結論:


腦袋當機不知道要放什麼 Loss function 的時候拿 BCE 先試試看就對了,
反正這顆很泛用。

單標籤多分類任務只關心一個標籤,其他分類梯度不管的,再拿 CE + Softmax 減少計算量。

以上。


留言

這個網誌中的熱門文章

[心得] 破解 Google 雲端下載限制(非建立副本)