deep learning toolbox学习使用3之DBN

结合toolbox代码过程,总结一下DBN的过程:
1.数据初始化
如NN一样,使用mnist数据集,初始化学习率alpha,冲量项mometum,权重w,b(v层bias),c(h层bias)。与NN不同的是,w,b,c此处只是简单的初始化为0矩阵。
Q1:w,b,c只初始化为0可以?在NN中是不可以的,因为将导致算法失效。
Q2:只是将各维数据归到(0,1],没有做标准化归一化处理?
2.训练阶段
大体过程就是每层训练一个rbm,然后根据rbm训练的w,b去产生上层的输入,进而继续下一个rbm的训练,如NN一样,60000训练数据,100作为一个batch,每次训练600个batch。
对于rbm的训练,主要就是实现cd算法,cd算法就不在此具体解释过程:
a,根据v1去生成h1,这里使用的激活函数都是sigmoid函数,即h1=f(v1*w+c)
b,根据h1去构造v2,v2=f(h1*w+b)
c,根据v2重构h2,如a步。
完成cd算法之后,便是更新w,b,c,在更新中依旧是使用冲量项,即在新的梯度下降方向上加入原有方向的控制,这样实践中通常可以加快学习速度(防止平坦区域的慢速),具体如下:
vw = mometum*vw+alpha(h1'*v1-h2'-v2)
w = w + vw
vb = mometum*vb + alpha(sum(v1-v2)),这里的v1-v2其实很简单,因为每个神经元都是二元变量,找出前后err,便是相减找出不是0的,便是重构的err
b = b + vb
c的更新如b,不赘述
在更新过程中,可以看到err明显在递减,最开始有300(总共784维,可见最开始重构非常差),但最后600次的平均只有65的err,说明最后已经非常准了,非常接近原数据的分布。
至此,完成一次RBM的训练,那么对于上层,便是根据w和c去生成新的输入(这里的输出),需要注意的是,产的新的x = w*x+c,是60000一起产生,然后再如上述以100作为一个batch继续rbm的训练。
3.将dbn结合到nn中生成分类器
在toolbox我们设计的是784-100-100的dbn网络,然后再加上一个10个输出的输出顶层构成一个NN,也就是784-100-100-10的NN网络,补充一下,DBN层数越多,特征提取的能力越强越准,在这个两层的DBN中便可以看到,第一层的err有65,而第二层的err只有10,效果很明显。
与普通的NN相比,NN时间2.04s,err0.16;DBN时间2.32s,err0.15
个人感觉DBN应该要整体慢一些,因为要一层层训练rbm,而训练完rbm之后生成的nn就快了,因为一定程度上将rbm的作用就是生成更好的w的初始化,所以更快的收敛。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值