gpt4 book ai didi

c++ - 如何找到 RBM 无法正常工作的原因?

转载 作者:搜寻专家 更新时间:2023-10-31 01:46:00 24 4
gpt4 key购买 nike

我正在尝试实现 RBM 并在 MNIST 数据集上对其进行测试。然而,它似乎并没有收敛。

我有 28x28 个可见单元和 100 个隐藏单元。我正在使用大小为 50 的小批量。对于每个时期,我遍历整个数据集。我的学习率为 0.01,动量为 0.5。权重是根据均值 0.0 和标准差 0.01 的高斯分布随机生成的。可见偏差和隐藏偏差被初始化为 0。我使用 logistic sigmoid 函数作为激活函数。

在每个 epoch 之后,我计算所有 mini-batches 的平均重建误差,这是我得到的误差:

epoch 0: Reconstruction error average: 0.0481795
epoch 1: Reconstruction error average: 0.0350295
epoch 2: Reconstruction error average: 0.0324191
epoch 3: Reconstruction error average: 0.0309714
epoch 4: Reconstruction error average: 0.0300068

我绘制了要检查的权重直方图(从左到右:隐藏值、权重、可见值。顶部:权重,底部:更新):

第 3 轮之后的权重直方图 Histogram of the weights after epoch 3 http://baptiste-wicht.com/static/finals/histogram_epoch_3.png

第 4 轮之后的权重直方图 Histogram of the weights after epoch 4 http://baptiste-wicht.com/static/finals/histogram_epoch_4.png

但是,除了隐藏的偏见看起来有点奇怪,其余的似乎还可以。

我还尝试绘制隐藏的权重:

第 3 轮之后的权重

Weights after epoch 3 http://baptiste-wicht.com/static/finals/hiddens_weights_epoch_3.png

第 4 轮之后的权重

Weights after epoch 4 http://baptiste-wicht.com/static/finals/hiddens_weights_epoch_4.png

(使用该函数将它们绘制成两种颜色:

static_cast<size_t>(value > 0 ? (static_cast<size_t>(value * 255.0) << 8) : (static_cast<size_t>(-value * 255.)0) << 16) << " ";

)

在这里,它们根本没有意义......

如果我走得更远,重建误差会下降一点,但不要超过 0.025。即使我在一段时间后改变了势头,它也会走高然后下降一点但并不有趣。此外,在更多的时代之后,权重并没有变得更有意义。在我见过的大多数示例实现中,权重在遍历整个数据集两到三次后才有意义。

我也曾尝试从可见单位重建图像,但结果似乎几乎是随机的。

我可以做些什么来检查我的实现中出了什么问题?权重应该在某个范围内吗?数据中有什么看起来真的很奇怪吗?

完整代码:https://github.com/wichtounet/dbn/blob/master/include/rbm.hpp

最佳答案

您使用的学习率非常小。在大多数由 SGD 训练的 NN 中,您以较高的学习率开始并随着时间的推移而衰减。搜索学习率或自适应学习率以找到更多相关信息。

其次,在实现新算法时,我会建议找到介绍它的论文并重现其结果。一篇好的论文应该包括大部分使用的设置 - 或者用于确定设置的方法。

如果一篇论文不可用,或者它是在您无权访问的数据集上测试的 - 去寻找一个有效的实现并比较使用相同设置时的输出。如果实现的功能不兼容,请尽可能多地关闭不共享的功能。

关于c++ - 如何找到 RBM 无法正常工作的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21285910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com