SVGP 和 SGPMC 实现之间的区别
Difference between SVGP and SGPMC implementation
就 SGPMC 论文[1] 而言,预训练应该与 SVGP 几乎相同。
但是,实现(当前开发版本)有点不同,由于调度编程风格,我在理解所有内容时遇到了一些问题(尤其是 q_sqrt=None
的条件发生了什么)。
我看得对吗,区别在于 q_mu
/q_var
现在由 self.V
正态分布表示?唯一的其他变化是默认情况下会启用美白,因为它是采样所必需的?
奇怪的是,SPGMC 的随机优化(还没有任何采样)似乎在我的特定数据上比 SVGP class 效果好得多,这让我有点困惑,因为它应该基本一样。
[1]亨斯曼、詹姆斯等人。 "MCMC for variationally sparse Gaussian processes." 神经信息处理系统的进展。 2015.
编辑2:
在当前的开发分支中,我看到 (negative) training_objective 基本上包括:
VariationalExp + self.log_prior_density()
,
而 SVGP ELBO 将是 VariationalExp - KL(q(u)|p(u))
.
self.log_prior_density()
显然添加了所有先验密度。
所以训练objective看起来像SGPMC论文的等式(7)(白化最优变分分布)。
所以通过优化后验的最优变分逼近p(f*,f, u, θ | y)
,我们将得到诱导点的MAP估计?
你的问题有几个要素,我会尝试分别解决它们:
SVGP 与 SGPMC objective:
在 SVGP 中,我们通过将其定义为具有均值 q_mu
和协方差 q_sqrt @ q_sqrt.T
的正态(高斯)分布来参数化封闭形式的后验分布 q(u)。在 SGPMC 中,分布 q(u) 由样本隐式表示 - V
一次保存一个样本。在 SVGP 中,ELBO 有一个 KL 项,它将 q_mu 和 q_sqrt 拉向 q(u) = p(u) = N(0, Kuu)(带有白化,q_mu 和 q_sqrt 参数化 q(v),KL 项将它们推向 q(v) = p(v) = N(0, I) 和 u = chol(Kuu) v)。在 SGPMC 中,相同的效果来自 MCMC 采样中 V 的先验。这在使用随机优化器进行 MAP 优化时仍然会反映出来,但与 KL 项不同。对于 SVGP 模型,您可以将 q_sqrt 设置为零且不可训练,但它们的 objective 仍然略有不同。 SGPMC 模型中的随机优化可能会给您更好的数据拟合,但这不是变分优化,因此您可能会过度拟合您的训练数据。
training_loss
:
对于所有 GPflow 模型,model.training_loss
包括 log_prior_density
。 (默认情况下,SVGP 模型参数没有设置任何先验。)SGPMC training_loss() 对应于方程的负数。 (7) 在SGPMC论文[1].
诱导点数:
默认情况下,诱导点 Z 没有先验,因此它只是最大似然。请注意,[1] 建议在 SGPMC 模型中保持 Z 固定(并将其基于先前拟合的 SVGP 模型中的优化位置)。
在 conditional()
和 q_sqrt=None
中发生了什么:
conditional()
计算给定 u 分布的 f(Xnew) 的后验分布;这处理了 (S)VGP 中使用的两种情况,其中我们有一个变分 分布 q(u) = N(q_mu, q_sqrt q_sqrt^T),以及 (S)GPMC 中使用的 "u is known" 的无噪声情况。 q_sqrt=None
等同于说 "the variance is zero",就像均值上的增量尖峰,但节省了计算量。
就 SGPMC 论文[1] 而言,预训练应该与 SVGP 几乎相同。
但是,实现(当前开发版本)有点不同,由于调度编程风格,我在理解所有内容时遇到了一些问题(尤其是 q_sqrt=None
的条件发生了什么)。
我看得对吗,区别在于 q_mu
/q_var
现在由 self.V
正态分布表示?唯一的其他变化是默认情况下会启用美白,因为它是采样所必需的?
奇怪的是,SPGMC 的随机优化(还没有任何采样)似乎在我的特定数据上比 SVGP class 效果好得多,这让我有点困惑,因为它应该基本一样。
[1]亨斯曼、詹姆斯等人。 "MCMC for variationally sparse Gaussian processes." 神经信息处理系统的进展。 2015.
编辑2:
在当前的开发分支中,我看到 (negative) training_objective 基本上包括:
VariationalExp + self.log_prior_density()
,
而 SVGP ELBO 将是 VariationalExp - KL(q(u)|p(u))
.
self.log_prior_density()
显然添加了所有先验密度。
所以训练objective看起来像SGPMC论文的等式(7)(白化最优变分分布)。
所以通过优化后验的最优变分逼近p(f*,f, u, θ | y)
,我们将得到诱导点的MAP估计?
你的问题有几个要素,我会尝试分别解决它们:
SVGP 与 SGPMC objective:
在 SVGP 中,我们通过将其定义为具有均值 q_mu
和协方差 q_sqrt @ q_sqrt.T
的正态(高斯)分布来参数化封闭形式的后验分布 q(u)。在 SGPMC 中,分布 q(u) 由样本隐式表示 - V
一次保存一个样本。在 SVGP 中,ELBO 有一个 KL 项,它将 q_mu 和 q_sqrt 拉向 q(u) = p(u) = N(0, Kuu)(带有白化,q_mu 和 q_sqrt 参数化 q(v),KL 项将它们推向 q(v) = p(v) = N(0, I) 和 u = chol(Kuu) v)。在 SGPMC 中,相同的效果来自 MCMC 采样中 V 的先验。这在使用随机优化器进行 MAP 优化时仍然会反映出来,但与 KL 项不同。对于 SVGP 模型,您可以将 q_sqrt 设置为零且不可训练,但它们的 objective 仍然略有不同。 SGPMC 模型中的随机优化可能会给您更好的数据拟合,但这不是变分优化,因此您可能会过度拟合您的训练数据。
training_loss
:
对于所有 GPflow 模型,model.training_loss
包括 log_prior_density
。 (默认情况下,SVGP 模型参数没有设置任何先验。)SGPMC training_loss() 对应于方程的负数。 (7) 在SGPMC论文[1].
诱导点数: 默认情况下,诱导点 Z 没有先验,因此它只是最大似然。请注意,[1] 建议在 SGPMC 模型中保持 Z 固定(并将其基于先前拟合的 SVGP 模型中的优化位置)。
在 conditional()
和 q_sqrt=None
中发生了什么:
conditional()
计算给定 u 分布的 f(Xnew) 的后验分布;这处理了 (S)VGP 中使用的两种情况,其中我们有一个变分 分布 q(u) = N(q_mu, q_sqrt q_sqrt^T),以及 (S)GPMC 中使用的 "u is known" 的无噪声情况。 q_sqrt=None
等同于说 "the variance is zero",就像均值上的增量尖峰,但节省了计算量。