pymc.SVGD#

class pymc.SVGD(n_particles=100, jitter=1, model=None, start=None, random_seed=None, estimator=<class 'pymc.variational.operators.KSD'>, kernel=<pymc.variational.test_functions.RBF object>, **kwargs)[源代码]#

Stein变分梯度下降

这种推断基于核化的 Stein 差异,其主要思想是移动初始的噪声粒子,使它们最好地适应目标分布。

算法概述如下

具有密度函数 \(p(x)\) 的目标分布

以及一组初始粒子 \(\{x^0_i\}^n_{i=1}\)

输出: 一组近似目标分布的粒子 \(\{x^{*}_i\}^n_{i=1}\)

\[\begin{split}x_i^{l+1} &\leftarrow x_i^{l} + \epsilon_l \hat{\phi}^{*}(x_i^l) \\ \hat{\phi}^{*}(x) &= \frac{1}{n}\sum^{n}_{j=1}[k(x^l_j,x) \nabla_{x^l_j} logp(x^l_j)+ \nabla_{x^l_j} k(x^l_j,x)]\end{split}\]
参数:
n_particles: `int`

用于近似的粒子数量

抖动: `float`

初始点的噪声标准差

模型: :class:`pymc.Model`

用于推理的 PyMC 模型

kernel: `callable`

KSD 的核函数 \(f(直方图) -> (k(x,.), abla_x k(x,.))\)

温度: 浮点数

负责探索的参数,较高的温度给出更广泛的后验估计

start: `dict[str, np.ndarray]` 或 `StartDict`

推理的初始点

random_seed: None 或 int
**kwargs: 传递给估计器的其他关键字参数

参考文献

  • Qiang Liu, Dilin Wang (2016) Stein变分梯度下降:一个通用的贝叶斯推断算法 arXiv:1608.04471

  • Yang Liu, Prajit Ramachandran, Qiang Liu, Jian Peng (2017) Stein变分策略梯度 arXiv:1704.02399

方法

SVGD.__init__([n_particles, jitter, model, ...])

SVGD.fit([n, score, callbacks, progressbar])

执行算子变分推断

SVGD.refine(n[, progressbar])

使用最后编译的步骤函数优化解决方案

SVGD.run_profiling([n, score])

属性

approx