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 - имя аргумента и 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

Размер шага интегрирования Leapfrog при текущей итерации.

NUM STEPS

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

ACC RATIO

Коэффициент принятия, то есть доля предложений, которые принимаются.

DIVERGENT

Количество случаев, когда семплер не смог сгенерировать допустимое предложение из-за генерации итераций чехарды NaNs или Infс. 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

Конечный коэффициент приемки, достигнутый во время настройки

Если размер шага не настроен, то StepSizeTuningInfo пуст.

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

Примеры

расширить все

Настройте параметры гамильтонового дискретизатора Монте-Карло (HMC).

Определите количество параметров для выборки и их средства.

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

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

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

Выберите начальную точку и создайте HMC sampler.

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');

Figure contains an axes. The axes contains an object of type line.

accratio = info.StepSizeTuningInfo.AcceptanceRatio
accratio = 0.6000

The 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