C++元编程——RBM实现

本文介绍了C++实现受限玻尔兹曼机(RBM)的原理和学习算法,包括网络能量概念、伯努利分布、梯度下降法及对比散度法(CD)。在实验实践中,通过CD更新方法训练RBM,发现在输入样本选择上的特定约束,以异或问题为例展示了正确性。
摘要由CSDN通过智能技术生成

原理解释

首先玻尔兹曼机的理论基础可以参考zsffuture老师的这片博客:

深度学习 --- 受限玻尔兹曼机详解(RBM)_rbm分类输出权重_zsffuture的博客-CSDN博客

我大概说一下主要思想。首先,我们通过启发式的方法设定了一个网络能量的概念。这个网络的能量我们定义为:

其中v为显层节点状态,W为连接权重,h为隐层的状态,a是显示层的偏移,b是隐藏层的偏移。为什么要这么定义呢?这个是启发式的,只能说这么定义后续处理起来会比较方便,特别是最后求期望的时候比较好。

v和h都服从伯努利分布,其分布概率为:

 

 下面是显示层在权重确定情况下的概率分布:

 

有了(2)式和(3)式自然可以求出h的条件分布概率:

其中的那个sita就是sigmoid函数啦(这个应该是被证明过的,姑且信之)。

 RBM学习算法

RBM学习的目标如下:

就是找到使得v概率最大的一个参数设置,实际意义就是在设置某个参数的情况下,显层状态在隐层的所有的情况下出现的概率是最大的。 RBM计划使用梯度下降法获得这个最优参数设置。所以下面就要对参数进行求导。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

腾昵猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值