В этом посте мы рассмотрим метод сравнения двух вероятностных распределений, называемый дивергенцией Кульбака-Лейблера (часто называемой просто дивергенцией КЛ). Часто в теории вероятностей и статистике мы заменяем наблюдаемые данные или сложные распределения более простыми приблизительными распределениями. Дивергенция KL помогает нам измерить, сколько информации теряется при выборе аппроксимаций.
Начнем наше исследование с вопроса. Допустим, мы космические ученые, посещающие далекую новую планету, и мы обнаружили кусачего червя, которого хотим изучить. Мы обнаружили, что у этих червей было 10 зубов, но многие из них потеряли свои зубы из-за постоянного жевания. Собрав множество образцов, мы получили эмпирическое распределение вероятности количества зубов на червяка:
Хотя данные хорошие, у нас есть небольшая проблема. Мы далеко от Земли, и отправлять данные домой дорого. Что мы хотим сделать, так это свести эти данные к простой модели только с одним или двумя параметрами. Один из вариантов — представить распределение червячных зубов в виде равномерного распределения. Мы знаем, что существует 11 возможных значений, и мы можем присвоить равномерную вероятность 1/11.
Очевидно, что наши данные распределены неравномерно, но это также не похоже ни на одно известное нам обычное распределение. Другой вариант, который мы можем попробовать, — смоделировать данные с помощью биномиального распределения. В этом случае все, что нам нужно сделать, это оценить параметр вероятности биномиального распределения. Мы знаем, что если у нас есть n испытаний с вероятностью p, то математическое ожидание равно E[x] = np. В этом случае n = 10 ожидаемое значение является средним значением наших данных, которое, по расчетам, равно 5,7, поэтому наша наилучшая оценка p равна 0,57. Это даст нам биномиальное распределение, подобное этому:
Сравнивая две наши модели с исходными данными, мы видим, что ни одна из них полностью не соответствует исходному распределению, но какая из них лучше?
Сегодня доступно множество метрик ошибок, но наша главная забота состоит в том, чтобы свести к минимуму объем отправляемой информации. Обе эти модели сокращают количество параметров, необходимых для нашей задачи. Лучший способ — вычислить распределение, которое сохраняет большую часть информации из нашего исходного источника данных. В этом заключается роль расхождения Кульбака-Лейблера.
Энтропия нашего распределения
Дивергенция KL возникла из теории информации. Основная цель теории информации состоит в том, чтобы количественно определить, сколько информации содержится в данных. Наиболее важным показателем в теории информации называется энтропия, обычно обозначаемая как $H$. Определение энтропии распределения вероятностей:
?H=-sum{i=1}^{N}p(xi)logp(x_i)?
Если мы используем log_2 в наших вычислениях, мы можем интерпретировать энтропию как «минимальное количество битов, которое нам нужно для кодирования информации». В этом случае, согласно нашему эмпирическому распределению, информацией будут наблюдения за числом каждого зуба. Судя по нашим наблюдаемым данным, энтропия нашего распределения вероятностей составляет 3,12 бита. Количество битов говорит нам, сколько битов в среднем нам нужно, чтобы закодировать количество зубов, которые мы будем наблюдать в одном случае.
Энтропия не говорит нам о наилучшей схеме кодирования для достижения такого сжатия. Оптимальное кодирование информации — очень интересная тема, но не необходимая для понимания KL-дивергенции. Ключом к энтропии является то, что мы можем точно определить, сколько информации содержится в данных, если мы знаем теоретическую нижнюю границу количества необходимых битов. Теперь мы можем количественно определить, сколько информации мы теряем, когда заменяем наблюдаемое распределение параметризованным приближением.
Измерение отсутствующей информации с помощью KL Divergence
Дивергенция Кульбака-Лейблера — это всего лишь небольшая модификация нашей формулы энтропии. Не только наше распределение вероятностей p, но и распределение верхнего приближения q. Затем мы смотрим на разницу для каждого значения журнала:
?D{KL}(p||q)=sum{i=1}^{N}p(xi)(logp(xi)-logq(x_i))?
По сути, то, на что мы смотрим с расхождением KL, — это ожидание логарифмической разницы между вероятностью данных в исходном распределении и приближенном распределении. Опять же, если мы рассмотрим log_2, мы можем интерпретировать его как «сколько битов информации мы ожидаем потерять». Формулу можно переписать как угодно:
?D{KL}(p||q)=E[logp(xi)-logq(x_i)]?
Более распространенный способ взглянуть на дивергенцию KL выглядит следующим образом:
?D{KL}(p||q)=sum{i=1}^{N}p(xi)(logfrac{p(xi)}{q(x_i)})?
Потому что $loga-logb=logfrac{a}{b}$
Используя дивергенцию KL, мы можем точно рассчитать, сколько информации теряется, когда мы аппроксимируем одно распределение другим. Вернемся к нашим данным и посмотрим, что получится.
Сравните наши приблизительные распределения
Теперь мы можем перейти к вычислению KL-расхождения двух приближенных распределений. Для равномерного распределения находим:
?D_{kl}(Наблюдается ∣∣ Равномерно)=0,338?
Для нашего биномиального приближения:
?D_{kl}(наблюдаемый ∣∣биномиальный)=0,477?
Как мы видим, информация, потерянная при использовании биномиального распределения, больше, чем информация, потерянная при использовании равномерного распределения. Если нам нужно выбрать один для представления наших наблюдений, лучше всего придерживаться равномерного распределения.
Дивергенция KL - это не расстояние
Может показаться заманчивым думать о KL-дивергенции как о мере расстояния, но мы не можем использовать KL-дивергенцию для измерения расстояния между двумя распределениями. Это связано с тем, что расхождение KL не является симметричным. Например, если бы мы использовали наблюдаемые данные как способ аппроксимации биномиального распределения, мы бы получили совсем другие результаты:
?D_{kl}(биномиальное∣∣наблюдаемое)=0,330?
Оптимизация с KL Divergence
Когда мы выбираем значения для биномиального распределения, мы выбираем параметр вероятности, используя ожидаемое значение, которое соответствует данным. Однако, поскольку мы оптимизируем, чтобы свести к минимуму потерю информации, это может быть не лучший способ выбора параметров. Когда мы изменим значение этого параметра, мы сможем перепроверить нашу работу, увидев, как изменится дивергенция KL. Вот график того, как эти значения изменяются вместе:
Как видите, наша оценка биномиального распределения (отмеченная точками) является наилучшей оценкой, которая минимизирует расхождение KL.
Предположим, мы хотим создать временное распределение для моделирования данных. Мы разделили данные на две части. Вероятность 0-5 зубов и вероятность 6-10 зубов. Затем мы будем использовать один параметр, чтобы указать процент от общего распределения вероятностей, который приходится на правую часть распределения. Например, если мы выберем p=1 для параметра, вероятность 6-10 соответственно равна 0,2, а вероятность всего в группе 0-5 равна 0. :
?[6,11]=frac{p}{5};[0,5]=frac{1-p}{6}?
Примечание. Поскольку $log$ не определено при 0, единственная вероятность, которую мы допускаем равной нулю, — это когда $p(xi)=0$, можно сделать вывод, что $q(xi)=0$
Как мы можем найти лучшие параметры для этой странной модели, которую мы собрали? Все, что нам нужно сделать, это минимизировать разницу KL, как и раньше:
Мы обнаружили, что минимальное значение дивергенции KL, найденное в следующих случаях, составляет 0,338, когда p = 0,47. Значение минимальной дивергенции KL должно показаться вам знакомым: оно почти такое же, как и при равномерном распределении! Когда мы наносим значения нашего распределения с идеальным значением p, мы обнаруживаем, что оно почти равномерно:
Поскольку мы не будем использовать временный дистрибутив для сохранения какой-либо информации, лучше использовать более знакомую и простую модель.
Ключевым моментом здесь является то, что мы можем использовать дивергенцию KL в качестве целевой функции для нахождения оптимального значения любого приближенного распределения, которое мы можем получить. Хотя в этом примере оптимизируется только один параметр, мы легко можем представить себе распространение этого подхода на многомерные модели со многими параметрами.
Вариационные автоэнкодеры и вариационные байесовские методы
Если вы знакомы с нейронными сетями, вы, вероятно, догадались, к чему вы клоните после предыдущего раздела. В самом общем смысле нейронные сети — это аппроксиматоры функций. Это означает, что вы можете использовать нейронные сети для изучения всевозможных сложных функций. Ключом к обучению нейронной сети является использование целевой функции, которая сообщает сети, насколько хорошо она работает. Вы можете обучать нейронную сеть, сводя к минимуму потерю целевой функции.
Как мы видели, мы можем использовать дивергенцию KL, чтобы свести к минимуму потери информации при аппроксимации распределения. Сочетание дивергенции KL с нейронными сетями позволяет нам изучать приблизительные распределения очень сложных данных. Распространенный обходной путь называется «вариационный автоэнкодер», который изучает лучший способ аппроксимации информации в наборе данных. Вот отличное руководство, в котором подробно рассказывается о создании вариационного автоэнкодера: https://arxiv.org/abs/1606.05908.
В более общем смысле это область вариационных байесовских методов. В других статьях мы видели, что моделирование методом Монте-Карло может эффективно решать ряд вероятностных задач. Хотя моделирование методом Монте-Карло может помочь решить многие трудноразрешимые интегралы, необходимые для байесовского вывода, даже эти методы требуют значительных вычислительных ресурсов. Вариационные байесовские методы, в том числе вариационные автоэнкодеры, используют дивергенцию KL для создания наилучшего аппроксимирующего распределения, что позволяет более эффективно делать выводы по очень сложным интегралам. Чтобы узнать больше о вариативном выводе, ознакомьтесь с библиотекой Edward для Python: http://edwardlib.org/.
Сводная станция блога о технологиях искусственного интеллекта Panchuang: http://docs.panchuang.net/PyTorch, официальная учебная станция на китайском языке: http://pytorch.panchuang.net/OpenCV, официальный китайский документ: http://woshicver.com/