exponenta event banner

Класс HamiltingSampler

Гамильтонианский образец Монте-Карло (HMC)

Описание

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

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

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

Строительство

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

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

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

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

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

logpdf должен возвращать два выходных аргумента: [lpdf,glpdf] = logpdf(X). Здесь, lpdf - плотность вероятности base-e log (до аддитивной константы), 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.

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

Пример: '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 - плотность вероятности base-e log (до аддитивной константы) и glpdf - градиент плотности логарифма в точке X. Входной аргумент X должен быть вектором столбца с тем же количеством элементов, что и StartPoint собственность.

Если установить 'UseNumericalGradient' значение для true при создании пробоотборника LogPDF возвращает численный градиент в glpdf.

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

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

Методы

диагностикаМарковская цепь Монте-Карло диагностика
drawSamplesСоздание цепи Маркова с использованием гамильтонова Монте-Карло (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 и отобразите его свойства.

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]

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