Gpflow 关于贝叶斯GP-LVM实现细节的问题
我想了解Bayesian GPLVM实现在GPflow中是如何工作的,但我正在为几行代码而挣扎。如果您能在以下问题上给予我帮助,我将不胜感激:Gpflow 关于贝叶斯GP-LVM实现细节的问题,gpflow,gaussian-process,Gpflow,Gaussian Process,我想了解Bayesian GPLVM实现在GPflow中是如何工作的,但我正在为几行代码而挣扎。如果您能在以下问题上给予我帮助,我将不胜感激: 我了解到,第178行中的矩阵B: B=AAT+tf.eye(num\u,dtype=default\u float()) 对应于的等式14中的$\beta\Psi_2+K{MM}$。但是,我不明白代码是如何实现这个表达式的 关于上一个问题,我无法理解第175-181行中A、tmp、AAT和c的含义 我猜代码使用的是矩阵求逆引理,但我看不出是如何实现的 在
B=AAT+tf.eye(num\u,dtype=default\u float())
对应于的等式14中的$\beta\Psi_2+K{MM}$。但是,我不明白代码是如何实现这个表达式的
- 0.5\beta^2 y\u d^T\Psi_1(\beta\Psi_2+K_{MM})^{-1}\Psi_1^T y\d(该公式出现在等式14下方的W表达式中)
- 0.5dβTr(K{MM}^{-1}\Psi\u2)
- 0.5d\log | K{MM}|
诚恳地说,Joaquin计算elbo gplvm.py的代码非常优雅高效。如果有人想理解,我会在下面回答我之前的问题,并进一步发帖
- 0.5\beta^2 y\u d^T\Psi\u 1(\beta\Psi\u 2+K\u{MM})^{-1}\Psi\u 1^T y\d
- 0.5dβTr(K{MM}^{-1}\Psi\u2)
- 0.5d\log | K{MM}|
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