有没有一种方法可以定义 'heterogeneous' 内核设计以将线性算子合并到 GPflow 的回归中(或 GPytorch/GPy/...)?

Is there a way to define a 'heterogeneous' kernel design to incorporate linear operators into the regression for GPflow (or GPytorch/GPy/...)?

我正在尝试使用线性运算符执行 GP 回归,例如 Särkkä 的这篇论文中所述:https://users.aalto.fi/~ssarkka/pub/spde.pdf 在这个例子中,我们可以从等式 (8) 中看出我需要一个 完整协方差矩阵中四个协方差块(训练和测试数据)的不同核函数

这绝对是可能且有效的,但我想将其包含在(最好)GPflow、GPytorch、GPy 等的内核定义中。

然而,在文档内核设计Gpflow, the only possibility is to define a covariance function that acts on all covariance blocks. In principle, the method above should be straight-forward to add myself (the kernel function expressions can be derived analytically), but I don't see any way of incorporating the 'heterogeneous' kernel functions into the regression or kernel classes. I tried to consult other packages such as Gpytorch and Gpy中,但是内核设计似乎并没有允许这个。

也许我在这里遗漏了一些东西,也许我对底层实现不够熟悉,无法评估这一点,但如果有人以前做过这个或看到(什么应该是合理直接的?)实现可能性,我很乐意找出答案。

非常感谢您的回答!

亲切的问候

这应该相当简单,但需要构建自定义内核。基本上,您需要一个内核,它可以知道每个输入的对应输出的线性运算符是什么(这是函数 observation/identity 运算符、积分观察、导数观察等)。您可以通过在输入矩阵 X 中包含一个额外的列来实现这一点,类似于 gpflow.kernels.Coregion 内核的做法(参见 this notebook). You would need to then need to define a new kernel with K and K_diag methods that for each linear operator type find the corresponding rows in the input matrix, and pass it to the appropriate covariance function (using tf.dynamic_partition and tf.dynamic_stitch, this is used in a very similar way in GPflow's SwitchedLikelihood class)。

完整的实现可能需要半天左右,这超出了我在这里所能做的,但我希望这是一个有用的起点指针,非常欢迎您加入 GPflow slack(邀请 link 在 GPflow 自述文件中)并在那里进行更详细的讨论!