我正在使用 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")
我有两个问题:
- 我应该使用哪个内核?我在https://gpflow.readthedocs.io/en/develop/notebooks/multioutput.html#Shared-Independent-MOK-&-Shared-Independent-Features-(SLOW-CODE)中阅读了关于多输出 GP 的教程,谁能进一步解释以下声明?在我的理解中,不同输出维度之间的内核是不相关的,但是,我们仍然可以在预测中得到完整的协方差矩阵(条件)?
所有输出都是不相关的,并且每个输出使用相同的内核。但是,在条件计算期间,我们不假设这种特定的块对角结构。
- 一个技术问题。当我在 tensorflow 之后使用 gpflow 时,我应该如何设置“功能”。我应该设置一个带有零的numpy matix还是简单地设置为None?似乎在批量训练中,诱导点默认设置为全批量。虽然如何设置特征类型,例如 SharedIndependentMof,我们可以设置大于批量大小的诱导点吗?
谢谢!