Create your own
Lesson illustration

Совместная и условная энтропия по совместному распределению

Здравствуйте! В прошлом уроке мы перешли от surprisal отдельного исхода к энтропии : средней неопределённости одной дискретной случайной величины. Теперь объектом станет пара переменных. Это позволяет строго отделить две разные идеи:

  • сколько неопределённости содержится в совместном исходе ;
  • сколько неопределённости о остаётся после того, как уже известно.

К концу урока вы сможете брать заданную таблицу , находить маргинальные и условные распределения, а затем вычислять , и несколькими согласованными способами.


Совместное распределение: таблица как распределение одной составной величины

Пусть принимает значения , а — значения . Совместное распределение задаёт вероятность каждой пары:

Его удобно представлять таблицей: строки соответствуют значениям , столбцы — значениям . Каждая ячейка — вероятность одного атомарного совместного исхода. Все ячейки должны быть неотрицательны, а их сумма должна быть равна единице:

Например, пусть обозначает температуру, а — влажность. Совместное распределение может быть таким:

Последний столбец и последняя строка получаются маргинализацией:

То есть, чтобы забыть одну из переменных, мы складываем вероятности по её возможным значениям.

Например,

Совместная энтропия

Пару следует рассматривать как одну дискретную случайную величину, чьи исходы — пары значений. Поэтому формула не требует нового принципа:

Здесь единица измерения — биты. Для таблицы температуры и влажности:

Это средний surprisal совместного наблюдения. Если вы одновременно узнали температуру и влажность, именно характеризует неопределённость такого парного исхода до наблюдения.

Полезные проверки результата:

Добавление переменной не может уменьшить неопределённость полного совместного объекта: из пары можно восстановить и , и .

При независимости

и тогда

В нашем примере переменные не независимы. Например,

но

Поэтому совместная энтропия меньше суммы маргинальных:


Information Theory, Lecture 1: Defining Entropy and Information - Oxford Mathematics 3rd Yr Lecture

Посмотрите фрагменты лекции «Information Theory, Lecture 1» от Oxford Mathematics. Лектор формально рассматривает пару переменных как единую случайную величину, затем выводит условную энтропию как среднее количество неопределённости, остающееся после наблюдения условия.

Вначале посмотрите совместную энтропию. Обратите внимание на ключевое переосмысление: вектор (X_1,X_2) имеет обычное дискретное распределение на множестве пар. Затем посмотрите условную энтропию. Проследите два представления величины H(Y\mid X): через двойную сумму по совместному распределению и как среднее энтропий условных распределений.


Условные распределения: что остаётся неизвестным после наблюдения

Совместная таблица отвечает на вопрос о неопределённости пары. Однако во многих ML-задачах требуется другой вопрос: насколько неопределённа метка, если признаки уже наблюдались? Или: насколько неопределённо следующее действие политики, если известно состояние?

Для этого нужна условная вероятность. При :

Фиксировав конкретное , мы получаем полноценное распределение по . Его энтропия:

Это ещё не , а энтропия при конкретном условии. Общая условная энтропия усредняет эти величины с весами вероятности условия:

Эквивалентная запись сразу через совместное распределение:

Это ожидаемый surprisal после того, как стало известно.

Схема показывает, что разные наблюдаемые значения \(Y\) могут по-разному уменьшать неопределённость \(X\): слева при фиксированном значении \(Y\) остаются три возможных значения \(X\), а справа знание другого значения \(Y\) оставляет два равновероятных варианта. Общая \(H(X\mid Y)\) является вероятностно взвешенным средним таких энтропий для всех значений \(Y\).

На схеме особенно важно не спутать два объекта:

и

Первый относится к одному конкретному срезу распределения. Второй усредняет все срезы, причём частые значения должны влиять сильнее редких.

22.11. Information Theory

Прочитайте два коротких подраздела из Dive into Deep Learning. Они связывают определения совместной и условной энтропии с интуицией ML: сколько информации содержится в паре переменных и сколько неопределённости в целевой переменной остаётся после наблюдения входа.

В подразделе 22.11.3.1, «Joint Entropy», прочитайте объяснение от фразы двух предельных случаев и соотнесите их с проверками H(X,Y)=H(X)+H(Y) при независимости и H(X,Y)=H(X)=H(Y), когда X=Y. Затем в подразделе 22.11.3.2, «Conditional Entropy», начните с мотивации от перехода к условной неопределённости. Дочитайте подраздел до равенства H(Y\mid X)=H(X,Y)-H(X), обращая внимание, что условная энтропия — это одно число, полученное усреднением по всем наблюдаемым X.


Полный расчёт из совместной таблицы

Вернёмся к температуре и влажности . Уже найдены маргинальные распределения:

Их энтропии:

Энтропия температуры при известной влажности

Начнём с . Для берём первый столбец и нормируем его на :

Поэтому

А при высокой влажности:

Теперь взвешиваем по вероятности каждого уровня влажности:

Знание влажности уменьшает среднюю неопределённость температуры:

Но это уменьшение происходит в среднем. Обратите внимание:

Конкретное наблюдение в этом примере делает температуру слегка более неопределённой, чем безусловно. Это не противоречит общему неравенству : редкие и частые условия усредняются с разными весами.

Энтропия влажности при известной температуре

Теперь меняем направление условия. Для холодной температуры:

Аналогично:

Взвешенное среднее:

Итак,

Условная энтропия обычно несимметрична: знать влажность и предсказывать температуру — не то же самое, что знать температуру и предсказывать влажность.


Самая полезная формула-проверка

Условные вероятности удовлетворяют факторизации:

Подставим её в совместную энтропию:

Первое слагаемое равно , второе — . Поэтому:

Аналогично:

Для примера:

Эти равенства полезнее, чем просто вычислительная экономия. Они позволяют обнаружить ошибки в нормировке, перепутанную ось таблицы или неверное направление условия.

Краткая памятка для таблицы, в которой строки — , а столбцы — :

Требуется найтиОперация
Сложить строку
Сложить столбец
Разделить столбец на его сумму
Разделить строку на её сумму
Посчитать энтропию всех ячеек
Энтропия каждого нормированного столбца, затем среднее с весами
Энтропия каждой нормированной строки, затем среднее с весами

Если маргинальная вероятность условия равна нулю, например , то не определено обычным делением. На практике это не создаёт вклада в , поскольку такой случай имеет нулевой вес . В коде важно обработать его без деления на ноль и без nan.


PyTorch: расчёт и автоматические проверки тождеств

Ниже функция для одной двумерной таблицы, где строки соответствуют , а столбцы — . Она возвращает совместную энтропию, маргинальные энтропии и обе условные энтропии.

import math
import torch


def entropy(probs: torch.Tensor, dim=None, base: float = 2.0) -> torch.Tensor:
    """Entropy of a normalized discrete distribution."""
    probs = torch.as_tensor(probs, dtype=torch.float64)

    if (probs < 0).any() or not torch.isfinite(probs).all():
        raise ValueError("Probabilities must be finite and non-negative.")

    tiny = torch.finfo(probs.dtype).tiny
    log_probs = probs.clamp_min(tiny).log()

    terms = torch.where(
        probs > 0,
        probs * log_probs,
        torch.zeros_like(probs),
    )

    return -terms.sum(dim=dim) / math.log(base)


def joint_entropy_summary(
    p_xy: torch.Tensor,
    base: float = 2.0,
) -> dict[str, torch.Tensor]:
    """
    Rows are X values; columns are Y values.
    p_xy[i, j] = P(X=x_i, Y=y_j).
    """
    p_xy = torch.as_tensor(p_xy, dtype=torch.float64)

    if p_xy.ndim != 2:
        raise ValueError("Expected a 2D joint-probability table.")
    if not torch.allclose(
        p_xy.sum(),
        torch.tensor(1.0, dtype=p_xy.dtype),
        atol=1e-12,
        rtol=1e-12,
    ):
        raise ValueError("Joint probabilities must sum to 1.")

    p_x = p_xy.sum(dim=1)
    p_y = p_xy.sum(dim=0)

    h_xy = entropy(p_xy, base=base)
    h_x = entropy(p_x, base=base)
    h_y = entropy(p_y, base=base)

    # Conditional entropies from the two-variable chain rule.
    h_x_given_y = h_xy - h_y
    h_y_given_x = h_xy - h_x

    return {
        "p_x": p_x,
        "p_y": p_y,
        "H(X)": h_x,
        "H(Y)": h_y,
        "H(X,Y)": h_xy,
        "H(X|Y)": h_x_given_y,
        "H(Y|X)": h_y_given_x,
    }

Применим её к таблице температуры и влажности:

p_tm = torch.tensor([
    [0.1, 0.2],  # cold
    [0.4, 0.1],  # mild
    [0.1, 0.1],  # hot
])

summary = joint_entropy_summary(p_tm)

for name, value in summary.items():
    print(f"{name}: {value}")

Ожидаемые ключевые значения:

p_x: tensor([0.3000, 0.5000, 0.2000], dtype=torch.float64)
p_y: tensor([0.6000, 0.4000], dtype=torch.float64)
H(X): 1.4855
H(Y): 0.9710
H(X,Y): 2.3219
H(X|Y): 1.3510
H(Y|X): 0.8365

В production-коде или экспериментальном ноутбуке полезно не только получить метрики, но и проверять структуру распределения:

result = joint_entropy_summary(p_tm)

assert torch.allclose(
    result["H(X,Y)"],
    result["H(Y)"] + result["H(X|Y)"],
)

assert torch.allclose(
    result["H(X,Y)"],
    result["H(X)"] + result["H(Y|X)"],
)

assert result["H(X|Y)"] <= result["H(X)"] + 1e-12
assert result["H(Y|X)"] <= result["H(Y)"] + 1e-12

Две крайние конструкции полезны как unit tests.

Независимые переменные. Если , знание не меняет распределение , поэтому:

p_x = torch.tensor([0.7, 0.3])
p_y = torch.tensor([0.25, 0.75])

p_independent = torch.outer(p_x, p_y)
independent = joint_entropy_summary(p_independent)

print(independent["H(X)"])
print(independent["H(X|Y)"])

Детерминированная зависимость. Если для честного бинарного , то после наблюдения неопределённости о не остаётся:

p_equal = torch.tensor([
    [0.5, 0.0],
    [0.0, 0.5],
])

equal = joint_entropy_summary(p_equal)

print(equal["H(X,Y)"])  # 1 bit
print(equal["H(X|Y)"])  # 0 bits
print(equal["H(Y|X)"])  # 0 bits

Итог

Из совместного распределения можно систематически получить все нужные энтропийные величины:

Главные ориентиры:

  • совместная энтропия — неопределённость пары как одного объекта;
  • условная энтропия — средняя неопределённость одной переменной после наблюдения другой;
  • и в общем случае различаются;
  • энтропия при конкретном условии может быть больше безусловной , хотя усреднённая величина не превосходит ;
  • тождества

и

служат одновременно определением, способом расчёта и сильной проверкой реализации.

В следующем уроке мы расширим это двухпеременное разложение на последовательности случайных величин и применим цепное правило энтропии — основу для анализа авторегрессивных моделей и источников данных.

Can't find a good explanation? Sign up and we'll make it for you

Sign up