首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >约束Boltzmann机器的自由能近似方程

约束Boltzmann机器的自由能近似方程
EN

Stack Overflow用户
提问于 2012-03-30 14:07:53
回答 1查看 1.3K关注 0票数 12

根据深度学习教程

巨蟒的自由能是

代码语言:javascript
复制
def free_energy(self, v_sample):
    ''' Function to compute the free energy '''
    wx_b = T.dot(v_sample, self.W) + self.hbias
    vbias_term = T.dot(v_sample, self.vbias)
    hidden_term = T.sum(T.log(1 + T.exp(wx_b)), axis=1)
    return -hidden_term - vbias_term

我不是很擅长python,基本上它得到每个可见单元的产品专家作为向量wx_b,计算exp和plus 1,计算日志并对隐藏项进行求和。

我认为这与“学习深层建筑”中的自由能方程有一点不同:

FreeEnergy(x) =−b‘x−∑log∑e^hi(ci+Wix)。

其中:

  • hi是单元i隐藏层,
  • ci是向量c中的i隐偏差。

它计算exp和sum,计算日志对和值的尊重。毕竟,所有的产品专家之和都是根据可见单位的数量计算的。

上述方程来自为人工智能学习深层架构(Yoshua Bengio),为eq.5.21。

下面是我的java实现草案vis_v是可见层示例,hid_v是隐藏层单元示例。

代码语言:javascript
复制
private double freeEnergy(RealVector vis_v, RealVector hid_v){
 RealVector wx_hb= W.preMultiply(vis_v).add(hBias);
 double vbias_term= vis_v.dotProduct(vBias);
 double sum_hidden_term = 0;
 for(int i=0;i< wx_hb.getDimension();i++){
     RealVector vis_expert = hid_v.mapMultiply(wx_hb.getEntry(i));
     double hidden_term= StatUtils.sum(vis_expert.map(new Exp()).toArray());
     sum_hidden_term+=Math.log(hidden_term);
 }
 return -sum_hidden_term-vbias_term;
}

这是某种近似吗?我试图在java中实现相同的东西,但我对此感到困惑。提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

发布于 2012-03-30 15:25:35

据我所知,你们对参考python代码中自由能函数的定义感到困惑。如果你不这么问我道歉。

首先,这不是近似值。看起来他们假设隐藏的单位是二进制值。记住,自由能仅仅是隐藏变量被边缘化的能量的对数。所以,上面列出的自由能方程中的内和只是i^th隐藏单元的值之和,在这种情况下,是{0,1}。因为exp(0) =1,内部和就变成了1+exp(.)。请参阅你提供的链接中的“带有二进制单位的RBMs”部分。

我不熟悉java中的ApacheCommons数学库,所以我不能在那里提供大量的帮助,但是实现应该是从那个python函数中直接转换出来的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9944568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档