Сэмплер Гамильтонова Монте-Карло (HMC)
Сэмплер Гамильтонова Монте-Карло (HMC) является основанной на градиенте Цепью Маркова сэмплер Монте-Карло, который можно использовать, чтобы сгенерировать выборки от плотности вероятности P(x). Выборка HMC требует спецификации log P(x) и его градиента.
x вектора параметра должен быть неограничен, означая, что каждый элемент x может быть любым вещественным числом. К ограниченным параметрам выборки преобразуйте эти параметры в неограниченные переменные перед использованием сэмплера HMC.
После создания сэмплера можно вычислить MAP (максимум по опыту) точечные оценки, настроить сэмплер, чертить выборки и проверять диагностику сходимости с помощью методов этого класса. Для примера этого рабочего процесса смотрите, что Байесова Линейная регрессия Использует гамильтонов Монте-Карло.
создает сэмплер Гамильтонова Монте-Карло (HMC), возвращенный как hmc
= hmcSampler(logpdf
,startpoint
)HamiltonianSampler
объект. logpdf
указатель на функцию, который оценивает логарифм плотности вероятности распределения равновесия и его градиента. Вектор-столбец startpoint
начальная точка, с которой можно запустить выборку HMC.
задает дополнительные опции с помощью одного или нескольких аргументов пары "имя-значение". Задайте аргументы пары "имя-значение" после всех других входных параметров.hmc
= hmcSampler(___,Name,Value
)
logpdf
— Логарифм целевой плотности и ее градиентаЛогарифм целевой плотности и ее градиента, определенного функцией указателя.
logpdf
должен возвратить два выходных аргумента: [lpdf,glpdf] = logpdf(X)
. Здесь, lpdf
основная-e логарифмическая плотность вероятности (до аддитивной постоянной), glpdf
градиент логарифмической плотности и точка X
вектор-столбец с тем же числом элементов как startpoint
.
Входной параметр X
к logpdf
должно быть неограничено, означая что каждый элемент X
может быть любое вещественное число. Преобразуйте любого ограниченные параметры выборки в неограниченные переменные перед использованием сэмплера HMC.
Если 'UseNumericalGradient'
значение установлено к true
, затем logpdf
не должен возвращать градиент как второй выход. Используя числовой градиент может быть легче начиная с logpdf
не должен вычислять градиент, но он может сделать выборку медленнее.
Типы данных: function_handle
startpoint
— Начальная точка, чтобы начать производить отНачальная точка, чтобы начать производить от, заданный как числовой вектор-столбец.
Типы данных: single
| double
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
'VariableNames',{'Intercept','Beta'},'MassVectorTuningMethod','hessian'
задает имена переменных выборки и массовый настраивающий метод вектора, чтобы быть 'hessian'
.'StepSize'
— Размер шага гамильтоновой динамики
(значение по умолчанию) | положительная скалярная величинаРазмер шага гамильтоновой динамики, заданной как разделенная запятой пара, состоящая из 'StepSize'
и положительная скалярная величина.
Чтобы предложить новое состояние для Цепи Маркова, сэмплер HMC интегрирует гамильтонову динамику с помощью интегрирования чехарды. Этот аргумент управляет размером шага того интегрирования чехарды.
Можно автоматически настроить размер шага с помощью tuneSampler
.
Пример: 'StepSize',0.2
'NumSteps'
— Количество шагов гамильтоновой динамики
(значение по умолчанию) | положительное целое числоКоличество шагов гамильтоновой динамики, заданной как разделенная запятой пара, состоящая из 'NumSteps'
и положительное целое число.
Чтобы предложить новое состояние для Цепи Маркова, сэмплер HMC интегрирует гамильтонову динамику с помощью интегрирования чехарды. Этот аргумент управляет количеством шагов того интегрирования чехарды.
Можно автоматически настроить количество шагов с помощью tuneSampler
.
Пример: 'NumSteps',20
'MassVector'
— Массовый вектор переменных импульсаones(size(startpoint,1),1)
(значение по умолчанию) | числовой вектор-столбец Массовый вектор переменных импульса, заданных как разделенная запятой пара, состоящая из 'MassVector'
и числовой вектор-столбец с положительными значениями и той же длиной как startpoint
.
“Массы” переменных импульса, сопоставленных с переменными интереса, управляют гамильтоновой динамикой в каждом предложении по Цепи Маркова.
Можно автоматически настроить массовый вектор с помощью tuneSampler
.
Пример: 'MassVector',rand(3,1)
'JitterMethod'
— Метод для дрожащего размера шага и количества шагов'jitter-both'
(значение по умолчанию) | 'jitter-numsteps'
| 'none'
Метод для дрожания размера шага и количества шагов, заданных как разделенная запятой пара, состоящая из 'JitterMethod'
и одно из следующего:
Значение | Описание |
---|---|
'jitter-both' | Случайным образом дрожите размер шага и количество шагов для каждой траектории чехарды. |
'jitter-numsteps' | Дрожание только количество шагов каждой траектории чехарды. |
'none' | Не выполните дрожание. |
С дрожанием сэмплер случайным образом выбирает размер шага или количество шагов каждой траектории чехарды как значения, меньшие, чем 'StepSize'
и 'NumSteps'
значения. Используйте дрожание, чтобы улучшить устойчивость интегрирования чехарды гамильтоновой динамики.
Пример: 'JitterMethod','jitter-both'
'StepSizeTuningMethod'
— Метод для настройки размера шага сэмплера'dual-averaging'
(значение по умолчанию) | 'none'
Метод для настройки размера шага сэмплера, заданного как разделенная запятой пара, состоящая из 'StepSizeTuningMethod'
и 'dual-averaging'
или 'none'
.
Если 'StepSizeTuningMethod'
значение установлено к 'dual-averaging'
, затем tuneSampler
настраивает размер шага чехарды сэмплера HMC, чтобы достигнуть определенного приемного отношения для фиксированного значения продолжительности симуляции. Продолжительность симуляции равняется размеру шага, умноженному на количество шагов. Чтобы установить целевое приемное отношение, используйте 'TargetAcceptanceRatio'
аргумент пары "имя-значение" tuneSampler
метод.
Пример: 'StepSizeTuningMethod','none'
'MassVectorTuningMethod'
— Метод для настройки вектора массы сэмплера'iterative-sampling'
(значение по умолчанию) | 'hessian'
| 'none'
Метод для настройки вектора массы сэмплера, заданного как разделенная запятой пара, состоящая из 'MassVectorTuningMethod'
и одно из следующих значений
Значение | Описание |
---|---|
'iterative-sampling' | Настройте |
'hessian' | Установите |
'none' | Не выполните настройку |
Чтобы выполнить настройку, используйте tuneSampler
метод.
Пример: 'MassVectorTuningMethod','hessian'
'CheckGradient'
— Отметьте для проверки аналитического градиентаtrue
(или 1
) (значение по умолчанию) | false
(или 0
) Отметьте для проверки аналитического градиента, заданного как разделенная запятой пара, состоящая из 'CheckGradient'
и любой true
(или 1
) или false
(или 0
).
Если 'CheckGradient'
true
, затем сэмплер вычисляет числовой градиент в startpoint
и сравнивает его с аналитическим градиентом, возвращенным logpdf
.
Пример: 'CheckGradient',true
'VariableNames'
— Выборка имен переменных{'x1','x2',...}
(значение по умолчанию) | массив строк | массив ячеек из символьных векторов Выборка имен переменных, заданных как разделенная запятой пара, состоящая из 'VariableNames'
и массив строк или массив ячеек из символьных векторов. Элементы массива должны быть уникальными. Длина массива должна совпасть с длиной startpoint
.
Предоставьте 'VariableNames'
значение, чтобы пометить компоненты вектора вы хотите к выборке с помощью сэмплера HMC.
Пример: 'VariableNames',{'Intercept','Beta'}
'UseNumericalGradient'
— Отметьте для использования числового градиентаfalse
(или 0
) (значение по умолчанию) | true
(или 1
) Отметьте для использования числового градиента, заданного как разделенная запятой пара, состоящая из 'UseNumericalGradient'
и любой true
(или 1
) или false
(или 0
).
Если вы устанавливаете 'UseNumericalGradient'
значение к true
, затем сэмплер HMC численно оценивает градиент от логарифмической плотности, возвращенной logpdf
. В этом случае, logpdf
функция не должна возвращать градиент логарифмической плотности как второй выход. Используя числовой градиент делает HMC, производящий медленнее.
Пример: 'UseNumericalGradient',true
StepSize
— Размер шага гамильтоновой динамики
(значение по умолчанию) | положительная скалярная величинаРазмер шага гамильтоновой динамики, заданной как положительная скалярная величина.
Чтобы предложить новое состояние для Цепи Маркова, сэмплер HMC интегрирует гамильтонову динамику с помощью интегрирования чехарды. Значение этого свойства управляет размером шага того интегрирования чехарды.
NumSteps
— Количество шагов гамильтоновой динамики
(значение по умолчанию) | положительное целое числоКоличество шагов гамильтоновой динамики, заданной как положительное целое число.
Чтобы предложить новое состояние для Цепи Маркова, сэмплер HMC интегрирует гамильтонову динамику с помощью интегрирования чехарды. Значение этого свойства управляет количеством шагов того интегрирования чехарды.
MassVector
— Массовый вектор переменных импульсаones(size(startpoint,1),1)
(значение по умолчанию) | числовой вектор-столбец Массовый вектор переменных импульса, заданных как числовой вектор-столбец с положительными значениями и той же длиной как startpoint
.
“Массы” переменных импульса, сопоставленных с переменными интереса, управляют гамильтоновой динамикой в каждом предложении по Цепи Маркова.
JitterMethod
— Метод для дрожащего размера шага и количества шагов'jitter-both'
(значение по умолчанию) | 'jitter-numsteps'
| 'none'
Метод для дрожания размера шага и количества шагов, заданных как одно из следующих значений.
Значение | Описание |
---|---|
'jitter-both' | Случайным образом дрожите размер шага и количество шагов каждой траектории чехарды. |
'jitter-numsteps' | Дрожание только количество шагов каждой траектории чехарды. |
'none' | Не выполните дрожание. |
С дрожанием сэмплер случайным образом выбирает размер шага или количество шагов каждой траектории чехарды как значения, меньшие, чем 'StepSize'
и 'NumSteps'
значения. Используйте дрожание, чтобы улучшить устойчивость интегрирования чехарды гамильтоновой динамики.
StepSizeTuningMethod
— Метод для настройки размера шага сэмплера'dual-averaging'
(значение по умолчанию) | 'none'
Метод для настройки размера шага сэмплера, заданного как 'dual-averaging'
или 'none'
.
Если StepSizeTuningMethod
равняется 'dual-averaging'
, затем tuneSampler
настраивает размер шага чехарды сэмплера HMC, чтобы достигнуть определенного приемного отношения для фиксированного значения продолжительности симуляции. Продолжительность симуляции равняется размеру шага, умноженному на количество шагов. Чтобы установить целевое приемное отношение, используйте 'TargetAcceptanceRatio'
аргумент пары "имя-значение" tuneSampler
метод.
MassVectorTuningMethod
— Метод для настройки вектора массы сэмплера'iterative-sampling'
(значение по умолчанию) | 'hessian'
| 'none'
Метод для настройки вектора массы сэмплера, заданного как одно из следующих значений.
Значение | Описание |
---|---|
'iterative-sampling' | Настройте |
'hessian' | Установите |
'none' | Не выполните настройку |
Чтобы выполнить настройку, используйте tuneSampler
метод.
LogPDF
— Логарифм целевой плотности и ее градиентаЛогарифм целевой плотности и ее градиента, определенного функцией указателя.
LogPDF
возвращает два выходных аргумента: [lpdf,glpdf] = LogPDF(X)
. Здесь, lpdf
основная-e логарифмическая плотность вероятности (до аддитивной постоянной) и glpdf
градиент логарифмической плотности в точке X
. Входной параметр X
должен быть вектор-столбец с тем же числом элементов как StartPoint
свойство.
Если вы устанавливаете 'UseNumericalGradient'
значение к true
при создании сэмплера, затем LogPDF
возвращает числовой градиент в glpdf
.
StartPoint
— Начальная точка, чтобы начать производить отНачальная точка, чтобы начать производить от, заданный как числовой вектор-столбец.
VariableNames
— Выборка имен переменных{'x1','x2',...}
(значение по умолчанию) | массив ячеек уникальных векторов символовВыборка имен переменных, заданных как массив ячеек уникальных векторов символов.
диагностика | Цепь Маркова диагностика Монте-Карло |
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
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.