【问题标题】:Poor fits for simple 2D Gaussian processes in `GPyTorch`不适合“GPyTorch”中的简单二维高斯过程
【发布时间】:2019-06-18 21:56:22
【问题描述】:

我在使用 GPyTorch 开箱即用地拟合简单的二维 GP 时遇到了很多困难。正如您在下面看到的,拟合度非常差,并且将 RBF 内核换成 Matern 之类的东西并没有太大改善。优化似乎确实收敛了,但不是在任何合理的地方。

class GPRegressionModel(gpytorch.models.ExactGP):
    def __init__(self, train_x, train_y, likelihood):
        super(GPRegressionModel, self).__init__(train_x, train_y, likelihood)

        self.mean_module = gpytorch.means.ConstantMean()
        self.covar_module = gpytorch.kernels.ScaleKernel(
                gpytorch.kernels.RBFKernel(ard_num_dims=2),
            )

    def forward(self, x):
        mean_x = self.mean_module(x)
        covar_x = self.covar_module(x)
        return gpytorch.distributions.MultivariateNormal(mean_x, covar_x)

除了文档中包含的示例之外,是否还有其他优秀的教程示例?

【问题讨论】:

    标签: pytorch gpytorch


    【解决方案1】:

    我在尝试拟合高维高斯过程时遇到了类似的问题。一些建议(不确定这些是否可行):

    1. 尝试使用ZeroMean,而不是恒定的平均值。有更多的超参数(恒定的平均超参数值)可能会使-mll 目标达到局部最小值,而不是全局最小值。使用不同的优化器,例如lbfgs(这是二阶的,而不是 adamsgd,它们都是一阶的)也可能对此有所帮助。

    2. 尝试使用 min-max 归一化对您的输入数据进行归一化,并使用 standard normal N(0,1) 对您的目标进行归一化> 标准化。简而言之,这些标准化步骤可确保您的数据与这些 GPR 模型的默认先验一致。有关这方面的更多信息,请查看this GitHub issue

    3. 尝试更改学习率以优化您的超参数,或您为此训练的 epoch 数。

    4. 如果您发现数值精度有任何问题(特别是在归一化之后,如果您选择使用它),请尝试使用 tensor.double() 将 Torch 张量转换为双精度张量,将您的模型和数据集更改为双精度、64 位精度.

    同样,不能保证这些能解决您遇到的问题,但希望它们能有所帮助!

    Here are some tutorials I've put together as well.

    【讨论】:

    • 是的,正是输入/输出规范化为我做到了。感谢您的回答——这都是非常好的建议。
    猜你喜欢
    • 2015-04-05
    • 1970-01-01
    • 2015-07-21
    • 2019-02-08
    • 1970-01-01
    • 2018-11-17
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多