10

我希望我的受限玻尔兹曼机学习实值数据的新表示(参见: Hinton - 2010 - A Practical Guide to Training RBMs)。我正在努力实现高斯线性单元。

随着可见层中的高斯线性单元,能量变为E(v,h)= ∑ (v-a)²/2σ - ∑ bh - ∑v/σ h w。现在我不知道如何改变对比发散学习算法。可见单位将不再被采样,因为它们是线性的。我使用期望(平均激活)p(v_i=1|h)= a +∑hw + N(0,1)作为他们的状态。关联保持不变( pos: data*p(h=1|v)'neg: p(v=1|h)*p(h=1|v)')。但这只会在我想重建数据时导致随机噪声。错误率将在 50% 左右停止改善。

最后我想在两层都使用高斯线性单元。那么我将如何获得隐藏单元的状态呢?我建议使用平均场激活p(h_i=1|v)= b +∑vw + N(0,1),但我不确定。

4

2 回答 2

3

你可以看看 Hinton 自己提供的高斯 RBM 请在这里找到。 http://www.cs.toronto.edu/~hinton/code/rbmhidlinear.m

于 2013-10-18T09:38:32.937 回答
1

我一直在从事一个类似的项目,使用 c++ 和 matlab mexfunction 实现 RBM。我从 Hinton 教授(在 matlab 中)的实现中发现,可见单元的二进制激活使用 simoid 函数。即:vs = sigmoid(bsxfun(@plus, hs*obj.W2', obj.b)); 但是在实现高斯可见单位 RBM 时,您只需对可见单位进行采样而不使用 simoid。即:vs = bsxfun(@plus, h0*obj.W2', obj.b); 或者更好地看一下 Hinton 教授的实现(参见:http ://www.cs.toronto.edu/~hinton/code/rbmhidlinear.m )

于 2015-12-01T10:00:09.957 回答