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