tuneSampler

Класс: HamiltonianSampler

Настройте сэмплер Гамильтонова Монте-Карло (HMC)

Синтаксис

tunedSmp = tuneSampler(smp)
[tunedSmp,tuningInfo] = tuneSampler(smp)
[tunedSmp,tuningInfo] = tuneSampler(___,Name,Value)

Описание

tunedSmp = tuneSampler(smp) возвращает настроенный сэмплер Гамильтонова Монте-Карло (HMC).

Во-первых, tuneSampler настраивает массовый вектор сэмплера HMC smp. Затем это настраивает размер шага и количество шагов интегрирований чехарды, чтобы достигнуть определенного целевого приемного отношения.

Можно использовать настроенный сэмплер, чтобы создать Цепи Маркова с помощью метода drawSamples.

[tunedSmp,tuningInfo] = tuneSampler(smp) возвращает дополнительную информацию о настройке в tuningInfo.

[tunedSmp,tuningInfo] = tuneSampler(___,Name,Value) задает дополнительные опции с помощью одного или нескольких аргументов пары "имя-значение". Задайте аргументы пары "имя-значение" после всех других входных параметров.

Входные параметры

развернуть все

Гамильтонов сэмплер Монте-Карло, чтобы настроиться, заданный как объект HamiltonianSampler.

Используйте функцию hmcSampler, чтобы создать сэмплер.

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'StepSizeTuningMethod','dual-averaging','MassVectorTuningMethod','hessian' настраивает сэмплер HMC с помощью заданных методов для настройки размера шага и массового вектора сэмплера.

Начальная точка, чтобы начать настраиваться от, заданный как числовой вектор-столбец с тем же числом элементов как свойство StartPoint сэмплера smp.

Пример: 'StartPoint',randn(size(smp.StartPoint))

Метод для настройки размера шага сэмплера, заданного как пара, разделенная запятой, состоящая из 'StepSizeTuningMethod' и 'dual-averaging' или 'none'.

Если 'StepSizeTuningMethod' установлен в 'dual-averaging', то tuneSampler настраивает размер шага чехарды сэмплера HMC, чтобы достигнуть целевого приемного отношения для фиксированного значения продолжительности симуляции. Продолжительность симуляции равняется размеру шага, умноженному на количество шагов. Чтобы задать целевое приемное отношение, установите значение 'TargetAcceptanceRatio'.

Чтобы изменить продолжительность симуляции, установите smp.StepSize = a и smp.NumSteps = b для некоторых значений a и b. Это дает продолжительность симуляции a*b.

Пример: 'StepSizeTuningMethod','none'

Метод для настройки вектора массы сэмплера, заданного как пара, разделенная запятой, состоящая из 'MassVectorTuningMethod' и одно из следующих значений.

ЗначениеОписание
'iterative-sampling'

Настройте MassVector через последовательные приближения путем рисования выборок с помощью последовательности массовых векторных оценок.

'hessian'

Установите MassVector, равный отрицательному диагональному Гессиану logpdf в startpoint.

'none'

Не выполните настройку MassVector.

Пример: 'MassVectorTuningMethod','hessian'

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

Если значением 'StepSizeTuningMethod' является 'none', то tuneSampler не настраивает размер шага.

Пример: 'NumStepSizeTuningIterations',50

Целевое приемное отношение Цепи Маркова, заданной как скаляр от 0 до 1.

tuneSampler настраивает размер шага и количество шагов интегрирования чехарды, чтобы достигнуть заданного целевого приемного отношения для фиксированного значения продолжительности симуляции. Продолжительность симуляции является размером этапа интеграции чехарды, умноженным на количество этапов интеграции.

Если значением 'StepSizeTuningMethod' является 'none', то tuneSampler не настраивает размер шага.

Чтобы изменить продолжительность симуляции, установите smp.StepSize = a и smp.NumSteps = b для некоторых значений a и b. Это дает продолжительность симуляции a*b.

Пример: 'TargetAcceptanceRatio',0.55

Максимальное количество шагов чехарды позволено во время настройки размера шага, заданной как положительное целое число.

Если значением 'StepSizeTuningMethod' является 'none', то tuneSampler не настраивает размер шага.

Пример: 'NumStepsLimit',1000

Уровень многословия окна Command Window во время настройки сэмплера, заданной как неотрицательное целое число.

  • С набором значений к 0 tuneSampler не отображает деталей настройки.

  • С набором значений к 1 tuneSampler отображает детали настройки размера шага.

  • С набором значений к 2 или больше, tuneSampler отображает детали размера шага и массовой векторной настройки.

ЗаголовокОписание
ITER

Номер итерации.

LOG PDF

Регистрируйте плотность вероятности в текущей итерации.

STEP SIZE

Опередите размер этапа интеграции в текущей итерации.

NUM STEPS

Количество этапов интеграции чехарды в текущей итерации.

ACC RATIO

Приемное отношение, то есть, часть предложений, которые приняты.

DIVERGENT

Числу раз сэмплер не удалось сгенерировать допустимое предложение из-за итераций чехарды, генерирующих NaN s или Inf s. tuneSampler ищет хорошее значение размера этапа интеграции. При выполнении так, алгоритм может столкнуться с областями нестабильности и сообщить о ненулевых значениях в столбце DIVERGENT. Это поведение нормально и не является проблемой сам по себе.

Пример: 'VerbosityLevel',1

Многословная выходная частота, заданная как положительное целое число.

Если значение 'VerbosityLevel' является положительным целым числом, tuneSampler выходные параметры, настраивающие детали каждый 'NumPrint' итерации.

Пример: 'NumPrint',50

Выходные аргументы

развернуть все

Настроенный гамильтонов сэмплер Монте-Карло, возвращенный как объект HamiltonianSampler.

Настройка информации, возвращенной как структура с этими полями.

Поле Описание
MassVector

Настроенный массовый вектор

StepSize

Настроенный размер шага чехарды

NumSteps

Настроенное значение количества этапов интеграции чехарды

MassVectorTuningInfo

Структура с дополнительной информацией о массовой векторной настройке

StepSizeTuningInfo

Структура с дополнительной информацией о настройке размера шага

Если вы настраиваете массовый вектор с помощью метода 'iterative-sampling', то MassVectorTuningInfo имеет следующие поля.

Поле Описание
MassVector

Настроенный массовый вектор

IterativeSamplingMassVectorProfile

P-by-K матрица массовых векторов использовал во время итераций K, где P является количеством выборки переменных

IterativeSamplingNumSamples

K-by-1 вектор количества выборок, чертивших для каждой из итераций K

Если вы настраиваете массовый вектор с помощью метода 'hessian', то MassVectorTuningInfo имеет следующие поля.

Поле Описание
MassVector

Настроенный массовый вектор

NegativeDiagonalHessian

Отрицательный диагональный Гессиан logpdf в настраивающейся стартовой точке. Если некоторые элементы отрицательны, это поле может отличаться от поля MassVector.

HessianPoint

Укажите, в котором оценен Гессиан

Если значением MassVectorTuningMethod является 'none', то MassVectorTuningInfo пуст.

Если вы настраиваете размер шага с помощью метода 'dual-averaging', то StepSizeTuningInfo имеет следующие поля.

Поле Описание
StepSize

Настроенный размер шага

NumSteps

Настроенное значение количества шагов

StepSizeProfile

Вектор-столбец, содержащий размеры шага в каждой настраивающей итерации

AcceptanceRatio

Отношение окончательной приемки достигается во время настройки

Если размер шага не настраивается, thenStepSizeTuningInfo пуст.

Типы данных: struct

Примеры

развернуть все

Настройте параметры сэмплера Гамильтонова Монте-Карло (HMC).

Задайте количество параметров к выборке и их средним значениям.

NumParams = 9;
means = [1:NumParams]';
standevs = 1;

Во-первых, сохраните функциональный normalDistGrad на пути MATLAB®, который возвращает многомерную нормальную логарифмическую плотность вероятности, и ее градиент (normalDistGrad задан в конце этого примера). Затем вызовите функцию с аргументами, чтобы задать входной параметр logpdf к функции hmcSampler.

logpdf = @(theta)normalDistGrad(theta,means,standevs);

Выберите отправную точку и создайте сэмплер HMC.

startpoint = randn(NumParams,1);
smp = hmcSampler(logpdf,startpoint);

Важно выбрать хорошие значения для параметров сэмплера, чтобы получить эффективную выборку. Лучший способ найти хорошие значения состоит в том, чтобы автоматически настроить MassVector, StepSize и параметры NumSteps с помощью tuneSampler. Метод:

1. Настраивает MassVector сэмплера.

2. Мелодии StepSize и NumSteps в течение фиксированной продолжительности симуляции, чтобы достигнуть определенного приемного отношения. Целевое приемное отношение по умолчанию 0,65 хорошо в большинстве случаев.

[smp,info] = tuneSampler(smp,'NumStepSizeTuningIterations',50,'VerbosityLevel',1,'NumPrint',10);
o Tuning mass vector using method: iterative-sampling 
Finished mass vector tuning iteration 1 of 5. 
Finished mass vector tuning iteration 2 of 5. 
Finished mass vector tuning iteration 3 of 5. 
Finished mass vector tuning iteration 4 of 5. 
Finished mass vector tuning iteration 5 of 5. 

o Tuning step size using method: dual-averaging. Target acceptance ratio = 0.65

o Initial step size for dual-averaging = 2

|==================================================================================|
|   ITER   |    LOG PDF    |  STEP SIZE  |  NUM STEPS  |  ACC RATIO  |  DIVERGENT  |
|==================================================================================|
|       10 | -1.710457e+01 |   1.193e+00 |           4 |   5.000e-01 |           0 |
|       20 | -9.152514e+00 |   9.527e-01 |           5 |   5.500e-01 |           0 |
|       30 | -1.068923e+01 |   8.856e-01 |           6 |   5.333e-01 |           0 |
|       40 | -1.290816e+01 |   8.506e-01 |           6 |   5.750e-01 |           0 |
|       50 | -1.770386e+01 |   8.581e-01 |           6 |   6.000e-01 |           0 |

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

figure;
plot(info.StepSizeTuningInfo.StepSizeProfile);
xlabel('Iteration');
ylabel('Step Size');

accratio = info.StepSizeTuningInfo.AcceptanceRatio
accratio = 0.6000

Функция normalDistGrad возвращает логарифм многомерной нормальной плотности вероятности со средними значениями в Mu и стандартными отклонениями в Sigma, заданном, когда скаляры или столбцы векторизовали ту же длину как startpoint. Вторым выходным аргументом является соответствующий градиент.

function [lpdf,glpdf] = normalDistGrad(X,Mu,Sigma)
Z = (X - Mu)./Sigma;
lpdf = sum(-log(Sigma) - .5*log(2*pi) - .5*(Z.^2));
glpdf = -Z./Sigma;
end

Советы

Введенный в R2017a