我希望我的Restricted Boltzmann Machine能够学习实值数据的新表示(参见:Hinton - 2010 - A Practical Guide to Training RBMs)。我正在努力实现高斯线性单位。
在可见层中使用高斯线性单位时,能量变为E(v,h)= ∑ (v-a)²/2σ - ∑ bh - ∑v/σ h w
。现在我不知道如何改变对比发散学习算法。可见单位不再被采样,因为它们是线性的。我使用期望(mean-fied activation)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)
,但我不确定。
答案 0 :(得分:3)
你可以看看Hinton自己提供的高斯RBM 请在这里找到它。 http://www.cs.toronto.edu/~hinton/code/rbmhidlinear.m
答案 1 :(得分: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)