【发布时间】:2021-06-08 20:58:47
【问题描述】:
我想了解贝叶斯 GPLVM 实现在 GPflow 中是如何工作的,但我正在为几行代码而苦恼。对于以下问题,我将不胜感激:
- 我了解gplvm.py的第178行中的矩阵B:
B = AAT + tf.eye(num_inducing, dtype=default_float())
对应于方程式中的 $\beta\Psi_2 + K_{MM}$。 Titsias and Lawrence 2010 中的 14 个。但是,我不明白代码是如何实现这个表达式的。
- 关于上一个问题,我无法理解gplvm.py的第175-181行中的A、tmp、AAT和c是什么意思?
A = tf.linalg.triangular_solve(L, tf.transpose(psi1), lower=True) / sigma
tmp = tf.linalg.triangular_solve(L, psi2, lower=True)
AAT = tf.linalg.triangular_solve(L, tf.transpose(tmp), lower=True) / sigma2
B = AAT + tf.eye(num_inducing, dtype=default_float())
LB = tf.linalg.cholesky(B)
log_det_B = 2.0 * tf.reduce_sum(tf.math.log(tf.linalg.diag_part(LB)))
c = tf.linalg.triangular_solve(LB, tf.linalg.matmul(A, Y_data), lower=True) / sigma
我猜代码使用的是矩阵求逆引理,但我看不出怎么用。
-
在等式中。 14 来自Titsias and Lawrence 2010,有三个术语我无法理解它们在gplvm.py 中是如何计算的:
- 0.5 \beta^2 y_d^T \Psi_1 (\beta\Psi_2+K_{MM})^{-1} \Psi_1^T y_d(这个公式出现在公式14下面的W表达式中)李>
- 0.5 D \beta Tr(K_{MM}^{-1} \Psi_2)
- 0.5 D \log |K_{MM}|
如果有任何提示,我将不胜感激。
此致,华金
【问题讨论】: