我试图理解交叉熵是如何用于分类任务中的损失定义的。
我对维基百科中关于交叉熵总是大于熵的说法感到困惑。我提出了一个非常简单的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
在动机部分,连接交叉熵、熵和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
直接回答你的问题:交叉熵总是大于熵吗?
如果你比较右交叉熵和右熵,答案是肯定的。