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

Числу раз сэмплер не удалось сгенерировать допустимое предложение из-за итераций чехарды, генерирующих NaNs или Infs. 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 isempty.

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

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

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

NumSteps

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

StepSizeProfile

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

AcceptanceRatio

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

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

Типы данных: 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Неродной размер, и 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 object. The axes object contains an object of type line.

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