![](/img/trans.png)
[英]How do I apply the binary cross-entropy element-wise and then sum all these losses in Keras?
[英]What are the differences between all these cross-entropy losses in Keras and TensorFlow?
所有這些交叉熵損失之間有什么區別?
Keras 正在談論
雖然 TensorFlow 有
它們之間有什么區別和關系? 它們的典型應用是什么? 數學背景是什么? 還有其他應該知道的交叉熵類型嗎? 有沒有沒有 logits 的交叉熵類型?
只有一個交叉(香農)熵定義為:
H(P||Q) = - SUM_i P(X=i) log Q(X=i)
在機器學習使用中, P
是實際(ground truth)分布, Q
是預測分布。 您列出的所有函數都只是輔助函數,它們接受不同的方式來表示P
和Q
。
基本上有3個主要的考慮事項:
有兩種可能的結果(二元分類)或更多。 如果只有兩個結果,那么Q(X=1) = 1 - Q(X=0)
所以 (0,1) 中的單個浮點數標識了整個分布,這就是二元分類中的神經網絡具有單個輸出的原因(邏輯回歸也是如此)。 如果有 K>2 個可能的結果,則必須定義 K 個輸出(每個Q(X=...)
)
一個要么產生適當的概率(意味着Q(X=i)>=0
和SUM_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”可以被視為模型的非激活輸出。
“帶有 logits”的損失將在內部應用激活。 某些函數允許您選擇logits=True
或logits=False
,這將告訴函數是“應用”還是“不應用”激活。
(batch, ..., >=1)
"sigmoid"
(batch, ..., >=2)
"softmax"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.