代码改变世界

Boltzmann machine

2013-03-14 17:16  ggzwtj  阅读(5329)  评论(0编辑  收藏  举报

  工欲善其事,必先利其器。boltzmann machine涉及到的东西还是比较多的,这里不会给出详尽的证明,只是会提到一下,重点还是这个机器学习算法的有点、缺点、能处理的问题等。

Boltzman分布

  Boltzman分布形成了分子运动论的基础,它解释了许多基本的气体性质,包括压强和扩散。通常描述的是气体中分子的速率的分布,但它还可以指分子的速度、动量及动量大小的分布。

  

其中:

  • T:平衡温度。
  • Ni:状态i的粒子数。
  • k:状态i的能量。
  • gi:状态i的简并度。
  • Ei:状态i的能量。

模拟退火算法

  首先,什么是退火?其实之前别人提到这个算法的是模拟“119”的做法,其实真正的含义是:金属冶炼的退火过程。根据热力学的原理,在温度为T时,出现能量差为dE的降温的概率为P(dE),那么:

  

其中:

  • E:能量。
  • T:温度。
  • k:波尔兹曼常数。

  那么,温度越高,出现一次能量差为dE的降温的概率就越大。而且随着温度T的降低,P(dE)会逐渐降低。扯了这么多,那要解决什么问题呢?在实际中很多时候都要求全局的最优解,最简单的例子,求下面这个函数的最大值:

  

  在解决这种问题的时候,我们总是倾向于不断找到比现在更好的结果(这个过程像爬山,所以称为爬山算法,囧)。运气好点,从绿色的地方开始,并且在选择爬的时候选择了左边,这时候能爬到最高的山上。但是如果运气差一点,出发的地点是红色的那个点,那么到达不管是他左边的山顶还是右边的山顶,都不可能再往高处爬了。

  那么解决的方法就是让这个过程不那么死板:

  • 如果移动后更高,那么尝试向这个方向走。
  • 如果移动后没有变化甚至变低,那么还是会有一定的概率去尝试向这个方向走,而这个概率随着T(这里的T是时间)的增加而减少。

  自己的一点想法:模拟退火算法,当然是一个随机算法,但是其中的精髓就是会讲这个过程收敛,不然不管在什么时候都可能随机出新的。

  另外:模拟退火算法是一种改进的Metropolis算法(也称为Monte Carlo方法,20世纪最好的十个算法之一):旨在通过模仿随机过程,来得到具有难以控制的大量的自由度的数值问题和具有阶乘规模的组合问题的近似解法。Metropolis源自“曼哈顿计划”- -。

Boltzmann Machine

Boltzmann Machine模型

  这里主要是去和确定神经网络(比如BP)比较,Boltzmann Machine的功能:

  • BM是反馈神经网络,对称链接,无自反馈。
  • BM也是多层网络,包括:input、hide、output。
  • BM中的神经元是随机神经元,其状态是用概率来确定的。

能量函数为:

  

其中:

  • wij:状态i和j之间的连接强度,i=j时,wij=0。
  • xi:状态,只能是0、1。
  • θi:i的阀值。

神经元的状态为二值,neti表示i的状态从0变成的能量差,那么:

  

根据Boltzmann分布得到:

  

平衡态

  不停地选择一个节点更新它的状态,等到在一个固定温度运行足够长的时间后,网络节点的概率是依赖于网络中节点的能量。

训练

  

问题

RBM