能量模型

RBM用到了能量模型。

简单的概括一下能量模型。假设一个孤立系统(总能量$E$一定,粒子个数$N$一定),温度恒定为1,每个粒子有$m$个可能的状态,每个状态对应一个能量$e_i$。那么,在这个系统中随机选出一个粒子,这个粒子处在状态$k$的概率,或者说具有状态$k$的粒子所占的比例为:

$$p(state=k)=\frac{e^{-e_k}}{Z}$$

其中$Z=\sum e^{-e_i}$称为配分函数。

扩展开来,在一个正则系综中,系统$i$处在状态$S_i$的概率为:

$$P(state=i)=\frac{e^{-E_i}}{\sum e^{-E_i}}$$

当这个系统有个宏观的状态,对应的宏观测量值为$Q$,状态是微观状态的集合$S_Q=\{s_1,s_4,...\}$,则该宏观状态出现的概率为

$$P(S_Q)=\frac{\sum_{k\in S_Q} e^{-e_k}}{Z}$$

比照粒子,我们定义一个宏观状态对应的能量为$E_Q$,改写上式为

$$P(S_Q)=\frac{e^{-E_Q}}{Z}~~where~~Z=\sum_Q e^{-E_Q}$$

与微观态的关系为

$$E_Q=-ln\sum_{k\in S_Q} e^{-e_k}$$

受限玻尔兹曼机

受限玻尔兹曼机是这么一个系统,系统结构为一个二分网络。一种节点类型为可视节点,另一种为隐含节点,所有节点都为二值节点(0,1)。如下图。

定义该系统的能量为

$$E=-(\sum a_iv_i+\sum w_{i,j}v_i h_j+\sum b_ih_j)~~where~~w_{i,j}=w_{j,i} ~~~~~~~~~(1)$$

即系统能量为各节点能量与耦合能量(边能量)之和。系统处在状态${V,H}$的概率为:

$$P(V,H)=\frac{e^{-E(V,H)}}{\sum_{V,H} e^{-E(V,H)}}=\frac{e^{-E(V,H)}}{Z}$$

$Z$为配分函数。

可视层节点处在状态$x$的概率为:

$$P(V=x)=\frac{\sum _He^{-E(x,H)}}{Z} \equiv \frac{e^{-E_x}}{\sum e^{-E_x}}~~~~~~~~~~(2)$$

其中

$$E_x=-ln(\sum _He^{-E(x,H)})~~~~~~(3)$$

由于同一类节点是不相连的,因此同类节点之间相互独立,因此每个隐含层节点以及与它相连的边组成的一个小系统是一个独立系统。当可视层状态给定为$x$时,该小系统只有两个状态(隐含节点为0或者1),或者说具有两个能阶。

$$-E(h_i;x)=b_ih_i+\sum w_ix_ih_i=(b_i+\sum w_ix_i)h_i=B_ih_i~~where~~B_i=b_i+\sum w_ix_i$$

因此

$$E(h_i=0;x)=0,E(h_i=1;x)=-B_i$$

$$P(h_i=1;x)=\frac{e^{B_i}}{e^0+e^{B_i}}=sigmoid(B_i)$$

我们重写公式(1)的系统能量表示

$$E(x,h)=-(\sum a_iv_i+\sum B_jh_j)=-(A^Tx+B^Th)~~~(4)$$

并且得出

$$E_x=-ln(e^{A^Tx}\sum_h \prod_j e^{B_j h_j})=-A^Tx- ln\sum_h \prod_j e^{B_j h_j}=-A^Tx-ln \prod_j \sum_h e^{B_j h_j}=-A^Tx-\sum_j ln \sum_{h_j \in \{0,1\}} e^{B_j h_j}=-A^Tx-\sum_j ln(1+e^{B_j})$$

为了计算方便,我们要优化的目标函数是

$$J=-ln P(x)=E_x+ln Z$$

对某一参数 $\theta$,我们得出

$$\frac{\partial J}{\partial \theta}=\frac{\partial E_x}{\partial \theta}-\sum_v P(v)\frac{\partial E_v}{\partial \theta}$$

参考文献

http://en.wikipedia.org/wiki/Restricted_Boltzmann_machine

http://deeplearning.net/tutorial/rbm.html

受限玻尔兹曼机(RBM)的更多相关文章

  1. 基于受限玻尔兹曼机(RBM)的协同过滤

    受限玻尔兹曼机是一种生成式随机神经网络(generative stochastic neural network), 详细介绍可见我的博文<受限玻尔兹曼机(RBM)简介>, 本文主要介绍R ...

  2. 深度学习方法:受限玻尔兹曼机RBM(一)基本概念

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

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

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

  4. 深度学习方法:受限玻尔兹曼机RBM(三)模型求解,Gibbs sampling

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 接下来重点讲一下RBM模型求解 ...

  5. 深度学习方法:受限玻尔兹曼机RBM(二)网络模型

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入 上解上一篇RBM(一)基本概念, ...

  6. 受限玻尔兹曼机RBM

    相关算法 python代码参考http://blog.csdn.net/zc02051126/article/details/9668439#(作少量修改与注释) #coding:utf8 impor ...

  7. 受限玻尔兹曼机RBM—简易详解

  8. 受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)

    这篇写的主要是翻译网上一篇关于受限玻尔兹曼机的tutorial,看了那篇博文之后感觉算法方面讲的很清楚,自己收获很大,这里写下来作为学习之用. 原文网址为:http://imonad.com/rbm/ ...

  9. 受限玻尔兹曼机(RBM)原理总结

    在前面我们讲到了深度学习的两类神经网络模型的原理,第一类是前向的神经网络,即DNN和CNN.第二类是有反馈的神经网络,即RNN和LSTM.今天我们就总结下深度学习里的第三类神经网络模型:玻尔兹曼机.主 ...

随机推荐

  1. 注意android裁图的Intent action

    现在很多开发者在裁图的时候还是使用com.android.camera.action.CROP 来调用 startActivity(). 这不是个好主意. 任何不是依android开头的Action ...

  2. LINUX系统中动态链接库的创建与使用{补充}

    大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部 ...

  3. Linux学习笔记9——make和Makefile

    一,Makefile的文件名 默认的情况下,make命令会在当前目录下按顺序找寻文件名为“GNUmakefile”.“makefile”.“Makefile”的文件,大部分情况下,make命令都支持m ...

  4. Myeclipse在启动Tomcat服务器的时候总是进入debug视图的解决方法

    最近调试程序,由于出现过一些错误,在调试的时候,更改过一些东西,但是后来在myeclipse下启动Tomcat服务器的时候,自动的跳入到debug视图了(以前是一启动Tomcat服务器后,直接就加载t ...

  5. 排序Tip

    排序算法   所有排序算法汇总:http://en.wikipedia.org/wiki/Sort_algorithm counting sort 资料 :http://www.cs.miami.ed ...

  6. DB2 insert into 三种写法

    db2的insert into 支持三种格式,即:一次插入一行,一次插入多行和从SELECT语句中插入. 以表为例: create table “user" ( "name&quo ...

  7. MySQL可视化管理工具 —— Navicat for MysSQL

    类似PL/SQL管理Oracle的工具 Navicat可以管理MySQL 1.安装 2.连接(输入IP.端口.用户名.密码) 3.新建sql语句:点击左侧database.点击菜单“查询”.点击“新建 ...

  8. Java多线程实现简单的售票程序

    设计一个多线程程序如下:设计一个火车售票模拟程序.假如火车站要有100张火车票要卖出,现在有5个售票点同时售票,用5个线程模拟这5个售票点的售票情况 1.要求打印出每个售票点所卖出的票号 2.各售票点 ...

  9. 正则表达式中Pattern类、Matcher类和matches()方法简析

    1.简介:  java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.  它包括两个类:Pattern和Matcher . Pattern: 一个Pattern是一 ...

  10. List<Map<String,String>>操作(遍历,比较)

    1.List<Map<String,String>>的遍历: Map<String,String> map = new HashMap<String, Str ...