深度学习方法:受限玻尔兹曼机RBM(四)对比散度contrastive divergence,CD

欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld
技术交流QQ群:433250724,欢迎对算法、技术、应用感兴趣的同学加入

上篇讲到,如果用Gibbs Sampling方法来训练rbm会非常慢,本篇中介绍一下对比散度contrastive divergence, CD算法。

我们希望得到P(v)分布下的样本,而我们有训练样本,可以认为训练样本就是服从P(v)的。因此,就不需要从随机的状态开始gibbs采样,而从训练样本开始。

CD算法大概思路是这样的,从样本集任意一个样本v0开始,经过k次Gibbs采样(实际中k=1往往就足够了),即每一步是:

ht1P(h|vt1)vtP(v|ht1)

得到样本vk,然后对应于上一篇三个单样本的梯度,用vk去近似:

lnP(v)wijP(hi=1|v0)v0jP(hi=1|vk)vkjlnP(v)ai=v0ivkilnP(v)biP(hi=1|v0)P(hi=1|vk)

上述近似的含义是说,用一个采样出来的样本来近似期望的计算。到这里,我们就可以计算LS的梯度了,上面的CD-k算法是用于在一次梯度更新中计算梯度近似值的。下面给出CD-k的算法执行流程,这里小偷懒一下,就借用截图了[7]。

这里写图片描述

其中,sample_h_given_v(v,W,a,b),做的事情是这样的(sample_v_given_v(h,W,a,b)类似):
qj=P(hj|v),j=1,2,,nh,产生一个[0,1]的随机数rj,对每一个hj,如果rj<qj,则hj=1,否则hj=0

OK, 有了CD-k算法,我们也可以总结RMB整个算法了[7],

这里写图片描述

好,到这里基本讲完了,还有一些细节trick,是不在RBM本身范畴的,在实现的时候可以具体参考[2]。后面有时间再补一篇关于RBM代码的解读。

参考资料
[1] http://www.chawenti.com/articles/17243.html
[2] 张春霞,受限波尔兹曼机简介
[3] http://www.cnblogs.com/tornadomeet/archive/2013/03/27/2984725.html
[4] http://deeplearning.net/tutorial/rbm.html
[5] Asja Fischer, and Christian Igel,An Introduction to RBM
[6] G.Hinton, A Practical Guide to Training Restricted Boltzmann Machines
[7] http://blog.csdn.net/itplus/article/details/19168937
[8] G.Hinton, Training products of experts by minimizing contrastive divergence, 2002.
[9] Bengio, Learning Deep Architectures for AI, 2009

转载于:https://www.cnblogs.com/yihaha/p/7265315.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
深度受限玻尔兹曼机(Deep Belief Network, DBN)是一种用于特征融合的机器学习模型,它可以通过学习数据中的特征来进行模式识别和分类。在Python中,我们可以使用现有的库来实现深度受限玻尔兹曼机模型,比如使用TensorFlow或者PyTorch等深度学习框架。 首先,我们需要导入相应的库和模块,比如TensorFlow或者PyTorch。然后,我们需要准备数据集,并对数据进行预处理和特征提取。接下来,我们可以使用深度受限玻尔兹曼机模型来训练数据,并获取特征表示。最后,我们可以利用这些特征表示来进行分类或者其他机器学习任务。 下面是一个简单的使用Python实现深度受限玻尔兹曼机模型的示例: ```python import tensorflow as tf from tensorflow.keras import layers, models # 准备数据集 (train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data() train_images = train_images.reshape((60000, 28 * 28)).astype('float32') / 255 test_images = test_images.reshape((10000, 28 * 28)).astype('float32') / 255 # 构建深度受限玻尔兹曼机模型 model = models.Sequential([ layers.Dense(128, activation='relu', input_shape=(28 * 28,)), layers.Dense(64, activation='relu'), layers.Dense(10, activation='softmax') ]) # 编译模型 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # 训练模型 model.fit(train_images, train_labels, epochs=10) # 使用模型进行预测 test_loss, test_acc = model.evaluate(test_images, test_labels) print('Test accuracy:', test_acc) ``` 在这个示例中,我们使用TensorFlow来构建一个简单的深度受限玻尔兹曼机模型,并使用MNIST数据集进行训练和测试。通过这样的方式,我们可以利用深度受限玻尔兹曼机来进行特征融合和模式识别任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值