我的问题是美国航班数据集中 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 与迭代
训练 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
完整代码通过链接显示。