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

Keras和TensorFlow中所有这些交叉熵损失之间的区别是什么?,tensorflow,machine-learning,keras,loss-function,cross-entropy,Tensorflow,Machine Learning,Keras,Loss Function,Cross Entropy,所有这些交叉熵损失之间的区别是什么 凯拉斯说的是 二进制交叉熵 分类交叉熵 稀疏分类交叉熵 而TensorFlow Softmax与logits的交叉熵 稀疏softmax与logits的交叉熵 带logits的Sigmoid交叉熵 它们之间的区别和关系是什么?它们的典型应用是什么?数学背景是什么?还有其他的交叉熵类型吗?有没有不带logits的交叉熵类型?只有一个交叉(香农)熵定义为: H(P||Q) = - SUM_i P(X=i) log Q(X=i) 在机器学习使用中,p是实际

所有这些交叉熵损失之间的区别是什么

凯拉斯说的是

  • 二进制交叉熵
  • 分类交叉熵
  • 稀疏分类交叉熵
而TensorFlow

  • Softmax与logits的交叉熵
  • 稀疏softmax与logits的交叉熵
  • 带logits的Sigmoid交叉熵
它们之间的区别和关系是什么?它们的典型应用是什么?数学背景是什么?还有其他的交叉熵类型吗?有没有不带logits的交叉熵类型?

只有一个交叉(香农)熵定义为:

H(P||Q) = - SUM_i P(X=i) log Q(X=i)
在机器学习使用中,
p
是实际(基本真理)分布,
Q
是预测分布。您列出的所有函数都是辅助函数
,它接受不同的方式来表示
P
Q

基本上有三点需要考虑:

  • 有两种或更多可能的结果(二元分类)。如果只有两个结果,那么
    Q(X=1)=1-Q(X=0)
    因此(0,1)中的一个浮点数可以识别整个分布,这就是为什么二元分类中的神经网络只有一个输出(逻辑回归也是如此)。如果有K>2个可能的结果,则必须定义K个输出(每个
    Q(X=…)

  • 要么产生适当的概率(意味着
    Q(X=i)>=0
    SUM_i Q(X=i)=1
    ,要么只产生一个“分数”,并有一些固定的方法将分数转换为概率。例如,一个实数可以“转换为概率”通过使用S形,一组实数可以通过使用其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和cross-entropy在数值上可能是不稳定的,但如果你知道这两个操作是同时应用的,那么它们的组合在数值上是稳定的(在TF中实现)

需要注意的是,如果应用了错误的helper函数,代码通常仍会执行,但结果将是错误的。例如,如果将softmax_*helper应用于具有一个输出的二进制分类,则您的网络将被视为始终在输出处生成“True”

作为最后一个注释——这个回答考虑了<强>分类< /强>,在考虑<强>多标签>情况下(当单个点可以有多个标签时)略有不同。,因为Ps的和不等于1,尽管有多个输出单位,但应使用sigmoid交叉熵和logits。

只有一个交叉(香农)熵定义为:

H(P||Q) = - SUM_i P(X=i) log Q(X=i)
在机器学习使用中,
p
是实际(基本真理)分布,
Q
是预测分布。您列出的所有函数都是辅助函数,它们接受不同的方式来表示
p
Q

基本上有三点需要考虑:

  • 有两种或两种以上的可能结果(二元分类)。如果只有两种结果,那么
    Q(X=1)=1-Q(X=0)
    因此(0,1)中的一个浮点数可以识别整个分布,这就是二元分类中的神经网络具有单一输出(逻辑回归也是如此)的原因如果有K>2个可能的结果,则必须定义K个输出(每个
    Q(X=…)

  • 要么产生适当的概率(意味着
    Q(X=i)>=0
    SUM_i Q(X=i)=1
    ,要么只产生一个“分数”,并有一些固定的方法将分数转换为概率。例如,一个实数可以“转换为概率”通过使用S形,一组实数可以通过使用其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和cross-entropy在数值上可能是不稳定的,但如果你知道这两个操作是同时应用的,那么它们的组合在数值上是稳定的(在TF中实现)

需要注意的是,如果应用了错误的helper函数,代码通常仍会执行,但结果将是错误的。例如,如果将softmax_*helper应用于具有一个输出的二进制分类,则您的网络将被视为始终在输出处生成“True”

最后一点,这个答案考虑了分类,它是sl