【问题标题】:Multitask learning in GPFlow with missing inputs?缺少输入的 GPFlow 中的多任务学习?
【发布时间】:2019-06-06 17:08:34
【问题描述】:

是否可以在缺少某些输入的情况下使用 GPFlow 进行多任务学习?具体来说,我正在尝试拟合来自几个相关个人的空间数据,但对于所有个人来说,这些数据的输入位置并不相同。我知道我应该在这里做分层 GP,但它们往往不能很好地扩展。我希望可以改用多任务学习,尽管用例并没有完全映射到这种方法的典型应用上。

【问题讨论】:

    标签: gpflow


    【解决方案1】:

    是否可以在缺少某些输入的情况下使用 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 文档here 中找到更详细的演示。

    请注意,您可能想要一个比内在共区域化更强大的模型:共区域化的线性模型更强大且仍然易于实现。

    [1]http://eprints.whiterose.ac.uk/114503/1/1106.6251v2.pdf

    【讨论】:

    【解决方案2】:

    目前 GPflow 中没有一个模型可以做到这一点。但是,GPflow 确实提供了工具来轻松实现这一点。两个建议:

    • 使用多输出内核,对于缺失的数据点,您将观察方差设置为无穷大。
    • 定义一个多输出内核,并指定一个自定义Kuf,请求的输出与相应的输入一起传递。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-31
      • 2019-04-20
      • 2020-09-19
      • 2018-03-17
      • 2021-08-01
      • 2019-12-04
      • 2020-04-13
      • 1970-01-01
      相关资源
      最近更新 更多