2

我的问题是美国航班数据集中 SVIGP 的优化问题。我为 Hensman 2014 中提到的美国飞行数据实现了 SVGP 模型,使用诱导点数 = 100,batch_size = 1000,学习率 = 1e-5 和 maxiter = 500。

结果很奇怪,结束 ELBO 并没有增加,而且无论我如何调整学习率,它都有很大的差异

初始化

M = 100
D = 8
def init():
    kern = gpflow.kernels.RBF(D, 1, ARD=True)
    Z = X_train[:M, :].copy()
    m = gpflow.models.SVGP(X_train, Y_train.reshape([-1,1]), kern, gpflow.likelihoods.Gaussian(), Z, minibatch_size=1000)
    return m
m = init()

推理

m.feature.trainable = True
opt = gpflow.train.AdamOptimizer(learning_rate = 0.00001)
m.compile()
opt.minimize(m, step_callback=logger, maxiter = 500)
plt.plot(logf)
plt.xlabel('iteration')
plt.ylabel('ELBO')

结果:</h1>

结果

添加结果

一旦我添加更多迭代并使用大学习率。很高兴看到 ELBO 随着迭代次数的增加而增加。但令人困惑的是,训练和测试数据的均方根误差(均方根误差)也都增加了。你有什么建议吗?图及代码如下:

ELBO 与迭代

ELBO 与迭代

训练 RMSE 与迭代

训练 RMSE 与迭代

测试 RMSE 与迭代

测试 RMSE 与迭代

使用记录器

def logger(x):
    print(m.compute_log_likelihood())
    logx.append(x)
    logf.append(m.compute_log_likelihood())
    logt.append(time.time() - st)
    py_train = m.predict_y(X_train)[0]
    py_test = m.predict_y(X_test)[0]
    rmse_hist.append(np.sqrt(np.mean((Y_train - py_train)**2)))
    rmse_test_hist.append(np.sqrt(np.mean((Y_test - py_test)**2)))
    logger.i+=1
logger.i = 1

完整代码通过链接显示。

4

0 回答 0