DBN由多层受限玻尔兹曼机(RBM)堆叠加输出层构成,RBM由隐层和显层构成,如下图所示
其中v为输入向量,h为隐层的节点。wij为vi到hj的权重,对于给定的状态(v,h),RBM的能量函数可表示为
其中ai为可见层的置偏值,bj为隐层的置偏值。
可见层和隐层相互独立,h在v上的最大似然估计为
i=1,2.......n
通过v可计算出隐层神经元激活的概率为:
通过p可计算出显层神经元激活的概率为:
训练采用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如图:
先独立训练每一层的rbm,再把上一层的rbm的输出做为下一层rbm的输入,最后接上连接层,进行BP微调模型。
代码如下,采用sklearn中的rbm层实现