我想了解贝叶斯 GPLVM 实现在 GPflow 中是如何工作的,但我正在努力处理几行代码。我将不胜感激任何帮助我解决以下问题:
- 我了解gplvm.py第 178 行中的矩阵 B :
B = AAT + tf.eye(num_inducing, dtype=default_float())
对应于方程式中的 $\beta\Psi_2 + K_{MM}$。14 Titsias 和劳伦斯 2010 年。但是,我不明白代码是如何实现这个表达式的。
- 与上一个问题相关,我无法理解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 和 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}|
我将不胜感激任何提示。
真诚地,华金