gpflow - 缺少输入的 GPFlow 中的多任务学习?
问题描述
是否可以在缺少某些输入的情况下使用 GPFlow 进行多任务学习?具体来说,我试图拟合来自几个相关个人的空间数据,但这些数据并不是所有个人的相同输入位置。我知道我应该在这里做分层 GP,但它们往往不能很好地扩展。我希望可以改用多任务学习,尽管用例并没有完全映射到这种方法的典型应用上。
解决方案
是否可以在缺少某些输入的情况下使用 GPFlow 进行多任务学习?
绝对没错。
GPflow 这样做的方式是将输出索引堆叠到输入上。例如,假设您在位置 [0.1, 0.2, 0.3] 和 [0.3, 0.4, 0.5] 观察到两个输出 (0, 1),您将构建“输入矩阵”
[0.1 0]
[0.2 0]
[0.3 0]
[0.3 1]
[0.4 1]
[0.5 1]
然后,使用“active_dims”指定内核如何作用于这个矩阵。可以作用于这个模型的最简单的内核是:
k = gpflow.kernels.Matern32(1, active_dims=[0]) * gpflow.kernels.Coregion(1, 2, 2, active_dims=[1])
这是内在的共区域化模型(参见 Alvarez 等人,[1])。您可以在此处的 GPflow 文档中找到更详细的演示。
请注意,您可能想要一个比内在共区域化更强大的模型:共区域化的线性模型更强大并且仍然易于实现。