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

2024-04-25 20:22:12 发布

您现在位置:Python中文网/ 问答频道 /正文

根据a deeplearning tutorial

python中的自由能是

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和+1,计算log并将其求和为隐藏项。在

我认为这与学习深层架构中的自由能方程有些不同:

自由能(x)=−b′x−∑log∑e^hi(ci+Wix)。在

其中:

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

它计算exp和sum,计算关于和值的log。毕竟所有的产品专家都是基于可见单元的数量来求和的。在

上面的等式是Learning Deep Architectures for AI (Yoshua Bengio)中的等式5.21

下面是我的java实现草稿vis_v是可见层示例,hid犠v是隐藏层单元示例。在

^{pr2}$

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


Tags: sampleselflogfreehi向量dothidden
1条回答
网友
1楼 · 发布于 2024-04-25 20:22:12

我想你的困惑在于参考python代码中自由能函数的定义。如果这不是你要求的,我道歉。在

首先,这是一个近似值。看起来他们假设隐藏的单位是二进制值的。请记住,自由能只是隐藏变量被边缘化的能量(对数)。所以,上面列出的自由能方程中的内和只是第i个隐藏单元可以接受的值的和,在本例中是{0,1}。因为exp(0)=1,那么内部和就变成了1+exp(…)。请参阅link you provided中的“带二进制单位的RBMs”部分。在

我不熟悉java中的apachecommons数学库,因此我不能提供大量的帮助,但是实现应该是从python函数直接转换而来的。在

相关问题 更多 >

    热门问题