Python 交叉熵总是大于熵吗?

Python 交叉熵总是大于熵吗?,python,entropy,information-theory,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.mult

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

我对维基百科中的交叉熵总是大于熵的说法感到困惑。我提出了一个非常简单的分布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))
出了什么问题


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

交叉熵总是大于熵

请查看此博客以了解更多信息:

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

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

np.sum(-1*np.multiply(p, np.log(q)))
计算交叉熵的公式应为q的倒数:

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

希望有帮助!:)

试试这个交叉熵:
打印(交叉熵(q,p))

交叉熵的参数是不对称的。 你可以在这里找到一个公式:
动机部分,将交叉熵、熵和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
直接回答您的问题:交叉熵是否总是大于熵?

如果你将正确的交叉熵与正确的熵进行比较,答案是肯定的。

请为你正在使用的语言添加标签。我认为说交叉熵总是大于熵通常是错误的,请参阅我的答案。嗨@Tom,有趣的一点。我相信“正确”的熵是可以计算出来的,因此这个陈述可以保持原样。如果你想看看我的论证路线,请看一下我引用的源代码!:)我相信这里的问题实际上是计算了“错误的”交叉熵。