Кросс-энтропия всегда больше энтропии?
Я пытаюсь понять, как кросс-энтропия используется для определения потерь в задачах классификации.
Я довольно озадачен утверждением в Википедии о том, что перекрестная энтропия всегда больше энтропии. Я придумал очень простое распределение 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)))
Надеюсь, поможет!:)