RBM基础
RBM模型是基于能量的模型。对于一组给定的状态 (v.h) ,其能量函数为
利用上述能量函数给出
(v.h)
的联合分布为
其中, θ=(W,a,b) , W=[wij]Nv∗Nh 表示 vi 和 hj 之间的连接权重, a=(a1,a2,...,aNv) 、 b=(b1,b2,...,bNh) 分别表示观测单元 v ,隐藏单元
h
RBM的学习算法
求解更好拟合训练数据的RBM参数 θ ,方法是使用极大似然法,极大似然函数为
设训练样本集合 S=(v1,...,vNs) ,对数极大似然函数为
此时,RBM学习的目标为极大化上式,使用梯度上升(gradient ascent),通过如下的迭代格式来求解
η 是学习率,问题的关键是求解梯度 ∂lnLθ,S∂θ ,省略 Lθ,S 中的 θ ,对于单个样本 v 计算似然函数
上式中红色 v 表示单个训练样本,黑色 v 表示任意的训练样本。针对单个样本
v
上式中包含两个期望,第一个 ∑hP(h|v)∂E(v,h)∂θ 为能量梯度 ∂E(v,h)∂θ 在分布 P(h|v) 下的期望,对应每个训练样本数据遍历其可能的隐藏数据的值,可以求得;第二个 ∑v,hP(v,h)∂E(v,h)∂θ 为能量梯度 ∂E(v,h)∂θ 在分布 P(v,h) 下的期望,对应于每个可能的 v 求其隐藏数据的值,计算量非常大。其中,
∑v,hP(v,h)∂E(v,h)∂θ=∑v∑hP(v)P(h|v)∂E(v,h)∂θ=∑vP(v)∑hP(h|v)∂E(v,h)∂θ
因此,只需讨论 ∑hP(h|v)∂E(v,h)∂θ 的计算,下面对 θ=(wij,ai,bj) 分别进行计算(省略推导过程)
对于单个训练样本 v ,各个梯度为
以上是针对单个训练样本的情形,在整个样本空间 S=v1,...,vns 上有 ∂LS∂θ=∂lnP(vm)∂θ 从而可得如下公式,
上述三个公式中, ∑v 项的计算复杂度为 O(2Nv+Nh) ,可以通过MCMC方法如Gibbs进行采样,并用样本对 ∑v 项进行估计。k步Gibbs抽样过程如下
这样得到的 v(k) 可以用来估计上式中的 ∑v 项,根据MCMC采样的思想,将上述三个式子进一步推导,并使用 v(k) 来近似可得
但是常规的gibbs采样的 k 需要足够大,才能使得采集到的样本符合RBM分布,Hinton教授发明了对比散度(Contrastive Divergence,CD)方法,通过使用训练样本集
S
CDK(k,S,RBM();Δw,Δa,Deltab)
– 输入: k,S,RBM(W,a,b)
– 输出: Dw,Da,Db
step 1 初始化: Δw=0,Δa=0,Δb=0
Step 2 对S中的样本循环生成 Δw,Δa,Δb
v(0):=vFOR t=0,1,...,k−1 DO{
h(t)=sample_h_given_v(v(t),RBM(w,a,b));v(t+1)=sample_v_given_h(h(t),RBM(w,a,b));}FOR i=1,2,...,Nv;j=1,2,...,Nh DO{
Δwi,j=Δwi,j+[P(hj=1|v(0))v(0)i−P(hj=1|v(k))v(k)i];Δai=Δai+[v(0)i−v(k)i]; Δbj=Δbj+[P(hj=1|v(0))−P(hj=1|v(k))];}}
其中,记 phi=P(vi=1|h),i=1,2,...,Nv , sample_v_given_h 的计算可写成
generateRadom ri∈[0,1];vi={
1,if ri<phi;0,otherwise.}
的计算与 sample_v_given_h 类似.
将上述的 CD−k 算法用于完整的RBM算法如下
Step 1 初始化
(1)给定训练样本集合 S(|S|==Ns)
(2)给定训练周期 J ,学习率
η
(3)指定可见层和隐藏层的单元数目
Nv,Nh
(4)初始化偏置向量以及权重矩阵 (a,b,w)
Step 2 训练
CDK(k,S,RBM(W,a,b));UPDATE W=W+η(1NsΔW),a=a+η(1NsΔa),b=b+η(1NsΔb)}
使用Python实现上述算法的示例
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224063.html原文链接:https://javaforall.net
