Справка по AdvancedHMC
Функции
#
AdvancedHMC.A
— Method
Один шаг интеграции гамильтониана.
ПРИМЕЧАНИЕ. Эта функция предназначена для использования только в find_good_stepsize
.
#
AdvancedHMC.build_tree
— Method
Рекурсивно строит дерево для заданной глубины j
.
#
AdvancedHMC.check_left_subtree
— Method
check_left_subtree(h, t, tleft, tright)
Выполняет проверку разворота между самой левой фазовой точкой t
и самой левой фазовой точкой tright
правого поддерева.
#
AdvancedHMC.check_right_subtree
— Method
check_right_subtree(h, t, tleft, tright)
Выполняет проверку разворота между самой правой фазовой точкой t
и самой правой фазовой точкой tleft
левого поддерева.
#
AdvancedHMC.combine
— Method
combine(treeleft, treeright)
Объединяет левое дерево treeleft
и правое дерево treeright
при заданном гамильтониане h
, затем делает новую выборку кандидатов и обновляет связанные статистики для полученного дерева.
#
AdvancedHMC.determine_sampler_eltype
— Method
determine_sampler_eltype(xs...)
Определяет тип элемента, который следует использовать для заданных аргументов.
Символы либо преобразуются к типу float по умолчанию, либо просто отбрасываются в пользу определенных типов из других аргументов.
#
AdvancedHMC.find_good_stepsize
— Method
Находит хороший начальный размер шага с перешагиванием с помощью эвристического поиска.
#
AdvancedHMC.isterminated
— Method
isterminated(_, h, t)
Определяет разворот для двух фазовых точек (zleft
и zright
) при заданном гамильтониане h
, используя (оригинальный) критерий без разворота.
#
AdvancedHMC.isterminated
— Method
isterminated(_, h, t)
Определяет разворот для двух фазовых точек (zleft
и zright
) при заданном гамильтониане h
, используя обобщенный критерий без разворота.
Справка: https://arxiv.org/abs/1701.02434
#
AdvancedHMC.isterminated
— Method
isterminated(tc, h, t, tleft, tright)
Определяет разворот для двух фазовых точек (zleft
и zright
) при заданном гамильтониане h
, используя обобщенный критерий без разворота с дополнительными проверками разворота.
#
AdvancedHMC.maxabs
— Method
maxabs(a, b)
Возвращает значение с наибольшим абсолютным значением.
#
AdvancedHMC.mh_accept_ratio
— Method
Выполняет принятие MH на основе энергии, т. е. отрицательной логарифмической вероятности.
#
AdvancedHMC.nom_step_size
— Method
nom_step_size(::AbstractIntegrator)
Получает номинальный размер шага интеграции. Текущий размер шага интеграции может отличаться от него, например, если размер шага колеблется. Номинальный размер шага обычно используется при адаптации.
#
AdvancedHMC.pm_next!
— Method
Обновляет индикатор хода выполнения с отображением всех статистических данных траектории, номера итерации и метрики.
#
AdvancedHMC.randcat
— Method
randcat(rng, P::AbstractMatrix)
Генерирует категориальные случайные переменные в векторном режиме. Предполагается, что P
— это матрица (D, N), где каждый столбец является вектором вероятности.
Пример
P = [ 0.5 0.3; 0.4 0.6; 0.1 0.1 ] u = [0.3, 0.4] C = [ 0.5 0.3 0.9 0.9 1.0 1.0 ]
Тогда C .< u'
— это
[ 0 1 0 0 0 0 ]
таким образом, convert.(Int, vec(sum(C .< u'; dims=1))) .+ 1
равно [1, 2]
.
#
AdvancedHMC.sampler_eltype
— Function
sampler_eltype(sampler)
Возвращает тип элемента сэмплера.
#
AdvancedHMC.simple_pm_next!
— Method
Простое обновление индикатора хода выполнения без отображения значений.
#
AdvancedHMC.stat
— Method
Возвращает статистики для перехода t
.
#
AdvancedHMC.step_size
— Function
step_size(::AbstractIntegrator)
Получает текущий размер шага интеграции.
#
AdvancedHMC.temper
— Method
temper(lf::TemperedLeapfrog, r, step::NamedTuple{(:i, :is_half),<:Tuple{Integer,Bool}}, n_steps::Int)
Шаг выравнивания. step
является именованным кортежем, где
-
i
— текущая итерация перешагивания и -
is_half
указывает, является ли это (первым) полушагом импульса или выравнивания.
#
AdvancedHMC.transition
— Method
transition(τ, h, z)
Выполняет переход MCMC из фазовой точки z
, используя траекторию τ
при заданном гамильтониане h
.
ПРИМЕЧАНИЕ. Это RNG-неявная резервная функция для transition(GLOBAL_RNG, τ, h, z)
.
#
AdvancedHMC.update_nom_step_size
— Function
update_nom_step_size(i::AbstractIntegrator, ϵ) -> AbstractIntegrator
Возвращает копию интегратора i
с новым номинальным размером шага (nom_step_size
) ϵ
.
#
StatsBase.sample
— Method
sample(
rng::AbstractRNG,
h::Hamiltonian,
κ::AbstractMCMCKernel,
θ::AbstractVecOrMat{T},
n_samples::Int,
adaptor::AbstractAdaptor=NoAdaptation(),
n_adapts::Int=min(div(n_samples, 10), 1_000);
drop_warmup::Bool=false,
verbose::Bool=true,
progress::Bool=false
)
Выбирает n_samples
образцов, используя предложение κ
при заданном гамильтониане h
.
-
Случайность регулируется с помощью
rng
.-
Если
rng
не задан, будет использоватьсяGLOBAL_RNG
.
-
-
Начальная точка задается с помощью
θ
. -
Адаптор задается с помощью
adaptor
, для которого значением по умолчанию является отсутствие адаптации.-
Он выполнит
n_adapts
шагов адаптации, для которых по умолчанию используется минимальное значение1_000
, и 10 % отn_samples
.
-
-
drop_warmup
определяет, отбрасывать ли образцы во время фазы адаптации. -
verbose
управляет уровнем детализации. -
progress
определяет, показывать ли индикатор хода выполнения.
Типы
#
AdvancedHMC.AbstractIntegrator
— Type
abstract type AbstractIntegrator
Представляет собой интегратор, используемый для моделирования гамильтоновой системы.
Реализация
Ожидается, что AbstractIntegrator
будет иметь следующие реализации:
-
stat
(@ref) -
nom_step_size
(@ref) -
step_size
(@ref)
#
AdvancedHMC.AbstractTrajectorySampler
— Type
Как выбрать фазовую точку из моделируемой траектории.
#
AdvancedHMC.BinaryTree
— Type
Полная траектория бинарного дерева с хранимыми необходимыми листьями и информацией.
#
AdvancedHMC.ClassicNoUTurn
— Type
struct ClassicNoUTurn{F<:AbstractFloat} <: AdvancedHMC.DynamicTerminationCriterion
Классический критерий без разворота, описанный в Eq. (9) в [1].
Неформально, расширение траектории будет завершено, если при продолжении моделирования вперед или назад во времени уменьшится расстояние между крайней левой и крайней правой позициями.
Поля
-
max_depth::Int64
-
Δ_max::AbstractFloat
Ссылки
-
Hoffman, M. D., & Gelman, A. (2014). The No-U-Turn Sampler: adaptively setting path lengths in Hamiltonian Monte Carlo. Journal of Machine Learning Research, 15(1), 1593-1623. (arXiv)
#
AdvancedHMC.EndPointTS
— Type
Выбирает конечную точку траектории.
#
AdvancedHMC.FixedIntegrationTime
— Type
struct FixedIntegrationTime{F<:AbstractFloat} <: AdvancedHMC.StaticTerminationCriterion
Стандартная реализация HMC с фиксированным временем интеграции.
Поля
-
λ::AbstractFloat
: общая длина траектории, т. е. сделатьfloor(λ / integrator_step_size)
количество шагов с перешагиванием.
Ссылки
-
Neal, R. M. (2011). MCMC using Hamiltonian dynamics. Handbook of Markov chain Monte Carlo, 2(11), 2. (arXiv)
#
AdvancedHMC.FixedNSteps
— Type
struct FixedNSteps <: AdvancedHMC.StaticTerminationCriterion
Статический HMC с фиксированным числом шагов с перешагиванием.
Поля
-
L::Int64
: количество шагов для моделирования, т. е. длина траектории будет равнаL + 1
.
Ссылки
-
Neal, R. M. (2011). MCMC using Hamiltonian dynamics. Handbook of Markov chain Monte Carlo, 2(11), 2. (arXiv)
#
AdvancedHMC.FullMomentumRefreshment
— Type
Полностью повторно выполняет выборку нового импульса.
#
AdvancedHMC.GeneralisedNoUTurn
— Type
struct GeneralisedNoUTurn{F<:AbstractFloat} <: AdvancedHMC.DynamicTerminationCriterion
Обобщенный критерий без разворота, как описано в разделе A.4.2 в [1].
Поля
-
max_depth::Int64
-
Δ_max::AbstractFloat
Ссылки
-
Betancourt, M. (2017). A Conceptual Introduction to Hamiltonian Monte Carlo. arXiv preprint arXiv:1701.02434.
#
AdvancedHMC.HMC
— Type
HMC(ϵ::Real, n_leapfrog::Int)
Сэмплер гамильтониана Монте-Карло со статической траекторией.
Поля
-
n_leapfrog
: количество шагов с перешагиванием. -
integrator
: выбор интегратора, заданный либо с помощьюSymbol
, либоAbstractIntegrator
. -
metric
: выбор начальной метрики;Symbol
означает, что она инициализируется автоматически. Тип метрики будет сохранен во время автоматической инициализации и адаптации.
#
AdvancedHMC.HMCDA
— Type
HMCDA(δ::Real, λ::Real, integrator = :leapfrog, metric = :diagonal)
Сэмплер гамильтониана Монте-Карло с алгоритмом двойного среднего.
Поля
-
δ
: целевой коэффициент принятия для двойного среднего. -
λ
: целевая длина перешагивания. -
integrator
: выбор интегратора, заданный либо с помощьюSymbol
, либоAbstractIntegrator
. -
metric
: выбор начальной метрики;Symbol
означает, что она инициализируется автоматически. Тип метрики будет сохранен во время автоматической инициализации и адаптации.
Примечания
Дополнительные сведения см. в следующем документе (ссылка на arXiv):
-
Hoffman, Matthew D., and Andrew Gelman. The No-U-turn sampler: adaptively setting path lengths in Hamiltonian Monte Carlo. Journal of Machine Learning Research 15, no. 1 (2014): 1593-1623.
#
AdvancedHMC.HMCProgressCallback
— Type
HMCProgressCallback
Обратный вызов, который будет использоваться с интерфейсом AbstractMCMC.jl, реплицируя поведение ведения журнала, отличного от AbstractMCMC sample
.
Поля
-
pm
: индикаторProgress
ProgressMeters.jl. -
progress
: указывает, использовать ли отображение индикатора хода выполнения. -
verbose
: еслиprogress
не указан и это имеет значениеtrue
, по завершении адаптации в журнал будет занесена некоторая информация. -
num_divergent_transitions
: количество расходящихся переходов на данный момент. -
num_divergent_transitions_during_adaption
:
#
AdvancedHMC.HMCSampler
— Type
HMCSampler
AbstractMCMC.AbstractSampler
для ядер в AdvancedHMC.jl.
Поля
-
κ
:AbstractMCMCKernel
. -
metric
: выбор начальной метрикиAbstractMetric
. Тип метрики будет сохранен во время адаптации. -
adaptor
:AbstractAdaptor
.
Примечания
Обратите внимание, что все поля имеют префикс initial_
, чтобы указать, что они необязательно будут соответствовать kernel
, metric
и adaptor
после выборки.
Для доступа к этим обновленным полям используйте результирующее состояние HMCState
.
#
AdvancedHMC.HMCState
— Type
HMCState
Представляет состояние HMCSampler
.
Поля
-
i
: индекс текущей итерации. -
transition
: текущий переход (Transition
). -
metric
: текущая метрикаAbstractMetric
, возможно, адаптированная. -
κ
: текущийAbstractMCMCKernel
. -
adaptor
: текущийAbstractAdaptor
.
#
AdvancedHMC.JitteredLeapfrog
— Type
struct JitteredLeapfrog{FT<:AbstractFloat, T<:Union{AbstractArray{FT<:AbstractFloat, 1}, FT<:AbstractFloat}} <: AdvancedHMC.AbstractLeapfrog{T<:Union{AbstractArray{FT<:AbstractFloat, 1}, FT<:AbstractFloat}}
Интегратор с перешагиванием со случайным колеблющимся размером шага ϵ
для каждой траектории.
Поля
-
ϵ0::Union{AbstractVector{FT}, FT} where FT<:AbstractFloat
: номинальный (без колебаний) размер шага. -
jitter::AbstractFloat
: доля номинального размера шагаϵ0
, которая может быть прибавлена или вычтена. -
ϵ::Union{AbstractVector{FT}, FT} where FT<:AbstractFloat
: текущий (без колебаний) размер шага.
Описание
То же самое, что и LeapFrog
(@ref), но с колеблющимся размером шага. То есть в начале каждой траектории мы выбираем размер шага ϵ
путем прибавления или вычитания из номинального/базового размера шага ϵ0
некоторой случайной доли ϵ0
причем доля задается jitter
, т. е. ϵ = ϵ0 - jitter * ϵ0 * rand()
. p Колебание может помочь решить проблемы, связанные с плохим взаимодействием с фиксированным размером шага.
-
В областях с высокой «кривизной» текущий выбор размера шага может привести к перерегулированию, в результате чего почти все шаги будут отклонены. Поэтому случайная выборка размера шага в начале траекторий может увеличить вероятность выхода из таких областей с высокой кривизной.
-
Может иметь место точная периодичность моделируемых траекторий, то есть вам может не повезти, и вы смоделируете траекторию вперед по времени
L ϵ
и окажетесь в той же точке (что приведет к отсутствию эргодичности; см. раздел 3.2 в [1]). Если импульс обновляется перед каждой траекторией, этого точно не должно происходить, но на практике это все равно может быть проблемой. Случайный выбор размера шагаϵ
может помочь избежать таких проблем.
Ссылки
-
Neal, R. M. (2011). MCMC using Hamiltonian dynamics. Handbook of Markov chain Monte Carlo, 2(11), 2. (arXiv)
#
AdvancedHMC.Leapfrog
— Type
struct Leapfrog{T<:(Union{AbstractVector{var"#s29"}, var"#s29"} where var"#s29"<:AbstractFloat)} <: AdvancedHMC.AbstractLeapfrog{T<:(Union{AbstractVector{var"#s29"}, var"#s29"} where var"#s29"<:AbstractFloat)}
Интегратор с перешагиванием с фиксированным размером шага ϵ
.
Поля
-
ϵ::Union{AbstractVector{var"#s29"}, var"#s29"} where var"#s29"<:AbstractFloat
: размер шага.
#
AdvancedHMC.MultinomialTS
— Type
struct MultinomialTS{F<:AbstractFloat} <: AdvancedHMC.AbstractTrajectorySampler
Многочленный сэмплер траектории, используемый при построении дерева. Он содержит вес дерева, определяемый как полные вероятности листьев.
Поля
-
zcand::AdvancedHMC.PhasePoint
: выбранный кандидатPhasePoint
. -
ℓw::AbstractFloat
: Общая энергия для данного дерева, т. е. сумма энергий всех листьев.
#
AdvancedHMC.MultinomialTS
— Method
struct MultinomialTS{F<:AbstractFloat} <: AdvancedHMC.AbstractTrajectorySampler
Многочленный сэмплер для начального дерева с одним листом. (Логарифм) веса для узлов листьев — это их (ненормализованные) гамильтоновы энергии.
#
AdvancedHMC.MultinomialTS
— Method
struct MultinomialTS{F<:AbstractFloat} <: AdvancedHMC.AbstractTrajectorySampler
Многочленный сэмплер для траектории, состоящей только из узла листа.
-
Вес дерева — это (ненормализованная) энергия листа.
#
AdvancedHMC.NUTS
— Type
NUTS(δ::Real; max_depth::Int=10, Δ_max::Real=1000, integrator = :leapfrog, metric = :diagonal)
Сэмплер без разворота (NUTS).
Поля
-
δ
: целевой коэффициент принятия для двойного среднего. -
max_depth
: максимальная глубина удвоенного дерева. -
Δ_max
: максимальная дивергенция при удвоении дерева. -
integrator
: выбор интегратора, заданный либо с помощьюSymbol
, либоAbstractIntegrator
. -
metric
: выбор начальной метрики;Symbol
означает, что она инициализируется автоматически. Тип метрики будет сохранен во время автоматической инициализации и адаптации.
#
AdvancedHMC.PartialMomentumRefreshment
— Type
struct PartialMomentumRefreshment{F<:AbstractFloat} <: AdvancedHMC.AbstractMomentumRefreshment
Частичное обновление импульса с частотой обновления α
.
Поля
-
α::AbstractFloat
См. уравнение (5.19) [1],
r' = α⋅r + sqrt(1-α²)⋅G
где r — импульс, а G — гауссова случайная величина.
Ссылки
-
Neal, Radford M., MCMC using Hamiltonian dynamics. Handbook of markov chain monte carlo 2.11 (2011): 2.
#
AdvancedHMC.SliceTS
— Type
struct SliceTS{F<:AbstractFloat} <: AdvancedHMC.AbstractTrajectorySampler
Сэмплер срезов траектории, используемый при построении дерева. Она содержит переменную среза и количество допустимых кандидатов в дереве.
Поля
-
zcand::AdvancedHMC.PhasePoint
: выбранный кандидатPhasePoint
. -
ℓu::AbstractFloat
: переменная среза в логарифмическом пространстве. -
n::Int64
: количество приемлемых кандидатов, т. е. тех, вероятность которых больше переменной срезаu
.
#
AdvancedHMC.SliceTS
— Method
struct SliceTS{F<:AbstractFloat} <: AdvancedHMC.AbstractTrajectorySampler
Сэмплер срезов для начального дерева с одним листом. Переменная среза инициализируется.
#
AdvancedHMC.SliceTS
— Method
struct SliceTS{F<:AbstractFloat} <: AdvancedHMC.AbstractTrajectorySampler
Создает сэмплер срезов для дерева с одним листом:
-
переменная среза копируется из переданного сэмплера
s
, и -
количество допустимых кандидатов вычисляется путем сравнения переменной среза с текущей энергией.
#
AdvancedHMC.StrictGeneralisedNoUTurn
— Type
struct StrictGeneralisedNoUTurn{F<:AbstractFloat} <: AdvancedHMC.DynamicTerminationCriterion
Обобщенный критерий без разворота, как описано в разделе A.4.2 в [1], с добавленной проверкой без разворота, как описано в [2].
Поля
-
max_depth::Int64
-
Δ_max::AbstractFloat
Ссылки
-
Betancourt, M. (2017). A Conceptual Introduction to Hamiltonian Monte Carlo. arXiv preprint arXiv:1701.02434.
#
AdvancedHMC.TemperedLeapfrog
— Type
struct TemperedLeapfrog{FT<:AbstractFloat, T<:Union{AbstractArray{FT<:AbstractFloat, 1}, FT<:AbstractFloat}} <: AdvancedHMC.AbstractLeapfrog{T<:Union{AbstractArray{FT<:AbstractFloat, 1}, FT<:AbstractFloat}}
Интегратор с темперированным перешагиванием с фиксированным размером шага ϵ
и «температурой» α
.
Поля
-
ϵ::Union{AbstractVector{FT}, FT} where FT<:AbstractFloat
: размер шага. -
α::AbstractFloat
: параметр температуры.
Описание
Темперирование потенциально может позволить более эффективно исследовать апостериорное значение, например, в мультимодальном апостериорном значении может быть больше шансов на скачки между модами.
#
AdvancedHMC.Termination
— Type
Termination
Причины завершения
-
dynamic
: из-за критериев остановки -
numerical
: из-за большого отклонения энергии от начальной (возможно, численные ошибки)
#
AdvancedHMC.Termination
— Method
Termination(s, nt, H0, H′)
Проверяет завершение гамильтоновой траектории.
#
AdvancedHMC.Termination
— Method
Termination(s, nt, H0, H′)
Проверяет завершение гамильтоновой траектории.
#
AdvancedHMC.Trajectory
— Type
struct Trajectory{TS<:AdvancedHMC.AbstractTrajectorySampler, I<:AdvancedHMC.AbstractIntegrator, TC<:AdvancedHMC.AbstractTerminationCriterion}
Численно смоделированные гамильтоновы траектории.
#
AdvancedHMC.Transition
— Type
struct Transition{P<:AdvancedHMC.PhasePoint, NT<:NamedTuple}
Переход, содержащий фазовую точку и другую статистику перехода.
Поля
-
z::AdvancedHMC.PhasePoint
: фазовая точка для перехода. -
stat::NamedTuple
: статистика, связанная с переходом, например энергия.