我的问题是美国飞行数据集中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')
一旦我添加了更多的迭代并使用了较大的学习率。很高兴看到ELBO随着迭代次数的增加而增加。但是,非常令人困惑的是,用于训练和测试数据的均方根误差(RMSE)也都增加了。你有什么建议吗? 图形和代码如下所示:
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
完整的代码通过link显示。