使用 VFE 和 SVGP 模型进行预测的顺序调用

Sequential calls to predict using VFE and SVGP models

我有一个例子,我必须按顺序调用预测。为什么在那种情况下 SVGP 预测会比 SGPR 更快?所有稀疏模型的预测时间复杂度是否相同,还是我遗漏了什么?这是我运行测试它的代码:

from numpy.random import randn
import gpflow

sgpr = gpflow.models.SGPR(X=randn(70000,8), Y=randn(70000,1), kern=gpflow.kernels.SquaredExponential(8), Z=randn(200,8))
sgpr.predict_y(randn(1,8))
%timeit -n 100 -r 7 sgpr.predict_y(randn(1,8))
>>> 128 ms ± 696 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

svgp = gpflow.models.SVGP(X=randn(70000,8), Y=randn(70000,1), kern=gpflow.kernels.SquaredExponential(8), likelihood=gpflow.likelihoods.Gaussian(), Z=randn(200,8))
svgp.predict_y(randn(1,8))
%timeit -n 100 -r 7 svgp.predict_y(randn(1,8))
>>> 6.61 ms ± 913 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

这个答案是 https://github.com/GPflow/GPflow/issues/1030 的结果。 SGPR 在每次迭代中根据整个数据集精确计算预测后验,而 SVGP 将该信息存储在小得多的 q(u) 分布中。一种解决方法是实施自定义预测方法,其中预先计算训练相关矩阵,然后在每次迭代中重复使用。