簡體   English   中英

Keras 和 TensorFlow 中所有這些交叉熵損失之間有什么區別?

[英]What are the differences between all these cross-entropy losses in Keras and TensorFlow?

所有這些交叉熵損失之間有什么區別?

Keras 正在談論

  • 二元交叉熵
  • 分類交叉熵
  • 稀疏分類交叉熵

雖然 TensorFlow 有

  • 帶有 logits 的 Softmax 交叉熵
  • 帶有 logits 的稀疏 softmax 交叉熵
  • 帶有 logits 的 Sigmoid 交叉熵

它們之間有什么區別和關系? 它們的典型應用是什么? 數學背景是什么? 還有其他應該知道的交叉熵類型嗎? 有沒有沒有 logits 的交叉熵類型?

只有一個交叉(香農)熵定義為:

H(P||Q) = - SUM_i P(X=i) log Q(X=i)

在機器學習使用中, P是實際(ground truth)分布, Q是預測分布。 您列出的所有函數都只是輔助函數,它們接受不同的方式來表示PQ

基本上有3個主要的考慮事項:

  • 有兩種可能的結果(二元分類)或更多。 如果只有兩個結果,那么Q(X=1) = 1 - Q(X=0)所以 (0,1) 中的單個浮點數標識了整個分布,這就是二元分類中的神經網絡具有單個輸出的原因(邏輯回歸也是如此)。 如果有 K>2 個可能的結果,則必須定義 K 個輸出(每個Q(X=...)

  • 一個要么產生適當的概率(意味着Q(X=i)>=0SUM_i Q(X=i) =1或者只是產生一個“分數”並且有一些將分數轉換為概率的固定方法。例如一個實數可以通過采用sigmoid來“轉換為概率”,一組實數可以通過他們的softmax等進行轉換。

  • j使得P(X=j)=1 (有一個“真正的類別”,目標是“硬”的,比如“這張圖片代表一只貓”)或者有“軟目標”(比如“我們是 60 % 確定這是一只貓,但 40% 它實際上是一只狗”)。

根據這三個方面,應該使用不同的輔助函數:

                                  outcomes     what is in Q    targets in P   
-------------------------------------------------------------------------------
binary CE                                2      probability         any
categorical CE                          >2      probability         soft
sparse categorical CE                   >2      probability         hard
sigmoid CE with logits                   2      score               any
softmax CE with logits                  >2      score               soft
sparse softmax CE with logits           >2      score               hard

最后,人們只能使用“分類交叉熵”,因為這是數學定義的方式,但是由於硬目標或二元分類之類的東西非常流行 - 現代 ML 庫確實提供了這些額外的輔助函數來使事情變得更簡單。 特別是“堆疊” sigmoid 和交叉熵可能在數值上不穩定,但如果知道這兩個操作一起應用 - 它們組合的數值穩定版本(在 TF 中實現)。

重要的是要注意,如果應用錯誤的輔助函數,代碼通常仍會執行,但結果將是錯誤的。 例如,如果您將 softmax_* 助手應用於具有一個輸出的二進制分類,則您的網絡將被視為始終在輸出處產生“真”。

最后一點 - 這個答案考慮了分類,當您考慮多標簽情況時(當一個點可以有多個標簽時)略有不同,因為 Ps 的總和不為 1,盡管有多個輸出單元,但仍應使用 sigmoid_cross_entropy_with_logits .

登錄

為此,“logits”可以被視為模型的非激活輸出。

  • 雖然Keras損失總是采用“激活”輸出(您必須在損失之前應用“sigmoid”或“softmax”)
  • Tensorflow使用“logits”或“non-activated” (你不應該在損失之前應用“sigmoid”或“softmax”)

“帶有 logits”的損失將在內部應用激活。 某些函數允許您選擇logits=Truelogits=False ,這將告訴函數是“應用”還是“不應用”激活。


  • 稀疏函數使用目標數據(ground truth)作為“整數標簽”:0, 1, 2, 3, 4.....
  • 非稀疏函數使用目標數據作為“one-hot label”:[1,0,0], [0,1,0], [0,0,1]

二元交叉熵 = Sigmoid 交叉熵

  • 問題類型:
    • 單類(假/真); 或者
    • 非排他性多類(許多類可能是正確的)
  • 模型輸出形狀: (batch, ..., >=1)
  • 激活: "sigmoid"

分類交叉熵 = Softmax 交叉熵

  • 問題類型:獨占類(可能只有一個類是正確的)
  • 模型輸出形狀: (batch, ..., >=2)
  • 激活: "softmax"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM