我试图了解如何在分类任务中将交叉熵用于损失定义。
我对维基百科中的交叉熵总是大于熵感到不解。我想出了一个非常简单的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))
出了什么问题?
答案 0 :(得分:1)
请尝试使用这种交叉熵:
print(cross_entropy(q, p))
交叉熵的参数不对称。
您可以在此处找到公式:
https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence
在动机部分中,将交叉熵,熵和KL散度(总是非负的)联系起来。
基本上,您应该对H(P,Q)和H(Q)进行比较:
这样做,您确实会看到:
直接回答您的问题:交叉熵是否总是大于熵?
如果您将正确的交叉熵与正确的熵进行比较,答案是肯定的。
答案 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)))
希望有帮助! :)