深度置信网络(DBM)

DBN由多层受限玻尔兹曼机(RBM)堆叠加输出层构成,RBM由隐层和显层构成,如下图所示

深度置信网络(DBM)_第1张图片 

其中v为输入向量,h为隐层的节点。wij为vi到hj的权重,对于给定的状态(v,h),RBM的能量函数可表示为

其中ai为可见层的置偏值,bj为隐层的置偏值。

  可见层和隐层相互独立,h在v上的最大似然估计为

P(h|v)=\prod p(hi|v)    i=1,2.......n

通过v可计算出隐层神经元激活的概率为:

通过p可计算出显层神经元激活的概率为:

P(v1=1|h)=sigmoid(\sum_{j=1}^{j=m}w1j*hj+b)

训练采用cd-k(对比散度算法)

假设初始为v,h,迭代一轮之后为v',h',学习率为lr,则w,a,b的更新规则如下:

w=w+lr*(v*[p(h=1|v)]t-v'*[p(h'=1|v')]t)   其中t表示转置

a=a+lr*(v-v')

b=b+lr*([p(h=1|v)]-[p(h'=1|v')])

初始化可将数据v归一化,[v-v(min)]/[v(max)-v(min)],w,a,b随机赋初值

整体的DBN如图:

深度置信网络(DBM)_第2张图片

先独立训练每一层的rbm,再把上一层的rbm的输出做为下一层rbm的输入,最后接上连接层,进行BP微调模型。

 

代码如下,采用sklearn中的rbm层实现

 深度置信网络(DBM)_第3张图片

深度置信网络(DBM)_第4张图片 

 

 

你可能感兴趣的:(python,机器学习,深度学习,网络,人工智能)