关于贝叶斯GP-LVM实现细节的问题
Questions about Bayesian GP-LVM implementation details
我想了解贝叶斯 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
我猜代码正在使用矩阵求逆引理,但我看不出是如何使用的。
在等式中。 Titsias and Lawrence 2010 中的 14,有 3 个项我无法理解它们在 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}|
如有任何提示,我将不胜感激。
诚挚的,华金
计算 elbo gplvm.py 的代码非常优雅和高效。如果有人想了解它,我会在下面回复我之前的问题并进一步发布 notes。
- I understand that matrix B in line gplvm.py:182:
B = AAT + tf.eye(num_inducing, dtype=default_float())
corresponds to $\beta\Psi_2 + K_{MM}$ in Eq. 14 of Titsias and
Lawrence 2010. However, I don't understand how the the gplvm code
implements the expression in the paper.
方程式中的调用矩阵 $\beta\Psi_2 + K_{MM}$ Titsias 和 Lawrence 2010 的 14(即 TL10)作为 D。在 gplvm.py 中,该矩阵计算为 D=LBL,其中 B 是上面给出的矩阵(即 B=AAT+I),L 是 Choleskly 因子K_{MM}.
- Related to the previous question, I cannot understand what A, tmp, AAT and c mean in the code?
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
I am guessing the code is using the matrix inversion lemma, but I cannot see how.
代码没有使用矩阵求逆引理。
等式中的数据项。 TL10 的 14,(即指数中的项)是通过对向量 c.
的 norm2 的平方进行计算的
AAT 是出现在 TL10 中 Eq.~14 中最后一项的迹内的矩阵(即 $K_{MM}^{-1)\Psi_2)$)。
- In Eq. 14 from Titsias and Lawrence, 2010, there are three terms that I cannot understand how they are calculated: >
0.5 \beta^2 y_d^T \Psi_1 (\beta\Psi_2+K_{MM})^{-1} \Psi_1^T y_d
0.5 D \beta Tr(K_{MM}^{-1} \Psi_2)
0.5 D \log |K_{MM}|
如上所述,第一项是通过向量c的norm2的平方计算得到的,第二项是通过AAT的迹计算得到的。方程式中两个对数行列式的减法。 TL10 的 14(和第三项)是通过对数 |B| 计算的。
一段漂亮的代码。谢谢
我想了解贝叶斯 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
我猜代码正在使用矩阵求逆引理,但我看不出是如何使用的。
在等式中。 Titsias and Lawrence 2010 中的 14,有 3 个项我无法理解它们在 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}|
如有任何提示,我将不胜感激。
诚挚的,华金
计算 elbo gplvm.py 的代码非常优雅和高效。如果有人想了解它,我会在下面回复我之前的问题并进一步发布 notes。
- I understand that matrix B in line gplvm.py:182:
B = AAT + tf.eye(num_inducing, dtype=default_float())
corresponds to $\beta\Psi_2 + K_{MM}$ in Eq. 14 of Titsias and Lawrence 2010. However, I don't understand how the the gplvm code implements the expression in the paper.
方程式中的调用矩阵 $\beta\Psi_2 + K_{MM}$ Titsias 和 Lawrence 2010 的 14(即 TL10)作为 D。在 gplvm.py 中,该矩阵计算为 D=LBL,其中 B 是上面给出的矩阵(即 B=AAT+I),L 是 Choleskly 因子K_{MM}.
- Related to the previous question, I cannot understand what A, tmp, AAT and c mean in the code?
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
I am guessing the code is using the matrix inversion lemma, but I cannot see how.
代码没有使用矩阵求逆引理。
等式中的数据项。 TL10 的 14,(即指数中的项)是通过对向量 c.
的 norm2 的平方进行计算的AAT 是出现在 TL10 中 Eq.~14 中最后一项的迹内的矩阵(即 $K_{MM}^{-1)\Psi_2)$)。
- In Eq. 14 from Titsias and Lawrence, 2010, there are three terms that I cannot understand how they are calculated: >
0.5 \beta^2 y_d^T \Psi_1 (\beta\Psi_2+K_{MM})^{-1} \Psi_1^T y_d
0.5 D \beta Tr(K_{MM}^{-1} \Psi_2)
0.5 D \log |K_{MM}|
如上所述,第一项是通过向量c的norm2的平方计算得到的,第二项是通过AAT的迹计算得到的。方程式中两个对数行列式的减法。 TL10 的 14(和第三项)是通过对数 |B| 计算的。
一段漂亮的代码。谢谢