【问题标题】:Deep autoencoder using RBM使用 RBM 的深度自动编码器
【发布时间】:2013-12-30 07:36:57
【问题描述】:

我正在使用 RBM 实现深度自动编码器。我知道,为了展开网络,我们需要将编码器的转置权重用于解码器。但我不确定我们应该为解码器使用哪些偏差。如果有人可以为我详细说明或向我发送伪代码链接,我将不胜感激。

【问题讨论】:

    标签: machine-learning neural-network unsupervised-learning rbm


    【解决方案1】:

    我相信 Geoff Hinton 在his website 上提供了他所有的源代码。他是这种技术的 RBM 版本的首选人。

    基本上,如果您有一个尺寸为 10000 x 100 的输入矩阵 M1,其中 10000 是您拥有的样本数,而 100 是特征数,并且您想将其转换为 50 维空间,您将训练一个受限的 Boltzman 机器权重矩阵的维度为 101 x 50,额外的行是始终打开的偏置单元。在解码方面,您将使用 101 x 50 矩阵,从偏置中删除额外的行,使其成为 100 x 50 矩阵,将其转置为 50 x 100,然后为偏置单元添加另一行,使其成为 51 x 100。然后你可以通过反向传播运行整个网络来训练整个网络的权重。

    【讨论】:

    • 谢谢,你的例子让我明白了。所以我的展开代码应该是正确的:
      for i = 1 : no_layers
      nn.W{i} = [dbn.rbm{i}.c dbn.rbm{i}.W]; nn.W{2 * no_layers - i + 1}=[dbn.rbm{i}.b dbn.rbm{i}.W'];
      end
      可能我的代码中应该还有一些其他的问题,因为我从预训练得到的错误非常低,但在微调时错误却相当高。模型欠拟合!反向传播误差相对较高,逐渐减小但停留在局部最小值。你有什么建议可能是什么问题?
    • 我无法查看您的代码在做什么。您能否发布带有反向传播的整个训练代码,以便我看得更清楚?
    • 顺便说一句,c 是隐藏偏差,b 是可见偏差。
    • 你能给我你的电子邮件地址吗,这是一个巨大的代码。tnx
    最近更新 更多