我正在使用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")
我有两个问题:
所有输出都不相关,并且每个输出使用相同的内核 输出。但是,在条件计算期间,我们不假设 这种特殊的块对角结构。
谢谢!
答案 0 :(得分:1)
笔记本描述了多输出框架及其计算方面。您重点介绍的部分仅进行独立的GP回归,但目的是说明利用不同块对角线结构的不同功能如何具有不同的计算属性。在小批处理中校正(关联)训练示例并假设它们在小批处理之间是独立的,很难准确地理解您在数学上的意思。从推导变化下限的观点来看,这些是结果而不是假设。但是,从您的描述来看,您似乎想要:
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查看笔记本。