交叉熵丛林

时间:2017-06-21 11:29:14

标签: machine-learning

有人可以解释所有这些交叉熵损失之间的差异吗? keras正在谈论

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

而张量流已经

  • 具有Logits的Softmax交叉熵
  • 使用Logits稀疏Softmax交叉熵
  • 带有Logits的Sigmoid Cross Entropy

(也提出了一个问题:是否有没有登录的交叉熵类型?

它们之间有什么区别和关系?它们的典型应用是什么?数学背景是什么?是否应该知道其他交叉熵类型?

2 个答案:

答案 0 :(得分:19)

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

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

您列出的所有功能都只是辅助功能,它接受表示PQ的不同方式。

基本上有三件事需要考虑:

  • 有两种可能的结果(二元分类)或更多。如果只有两个结果,那么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_ * helper用于一个输出的二进制分类,则网络将被视为在输出处始终生成“True”。

作为最后一点 - 这个答案会考虑分类,当你考虑多标签的情况(当一个点可以有多个标签时)时会略有不同,因为那时Ps不总和为1,尽管有多个输出单位,但应该使用sigmoid_cross_entropy_with_logits。

答案 1 :(得分:5)

登录

为此,“登录”可以看作是模型的未激活输出。

  • 虽然 Keras 的损失总是会产生“已激活” 的输出(在损失之前必须应用“ Sigmoid”或“ softmax”)
  • Tensorflow 用“登录”或“未激活” 来接收它们(在损失之前,您不应应用“ Sigmoid”或“ softmax”)

丢失“带有登录”将在内部应用激活。 某些功能允许您选择logits=Truelogits=False,这将告诉该功能是“应用”还是“不应用”激活。


稀疏

  • 稀疏函数将目标数据(基本事实)用作“整数标签”:0、1、2、3、4 ....
  • 非稀疏函数将目标数据用作“一个热门标签”:[1,0,0],[0,1,0],[0,0,1] < / li>

二进制交叉熵= S型交叉熵

  • 问题类型:
    • 单个类(false / true);或
    • 非排他多类(许多类可能是正确的)
  • 模型输出形状:(batch, ..., >=1)
  • 激活:"sigmoid"

分类交叉熵= Softmax交叉熵

  • 问题类型:专有类(只有一个类可能是正确的)
  • 模型输出形状:(batch, ..., >=2)
  • 激活:"softmax"