exponenta event banner

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

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

  • Со значением, равным 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-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.

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

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