在这个例子中,我有一个带有可见层和隐藏层的 RBM。原始数据为“data”,隐藏神经元的值为“hid”,从“hid”计算的可见神经元的值为“vis”,然后从“vis”计算的隐藏神经元的值为“隐藏2”。
我通过以下方式计算positive_association和negative_association:
pos_associations = T.dot(data.T, hid)
neg_associations = T.dot(vis.T, hid2)
其中 T.dot 表示通常的矩阵计算。然后我使用对比散度 (CD) 更新权重
w = w + (training_rate)*(pos_associations - neg_associations)
就像这篇文章中描述的那样
我确实得到了很好的重建(vis 看起来像数据),我可以看到代表权重的特征。然而,这需要一段时间和许多时代。
如果我不使用 CD 而不是简单地计算 data 和 vis 之间的二次差
cost = T.sum((data - vis)**2).mean()
我使用成本梯度更新权重,我得到了更快的数据近似值。所以我的问题是,使用 CD 有什么好处?