我设法使用双极模式向量训练具有120个可拆单元(模式大小)和60个隐藏单元(完全连接)的Boltzmann机器。阅读Hinton说,我设法按照Matlab培训这样一个网络的步骤。在正确的阶段,我将每个模式夹在可变单元上,让每次隐藏单元以随机配置自由更新。选择每个单元通过吉布斯采样进行更新 - 随机并通过Sigmoid函数随机更新它们,其中参数为降温(T),其灵感来自模拟退火算法。如果我让这个过程重复多次,我能够收集训练模式的概率分布,先测量P(h | v)并稍后计算P(v)。这些概率项是每次(在热平衡时)网络稳定的能量的比例。最后,我正在收集所谓的“唤醒”阶段的统计数据,保持固定状态(每种模式下单位的热平衡配置)。我不知道为什么Hinton在这里说P(v,h),我认为它是P(h | v),因为可裂缝单元被夹紧,并且隐藏物可以相对于固定的可变单元自由更新。
接下来,我正在为网络的“梦想”阶段做同样的步骤,在所有单元中使用随机配置对其进行初始化,然后让自己稳定下来,随机随机更新所有单元。在这个阶段,我正在测量所有可能配置的概率p(v,h)。我再一次收集自由状态(每种模式下单位的热平衡配置)。
最后,我通过Kullback距离比较分布(在模式上和在模型上),然后在i上更新权重,减去固定状态和自由状态,表示每个阶段的配置的核心。事实证明,相对于权重最大化模式概率的偏导数是我所说的差异。
我的原始数据如下:
最大限度地发挥可分裂模式的分布并尝试在“梦想阶段”“创造”相同的分布,我最终得到了这些分配。正如您所看到的,所有模式在模式分布和模型内部分布中具有相同的概率。
Kullback距离,它是分布差异的度量,最终值为0.0000014049,非常好。最后,隐藏单元的权重对所有可变单元的权重进行了调整,并最终实现了这些实现:
正如您所看到的,隐藏层的一些权重学习了所有模式,而另一些则学习了不同的模式。因此,如果以上所有都是正确的,我可以用哪种方式测试boltzmann机器。例如,在通过hebbian规则初始化权重之后的确定性Hopfield网中,我只输入一个噪声模式(已损坏)并让网络稳定到它能够代表原始模式的最低能量(如果我们足够幸运并且没有被困住)在当地最低)。那么BM的测试过程是什么?我认为网络必须以相同的概率重建每个模式,如果我让它在没有外部输入的情况下再次自由运行,但这种情况不会发生..