gpflow中的多输出回归

时间:2018-12-28 17:32:17

标签: gpflow

我正在使用gpflow进行多输出回归。

我的回归目标是一个三维矢量(相关),我设法用完整的协方差矩阵进行了预测。这是我的实现。更具体地说,我在tensorflow之后使用SVGP,其中f_x,Y是张量(我正在使用小批量训练)。在分批训练期间,小批训练中的训练示例是相关的,而我们可以假定它们与训练集中的其他示例是独立的。因此,我想在训练和预测过程中使用完整的协方差矩阵在每个批次中实现一个相关的核。

kernel = mk.SharedIndependentMok(gpflow.kernels.RBF(args.feat_dim, ARD=False, name="rbf"), args.output_dim)

# kernel = mk.SeparateIndependentMok([gpflow.kernels.RBF(128, ARD=True, name="rbf_ard"+str(i)) for i in range(3)])
q_mu = np.zeros((args.batch_size, args.output_dim)).reshape(args.batch_size * args.output_dim, 1)
q_sqrt = np.eye(args.batch_size * args.output_dim).reshape(1, args.batch_size * args.output_dim, args.batch_size * args.output_dim)
# feature = gpflow.features.InducingPoints(np.zeros((args.batch_size, 128)))

self.gp_model = gpflow.models.SVGP(X=f_X, Y=Y, kern=kernel, likelihood=gpflow.likelihoods.Gaussian(name="lik"), Z=np.zeros((args.batch_size, args.feat_dim)), q_mu=q_mu, q_sqrt=q_sqrt, name="svgp")

我有两个问题:

  1. 我应该使用哪个内核?我在https://gpflow.readthedocs.io/en/develop/notebooks/multioutput.html#Shared-Independent-MOK-&-Shared-Independent-Features-(SLOW-CODE)中阅读了有关多输出GP的教程,有人可以进一步解释以下陈述吗?以我的理解,不同输出维度之间的核是不相关的,但是,我们仍然可以在预测中获得完整的协方差矩阵(有条件的)吗?
  

所有输出都不相关,并且每个输出使用相同的内核   输出。但是,在条件计算期间,我们不假设   这种特殊的块对角结构。

  1. 一个技术问题。张量流后使用gpflow时应如何设置“功能”。我应该将零设置为numpy Matix还是简单地设置为None?似乎在批次训练中,将诱导点默认设置为完整批次。如何设置功能类型,例如SharedIndependentMof,我们可以将诱导点设置为大于批处理大小吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

笔记本描述了多输出框架及其计算方面。您重点介绍的部分仅进行独立的GP回归,但目的是说明利用不同块对角线结构的不同功能如何具有不同的计算属性。在小批处理中校正(关联)训练示例并假设它们在小批处理之间是独立的,很难准确地理解您在数学上的意思。从推导变化下限的观点来看,这些是结果而不是假设。但是,从您的描述来看,您似乎想要:

  • 小批量培训(即,无需考虑小批量之间的相关性[Hensman等,2013])
  • 提供输出之间相关性的内核。目前,我们仅支持SeparateMixedMok中的线性相关。 Alvarez等人对数学进行了很好的回顾。
  • 一种利用先前(MixedKernelSeparateMof)中的独立性特性的功能。
  • 具有完全协方差的预测。

3. Mixed Kernel & Uncorrelated features (OPTIMAL)节对此进行了介绍。使用通常的预测功能时,只需确保设置full_output_cov=True

小批量的大小与诱导点的数量无关,尽管通常将诱导点的数量设置为大于训练数据的数量是没有用的。上面和笔记本中介绍了选择哪个功能。对于多输出情况,这很复杂。

注意:您还可以通过GitHub https://github.com/GPflow/GPflow/blob/develop/doc/source/notebooks/multioutput.ipynb查看笔记本。