Алгоритм Метрополиса — Гастингса

Материал из testwiki
Перейти к навигации Перейти к поиску

Алгоритм Метрополиса — Гастингса — алгоритм семплирования, использующийся, в основном, для сложных функций распределения. Он отчасти похож на алгоритм выборки с отклонением, однако здесь вспомогательная функция распределения меняется со временем. Алгоритм был впервые опубликован Николасом Метрополисом в 1953 году, и затем обобщён Шаблон:Nobr в 1970 году. Семплирование по Гиббсу является частным случаем алгоритма Метрополиса — Гастингса и более популярно за счёт простоты и скорости, хотя и реже применимо.

Алгоритм Метрополиса — Гастингса позволяет семплировать любую функцию распределения. Он основан на создании цепи Маркова, то есть на каждом шаге алгоритма новое выбранное значение xt+1 зависит только от предыдущего xt. Алгоритм использует вспомогательную функцию распределения Q(x|xt), зависящую от xt, для которой генерировать выборку просто (например, нормальное распределение). На каждом шаге для этой функции генерируется случайное значение x. Затем с вероятностью

u=P(x)Q(xt|x)P(xt)Q(x|xt)

(или с вероятностью 1, если u>1), выбранное значение принимается как новое: xt+1=x, а иначе оставляется старое: xt+1=xt.

Например, если взять нормальную функцию распределения как вспомогательную функцию, то

Q(x|xt)N(xt,σ2I).

Такая функция выдаёт новое значение в зависимости от значения на предыдущем шаге. Изначально алгоритм Метрополиса требовал, чтобы вспомогательная функция была симметрична: Q(x,xt)=Q(xt,x), однако обобщение Гастингса снимает это ограничение.

Алгоритм

Пусть мы уже выбрали случайное значение xt. Для выбора следующего значения сначала получим случайное значение x для функции Q(x|xt). Затем найдем произведение a=a1a2, где

a1=P(x)P(xt)

является отношением вероятностей между промежуточным значением и предыдущим, а

a2=Q(xt|x)Q(x|xt)

это отношение между вероятностями пойти из x в xt или обратно. Если Q симметрична, то второй множитель равен 1. Случайное значение на новом шаге выбирается по правилу:

If a1:xt+1=x,
and if a<1:xt+1={x with probability axt with probability 1a.

Алгоритм стартует из случайного значения x0, и сначала прогоняется «вхолостую» некоторое количество шагов, чтобы «забыть» о начальном значении.

Лучше всего алгоритм работает тогда, когда форма вспомогательной функции близка к форме целевой функции P. Однако добиться этого априори зачастую невозможно. Для решения этой проблемы вспомогательную функцию настраивают в ходе подготовительной стадии работы алгоритма. Например, для нормального распределения настраивают его параметр σ2 так, чтобы доля «принятых» случайных значений (то есть тех, для которых xt+1=x) была близка к 60 %. Если σ2 слишком мала, то значения будут получаться слишком близкими и доля принятых будет высока. Если σ2 слишком велика, то с большой вероятностью новые значения будут выскакивать в зоны малой вероятности P, отчего доля принятых значений окажется низкой.

Шаблон:Rq