# 受限玻尔兹曼机 (RBM) 中的迭代次数

数据挖掘 机器学习 神经网络 深度学习 无监督学习 RBM
2022-03-01 17:54:28

我有一个训练集,我将它(考虑来自训练集的数据)提供给可见层。然后遵循正常的过程,即正阶段->负阶段->权重重构,发生偏差单元。它会在这里结束还是我必须再次使用当前的可见单位值进行迭代(该过程遵循几个固定的迭代)?因为在任何地方都没有正确说明是否针对训练集的每个数据,它必须一次又一次地迭代或针对训练集的每个数据。

1个回答

当您不确定应该如何真正实现某些东西(例如 RBM)时,查看其他人的代码通常很有用。G. Hinton 自己发布了一个 MATLAB 脚本(此处),它演示了 RBM 的训练。在那里,您可以看到对于每个小批量,他执行正阶段,然后是负阶段,最后更新权重 - 就是这样。所以他不会在可见状态和隐藏状态之间迭代。

然而,这并不是全部真相:对于权重更新,我们需要知道概率p(v,h). 这计算起来非常复杂,因为它将包含 RBM 所有可能状态的总和。有一个叫做 Gibbs 采样的“数学技巧”:它允许我们在可见和隐藏单元之间来回迭代来计算这个概率p(v,h).

但是:为了使结果正确,我们必须永远迭代,这并不实际。所以 Hinton 提议的是只迭代 1 步(这是CD1),所以他只来回一次。

但是,您也可以迭代任意次数k,表示为CDk. 而对于 Hinton 的CD1,你会做

visible --> hidden --> visible

为一个CD3,您将从可见到隐藏再返回三次:

visible --> hidden --> visible --> hidden --> visible --> hidden --> visible

并且要明确一点:您对训练集中的每个数据点运行此迭代。实际上,您通常会同时运行大约 10 个数据点的所谓小批量。然后你计算这个批次的平均重量更新。但是,你会一次又一次地重复这个迭代,直到你完成训练。