我按照Edward's repoR = U'V
中的示例实现了一个概率矩阵分解模型 ( ) :
# data
U_true = np.random.randn(D, N)
V_true = np.random.randn(D, M)
R_true = np.dot(np.transpose(U_true), V_true) + np.random.normal(0, 0.1, size=(N, M))
# model
I = tf.placeholder(tf.float32, [N, M])
U = Normal(loc=tf.zeros([D, N]), scale=tf.ones([D, N]))
V = Normal(loc=tf.zeros([D, M]), scale=tf.ones([D, M]))
R = Normal(loc=tf.matmul(tf.transpose(U), V), scale=tf.ones([N, M]))
在预测矩阵中的数据时,我得到了很好的表现R
。但是,当我评估 和 中的推断特征时U
,V
误差变化很大并且可能会变得非常高。
我尝试使用小维度(例如 2)的潜在空间并检查潜在特征是否不是简单地排列。它们有时会被置换,但即使在重新对齐它们之后,错误仍然很重要。
抛出一些数字:对于从正态分布(均值 0 和方差 1)生成的合成矩阵,我可以实现 0.003 的平均绝对误差,R
但通常在0.5 左右。U
V
R
U
V
我知道这个模型是对称的,但我不确定它的含义。我想问一下:
- 是否真的有可能以某种方式保证原始潜在特征的恢复?
- 如果是这样,如何实现,最好使用 Edward?