HamiltonianSampler class

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

Описание

Гамильтоновый дискретизатор Монте-Карло (HMC) является основанным на градиенте сэмплером Монте-Карло на цепи Маркова, который можно использовать, чтобы сгенерировать выборки из P(x) плотности вероятностей. Отбор проб HMC требует спецификации log P(x) и его градиента.

Векторное x параметра должно быть без ограничений, что означает, что каждый элемент x может быть любым вещественным числом. Чтобы дискретизировать ограниченные параметры, преобразуйте эти параметры в переменные без ограничений перед использованием HMC-дискретизатора.

После создания сэмплера можно вычислить оценки точек MAP (max-a-posteriori), настроить сэмплер, нарисовать выборки и проверить диагностику сходимости с помощью методов этого класса. Пример этого рабочего процесса см. в Байесовской линейной регрессии с использованием гамильтонового Монте-Карло.

Конструкция

hmc = hmcSampler(logpdf,startpoint) создает гамильтоновый семплер Монте-Карло (HMC), возвращенный как HamiltonianSampler объект. logpdf - указатель на функцию, который оценивает логарифм плотности вероятностей распределения равновесия и его градиента. Область вектора-столбца startpoint является начальной точкой, с которой следует начать выборку HMC.

hmc = hmcSampler(___,Name,Value) задает дополнительные опции, используя один или несколько аргументы пары "имя-значение". Задайте аргументы пары "имя-значение" после всех других входных параметров.

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

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

Логарифм целевой плотности и ее градиента, заданный как указатель на функцию.

logpdf необходимо вернуть два выходных аргументов: [lpdf,glpdf] = logpdf(X). Здесь, lpdf - базовая логарифмическая плотность вероятностей (вплоть до аддитивной константы), glpdf - градиент плотности журнала и точки X - вектор-столбец с таким же количеством элементов, как и startpoint.

Входной параметр X на logpdf должен быть без ограничений, что означает, что каждый элемент X может быть любым вещественным числом. Преобразуйте любые ограниченные параметры выборки в переменные без ограничений перед использованием HMC-дискретизатора.

Если на 'UseNumericalGradient' значение установлено в true, затем logpdf не нужно возвращать градиент как второй выход. Использование численного градиента может быть проще, так как logpdf не нужно вычислять градиент, но это может сделать выборку медленнее.

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

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

Типы данных: single | double

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

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'VariableNames',{'Intercept','Beta'},'MassVectorTuningMethod','hessian' задает имена переменных выборки и метод настройки массовых векторов, который будет 'hessian'.

Размер шага гамильтоновой динамики, заданный как разделенная разделенными запятой парами, состоящая из 'StepSize' и положительная скалярная величина.

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

Вы можете автоматически настроить размер шага, используя tuneSampler.

Пример: 'StepSize',0.2

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

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

Вы можете автоматически настроить количество шагов, используя tuneSampler.

Пример: 'NumSteps',20

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

«Массы» переменных импульса, связанных с интересующими переменными, управляют гамильтоновой динамикой в каждом предложении марковской цепи.

Можно автоматически настроить вектор масс с помощью tuneSampler.

Пример: 'MassVector',rand(3,1)

Метод для джиттерирования размера шага и количества шагов, заданный как разделенная разделенными запятой парами, состоящая из 'JitterMethod' и одно из следующих:

ЗначениеОписание
'jitter-both'

Случайным образом дрожит размер шага и количество шагов для каждой траектории чехарды.

'jitter-numsteps'

Джиттер только количество шагов каждой траектории чехарды.

'none'

Не выполнять дрожание.

При дрожании дискретизатор случайным образом выбирает размер шага или количество шагов каждой траектории чехарды как значения, меньшие, чем 'StepSize' и 'NumSteps' значения. Используйте джиттеринг, чтобы улучшить стабильность чехарды интегрирования гамильтоновой динамики.

Пример: 'JitterMethod','jitter-both'

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

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

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

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

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

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

'hessian'

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

'none'

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

Для выполнения настройки используйте tuneSampler способ.

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

Флаг для проверки аналитического градиента, заданный как разделенная разделенными запятой парами, состоящая из 'CheckGradient' и любой из них true (или 1) или false (или 0).

Если 'CheckGradient' является true, затем дискретизатор вычисляет численный градиент в startpoint и сравнивает его с аналитическим градиентом, возвращаемым logpdf.

Пример: 'CheckGradient',true

Имена переменных дискретизации, заданные как разделенная разделенными запятой парами, состоящая из 'VariableNames' и строковые массивы или массив ячеек из векторов символов. Элементы массива должны быть уникальными. Длина массива должна совпадать с длиной startpoint.

Поставьте 'VariableNames' значение для пометки компонентов вектора, который вы хотите выборки с помощью HMC sampler.

Пример: 'VariableNames',{'Intercept','Beta'}

Флаг для использования числового градиента, заданный как разделенная разделенными запятой парами, состоящая из 'UseNumericalGradient' и любой из них true (или 1) или false (или 0).

Если вы задаете 'UseNumericalGradient' значение в true, затем HMC-дискретизатор численно оценивает градиент от плотности журнала, возвращенной logpdf. В этом случае logpdf функции не нужно возвращать градиент плотности журнала как второй выход. Использование численного градиента замедляет выборку HMC.

Пример: 'UseNumericalGradient',true

Свойства

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

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

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

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

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

Вектор масс переменных импульса, заданный как числовой вектор-столбец с положительными значениями и той же длиной, что и startpoint.

«Массы» переменных импульса, связанных с интересующими переменными, управляют гамильтоновой динамикой в каждом предложении цепи Маркова.

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

ЗначениеОписание
'jitter-both'

Случайным образом дрожит размер шага и количество шагов каждой траектории чехарды.

'jitter-numsteps'

Джиттер только количество шагов каждой траектории чехарды.

'none'

Не выполнять дрожание.

При дрожании дискретизатор случайным образом выбирает размер шага или количество шагов каждой траектории чехарды как значения, меньшие, чем 'StepSize' и 'NumSteps' значения. Используйте джиттеринг, чтобы улучшить стабильность чехарды интегрирования гамильтоновой динамики.

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

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

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

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

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

'hessian'

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

'none'

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

Для выполнения настройки используйте tuneSampler способ.

Логарифм целевой плотности и ее градиента, заданный как указатель на функцию.

LogPDF возвращает два выходных аргументов: [lpdf,glpdf] = LogPDF(X). Здесь, lpdf - базовая логарифмическая плотность вероятностей (вплоть до аддитивной константы) и glpdf - градиент плотности журнала в точке X. Входной параметр X должен быть вектором-столбцом с таким же количеством элементов, как и StartPoint свойство.

Если вы задаете 'UseNumericalGradient' значение в true при создании семплера, затем LogPDF возвращает численный градиент в glpdf.

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

Имена переменных дискретизации, заданные как массив ячеек из уникальных векторов символов.

Методы

диагностикаМарковская цепь Монте-Карло диагностика
drawSamplesСгенерируйте марковскую цепь, используя гамильтоновый Monte Carlo (HMC)
estimateMAPОценка максимума плотности вероятностей журнала
tuneSampler Настройка гамильтонового дискретизатора Монте-Карло (HMC)

Примеры

свернуть все

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

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

means = [1;-3];
standevs = [1;2];
logpdf = @(theta)normalDistGrad(theta,means,standevs);

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

startpoint = randn(2,1);

Создайте HMC sampler и отобразите его свойства.

smp = hmcSampler(logpdf,startpoint);
smp
smp = 
  HamiltonianSampler with properties:

                  StepSize: 0.1000
                  NumSteps: 50
                MassVector: [2x1 double]
              JitterMethod: 'jitter-both'
      StepSizeTuningMethod: 'dual-averaging'
    MassVectorTuningMethod: 'iterative-sampling'
                    LogPDF: @(theta)normalDistGrad(theta,means,standevs)
             VariableNames: {2x1 cell}
                StartPoint: [2x1 double]

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