交叉熵是否总是大于熵?

时间:2018-10-18 13:24:34

标签: python entropy information-theory

我试图了解如何在分类任务中将交叉熵用于损失定义。

我对维基百科中的交叉熵总是大于熵感到不解。我想出了一个非常简单的p(实分布)和q(假定分布)分布,并计算了交叉熵和熵。并发现这种情况下的交叉熵小于熵。

import numpy as np 
p = [0.5, 0.2, 0.2, 0.1]
q_1 = [0.4, 0.2, 0.2, 0.2]
q = [0.4, 0.2, 0.2, 0.2]
def cross_entropy(p, q):
  return np.sum(-1*np.multiply(p, np.log(q)))
# Get cross entropy
print(cross_entropy(p, q))
# Get entropy 
print(cross_entropy(q_1, q))

出了什么问题?


2 个答案:

答案 0 :(得分:1)

请尝试使用这种交叉熵: print(cross_entropy(q, p))

交叉熵的参数不对称。 您可以在此处找到公式: https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence
动机部分中,将交叉熵,熵和KL散度(总是非负的)联系起来。

基本上,您应该对H(P,Q)和H(Q)进行比较:

  • H(Q,P)和H(Q)
  • H(P,Q)和H(P)

这样做,您确实会看到:

  • H(Q,P)-H(Q)> = 0
  • H(P,Q)-H(P)> = 0

直接回答您的问题:交叉熵是否总是大于熵?
如果您将正确的交叉熵与正确的熵进行比较,答案是肯定的。

答案 1 :(得分:0)

(无法发表评论,因此我将其添加为答案)

嗨,

是的交叉熵总是大于熵

查看此博客,以了解更多信息: https://rdipietro.github.io/friendly-intro-to-cross-entropy-loss/#cross-entropy

回答另一个问题:“出了什么问题?”

您的公式中有一个小错误:

np.sum(-1*np.multiply(p, np.log(q)))

计算交叉熵的公式应为q的倒数:

np.sum(-1*np.multiply(p, np.log(1/q)))

希望有帮助! :)