![](/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.