После двух предыдущих статей мы, наконец, подошли к сэмплингу Гиббса, почему я так взволнован? Потому что изначально я рассматривал байесовский вывод из-за модели LDA, в которой для решения проблемы параметров использовалась выборка Гиббса.
Поскольку Toutiao не очень хорошо поддерживает Markdown, вы можете перейти по исходной ссылке для просмотра: https://www.zybuluo.com/zhuanxu/note/1027270.
Что ж, давайте начнем знакомить с выборкой Гиббса.
Выборка Гиббса
В предыдущей статье я представил подробное стационарное состояние, а именно:
Алгоритм выборки Гиббса следующий:
Покажем, что алгоритм выборки Гиббса также удовлетворяет подробному условию стационарности.
Предполагая, что x = x1,...,xD, когда мы выбираем k-е данные,
На данный момент наша скорость принятия составляет:
Ключевой частью приведенной выше формулы является:
Приведение может получить 1, то есть выборка Гиббса является некой приемлемой выборкой.
Возьмем пример, как обычно.
пример
Предположим, у нас есть данные x1,x2...xN, где числа 1-n следуют одному распределению Пуассона, а числа n+1-N следуют другому распределению Пуассона.
Хотя параметры распределения Пуассона подчиняются гамма-распределению, мы резюмируем текущие предыдущие предположения:
Тогда апостериорная вероятность равна:
Давайте начнем нашу выборку дальше, сначала рассчитаем logP:
Затем, чтобы попробовать
Мы берем здесь только элементы, относящиеся к текущим параметрам выборки, потому что остальные являются некоторыми константами, которые только нормализуют распределение вероятностей и не влияют на выборку.
Здесь все они подчиняются гамма-распределению.
И, наконец, н:
Информация о распределении для n не показана, но мы просто считаем, что это полиномиальное распределение.
Вот ключевой код Python:
Полный код см. в Gibbs.
Результат после выборки следующий:
LDA
Теперь давайте возьмем самую захватывающую модель LDA и посмотрим, как использовать выборку Гиббса для ее решения.
Первый взгляд на модель LDA:
Весь процесс можно описать как
-
Для документа d образец из раздачи, т.е. тема раздачи документа d
-
Тема k выбирается из полиномиального распределения для каждого слова документа, т.е.
-
Для темы k выборка из нее, то есть словораспределение темы k
-
Для каждого слова выберите конкретное слово t из тематического распределения.
Во всей приведенной выше модели параметры модели следующие:
Чтобы сделать выборку Гиббса, мы сначала рассмотрим совместное распределение этих параметров.
Приведенная выше формула представляет собой полиномиальное распределение, но распределение Дира Мы знаем, что распределение Дир и мультиномиальное распределение являются сопряженными распределениями, поэтому апостериорное распределение легче написать.
Далее мы начинаем вычислять вероятность каждого параметра, в основном для вычисления следующих трех вероятностей:
Давайте сначала посчитаем распределение вероятностей первой темы:
в
Представляет количество слов, принадлежащих каждой теме в m-м документе.
Затем рассчитайте распределение слов по каждой теме.
в
Количество каждого слова в m-м документе, относящемся к k темам, всего (1-V) слов. Наконец, оцените тему каждого слова.
Мы можем видеть, что p(zmj=k) является полиномиальным распределением, вероятность каждого элемента равна бета*тета, и сами они должны быть выбраны из распределения Dir, естественная идея состоит в том, что мы можем использовать оценочное значение. Вместо этого мы можем легко вычислить вероятность из распределения Dir.
Необходимую математическую основу можно увидеть в тематической модели в заголовке: Математическая основа LDA.
Точка внутри — это распределение Dir и его математическое ожидание.
В приведенной выше выборке Гиббса мы рассчитали, что ожидание распределения Dir можно использовать в качестве нового значения параметра для каждой выборки.
кодирование
После введения математической основы мы можем увидеть, как это реализовать.Ниже приведен псевдокод.
Полный код можно увидеть в Play Point Advanced -- Тематическая модель LDA (небольшое улучшение + исходный код прилагается)
реализация pymc3
Далее давайте воспользуемся pymc3 для его реализации.
Можно сказать, что код, написанный pymc3, действительно лаконичен. но. Это слишком медленно, полный код можно увидеть в gibbs-lda.
Суммировать
В этой статье вводится выборка Гиббса, частный случай алгоритма mh, и дается доказательство того, почему работает выборка Гиббса Наконец, мы используем выборку Гиббса для решения задачи оценки параметров LDA.
Ваша поддержка является движущей силой для меня, чтобы продолжать писать, и я с нетерпением жду нашего общего прогресса.