在GPyTorch中不太适合简单的2D高斯过程

时间:2019-06-18 21:56:22

标签: pytorch gpytorch

使用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)

enter image description here

除了文档中包含的教程之外,还有没有人有很好的教程示例?

1 个答案:

答案 0 :(得分:0)

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

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

  2. 尝试使用min-max标准化来标准化您的输入数据,使用标准标准化{{1>标准化您的目标 }} 规范化。简而言之,这些标准化步骤可确保您的数据与这些 GPR 模型的默认先验一致。有关这方面的更多信息,请查看 this GitHub issue

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

  4. 如果您发现数值精度有任何问题(特别是在规范化之后,如果您选择使用它),请尝试通过将 Torch 张量转换为双精度张量来将模型和数据集更改为双倍 64 位精度N(0,1)

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

Here are some tutorials I've put together as well