gpt4 book ai didi

java - 受限玻尔兹曼机中的自由能近似方程

转载 作者:太空狗 更新时间:2023-10-29 17:50:51 30 4
gpt4 key购买 nike

根据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,基本上是把每个可见单元的product expert作为 vector wx_b,计算exp加1,计算log求和求隐藏项。

我认为这与 Learning Deep Architectures 中的自由能方程略有不同:

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

地点:

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

计算exp和sum,计算求和值的log。最后根据可见单元数对所有产品专家求和。

以上等式是来自Learning Deep Architectures for AI (Yoshua Bengio) 的eq.5.21

下面是我的java实现草稿,vis_v是可见层样本,hid_v是隐藏层单元样本。

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 中实现同样的东西,但我对此感到困惑。在此先感谢您的帮助!

最佳答案

我了解到您对引用 python 代码中自由能函数的定义感到困惑。如果这不是您的要求,我深表歉意。

首先,这不是一个近似值。看起来他们假设隐藏单元是二进制值。请记住,自由能只是隐藏变量被边缘化的能量的(对数)。因此,上面列出的自由能方程中的内部总和只是第 i^th 个隐藏单元可以采用的值的总和,在这种情况下,这些值是 {0,1}。由于 exp(0) = 1,内部总和变为 1+exp(...)。请参阅 link you provided 中的“具有二进制单位的 RBM”部分.

我不熟悉 java 中的 apache 公共(public)数学库,因此我无法提供大量帮助,但实现应该是该 python 函数的直接翻译。

关于java - 受限玻尔兹曼机中的自由能近似方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9944568/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com