ryo*_*ryo 12 python java artificial-intelligence machine-learning rbm
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
Run Code Online (Sandbox Code Playgroud)
我不是很擅长python,基本上它将每个可见单元的产品专家作为向量wx_b,计算exp和加1,计算log并将其与隐藏项相加.
我认为这与学习深度架构中的自由能方程略有不同:
FreeEnergy(x)= -b'x - ΣlogΣe^ hi(ci + Wix).
哪里:
hi是单位i隐藏层,ci是i向量c中的隐藏偏差.它计算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;
}
Run Code Online (Sandbox Code Playgroud)
这是某种近似吗?我试图在java中实现相同的东西,但我对此感到困惑.在此先感谢您的帮助!