【问题标题】:Is cross entropy always larger than entropy?交叉熵总是大于熵吗?
【发布时间】:2019-03-23 07:51:29
【问题描述】:

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

我对 Wikipedia 中关于交叉熵总是大于熵的说法感到非常困惑。我想出了一个非常简单的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))

出了什么问题?


【问题讨论】:

  • 请为您使用的语言添加标签。

标签: python entropy information-theory


【解决方案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

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

【讨论】:

    【解决方案2】:

    (无法评论,所以我会添加这个作为答案)

    你好,

    是的交叉熵总是大于熵

    查看这篇博文以了解更多信息: 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)))
    

    希望对您有所帮助! :)

    【讨论】:

    • 我相信说交叉熵总是大于熵通常是错误的,请参阅我的回答。
    • 嗨@Tom,有趣的一点。我相信可以做出计算“正确”熵的假设,因此该陈述可以保持不变。如果您想查看我的论点,请查看我引用的来源! :)
    • 好吧,我相信这里的问题实际上是计算了“错误”的交叉熵。
    猜你喜欢
    • 2017-03-04
    • 2019-07-13
    • 2020-01-03
    • 2020-11-15
    • 2017-06-18
    • 2021-08-25
    • 2021-07-17
    • 1970-01-01
    • 2018-09-03
    相关资源
    最近更新 更多