在Keras和TensorFlow中所有这些交叉熵损失函数之间有什么区别?

所有这些交叉熵损失函数之间有什么区别?

Keras中提到的有:

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

而TensorFlow中则有:

  • 带logits的Softmax交叉熵
  • 带logits的稀疏Softmax交叉熵
  • 带logits的Sigmoid交叉熵

它们之间有什么区别和联系?它们各自的典型应用是什么?它们的数学背景是什么?还有其他需要了解的交叉熵类型吗?有没有不带logits的交叉熵类型?


回答:

只有一种交叉(香农)熵,定义如下:

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

在机器学习的使用中,P是实际(真实)的分布,Q是预测的分布。你列出的所有函数只是辅助函数,它们接受不同的方式来表示PQ

基本上需要考虑三件主要事情:

  • 可能的结果要么是两个(二元分类),要么是更多。如果只有两个结果,那么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%可能是狗”)。

根据这三个方面,应该使用不同的辅助函数:

                                  结果数     Q中的内容    P中的目标   -------------------------------------------------------------------------------二元交叉熵                            2      概率           任意分类交叉熵                          >2      概率           软目标稀疏分类交叉熵                       >2      概率           硬目标带logits的Sigmoid交叉熵               2      分数           任意带logits的Softmax交叉熵              >2      分数           软目标带logits的稀疏Softmax交叉熵         >2      分数           硬目标

最终,人们可以只使用“分类交叉熵”,因为这是它的数学定义,然而,由于硬目标或二元分类非常流行——现代机器学习库提供了这些额外的辅助函数以简化操作。特别是将sigmoid和交叉熵“堆叠”可能会数值不稳定,但如果知道这两个操作是一起应用的——就会有一个数值稳定的版本(在TensorFlow中实现)。

重要的是要注意,如果你应用了错误的辅助函数,代码通常仍然会执行,但结果会是错误的。例如,如果你对只有一个输出的二元分类应用softmax_*辅助函数,你的网络将被认为总是输出“True”。

最后要注意的是——这个答案考虑的是分类,当你考虑多标签情况时(当一个点可以有多个标签),情况略有不同,因为Ps不总和为1,应该使用sigmoid_cross_entropy_with_logits,尽管有多个输出单元。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注