To be, or not to be, that is the question.
BY William Shakespeare
選擇 CE 或是 BCE,這是一個問題。
要解答這個問題,我們要從兩個層面探討:
- 前置 Activation funtion 選擇(Softmax, Sigmoid)
- 下游任務的目標
前置 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 減少計算量。
以上。