使用 SVGP 模型的超参数先验

Use of priors on hyper-parameters with SVGP model

我想像 (https://gpflow.readthedocs.io/en/develop/notebooks/advanced/mcmc.html) 那样在超参数上使用先验,但使用 SVGP 模型。

按照示例 1 的步骤,当我 运行 de run_chain_fn :

时出现错误

TypeError: maximum_log_likelihood_objective() missing 1 required positional argument: 'data'

与 GPR 或 SGPMC 相反,数据不是模型的属性,它们作为外部参数包含在内。

为了避免这个问题,我稍微修改了 SVGP class 以包含数据作为参数(我现在不关心小批量处理)

class SVGP_with_data(gpflow.models.SVGP):
"""This model is a tiny variation of classical SVGP. It just includes the data as an optionnal 
    parameter of the model, since they are necessary of MCMC sampling"""

def __init__(self,data,**kwargs):
    super().__init__(**kwargs)
    self.data = data
    
def maximum_log_likelihood_objective(self,_=None):
    return self.elbo(self.data)     #here we don't care about mini-batching

好像还不错。

我找不到带有超参数先验的 SVGP 代码示例。他们是处理此问题的更标准方法吗?

谢谢!

SVGP 是用于 变分 近似的 GPflow 模型。在由 q_muq_sqrt 参数化的 q(u) 分布上使用 MCMC 没有意义(如果你想在 上做 MCMC q(u) 在稀疏近似中,使用 SGPMC).

您仍然可以在 SVGP 模型的超参数上放置(超)先验;基于梯度的优化将导致最大后验 (MAP) 点估计(与纯最大似然相反)。