Кросс-энтропия всегда больше энтропии?

Я пытаюсь понять, как кросс-энтропия используется для определения потерь в задачах классификации.

Я довольно озадачен утверждением в Википедии о том, что перекрестная энтропия всегда больше энтропии. Я придумал очень простое распределение 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))

Что пошло не так?


2 ответа

Попробуйте эту кросс-энтропию вместо: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

Как прямой ответ на ваш вопрос: всегда ли кросс-энтропия больше энтропии?
Ответ - да, если сравнить правильную перекрестную энтропию с правильной энтропией.

(Не могу комментировать, поэтому я добавлю это как ответ)

Привет,

Да, перекрестная энтропия всегда больше энтропии.

Загляните в этот блог, чтобы узнать больше: https://rdipietro.github.io/friendly-intro-to-cross-entropy-loss/

Чтобы ответить на ваш другой вопрос: "Что пошло не так?"

В вашей формуле есть небольшая ошибка:

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

Формула для расчета кросс-энтропии должна быть обратной к q:

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

Надеюсь, поможет!:)

Другие вопросы по тегам