我正在尝试了解交叉熵如何用于分类任务中的损失定义。
我对维基百科中关于交叉熵总是大于熵的说法感到非常困惑。我想出了一个非常简单的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))
出了什么问题?
最佳答案
试试这个交叉熵:
print(cross_entropy(q, p))
交叉熵在其参数中不是对称的。
你可以在这里找到一个公式:
https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence
在 Motivation 部分,将交叉熵、熵和 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
直接回答您的问题:交叉熵是否总是大于熵?
如果将正确的交叉熵与正确的熵进行比较,答案是肯定的。
关于python - 交叉熵总是大于熵吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52875114/