dbn中的wake-sleep算法是如何调优的?

作者:Craigie Hill
链接:https://www.zhihu.com/question/29648549/answer/158728039
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

wake-sleep algorithm的fine-tuning算法在Hinton06年的那篇论文最后是有伪码的,Hinton使用的标准的DBN自画图如下:


<img src="https://i-blog.csdnimg.cn/blog_migrate/d4b8faeaccf69d721436364cbd8bde96.png" data-rawwidth="596" data-rawheight="716" class="origin_image zh-lightbox-thumb" width="596" data-original="https://pic1.zhimg.com/v2-3c5c2ef7c433c3221d5afd9c57b1c028_r.png">

i)wake-phase:(认知阶段)

先用认知阶段的参数计算每一层的认知阶段的状态(从下往上推...)

wakehidprobs = sigmoid(Wvishid * vis + brechid)

wakehidstates = wakehidprobs>rand(1, numhid)

wakepenprobs = sigmoid(Whidpen * wakehidstates + brecpen)

wakepenstates = wakehidstates > rand(1, numpen)

ii)再计算最上层拿来做先验的玻尔兹曼机的状态最上两层跳啊跳~

waketopprobs = sigmoid(Wpentop * wakepenstates + Wlabtop * targets + btop)

waketopstates = waketopprobs > rand(1, numtop)

然后再接的Contrastive Divergence...这里我就省略

iii)sleep-phase:(生成阶段)

最后用生成阶段的参数计算每一层的生成阶段的状态(从上往下推...

sleeppenstates = equpenstates

sleephidprobs = sigmoid(Wpenhid * sleeppenstates + bgenhid)

sleephidstates = sleephidprobs > rand(1, numhid)

sleepvisprobs = sigmoid(Whidvis * sleephidstates + bgenvis)


以上状态就得到了,接下来就是更新参数了。


i)认知阶段的状态来更新生成阶段的权重:

再用每一层的认知状态来更新生成参数,使得生成模型能够往认知上面靠

(更新权重的公式也在上面那篇06年的论文中有推导的...)

pvisprobs = sigmoid(Whidvis * wakehidstates + bgenvis)

Whidvis <- Whidvis + lr * wakehidstates.T * (vis - pvisprobs)

phidprobs = sigmoid(Wpenhid *wakepenstates + bgenhid )

Wpenhid <- Wpenhid + lr * wakepenstates.T * (wakehidstates - phidprobs)

ii)玻尔兹曼机直接利用Contrastive Divergence的结论来更新参数就好~

iii)生成阶段的状态来更新认知阶段的权重:

psleeppenstates = sigmoid(Whidpen * sleephidstates + brecpen)

Whidpen <- Whidpen + lr * sleephidstates.T * (sleeppenstates - psleeppenstates)

psleephidstates = sigmoid(Wvishid * sleepvisstates + brechid)

Wvishid <- Wvishid + lr * sleepvisstates.T(sleephidstates - psleephidstates)


参考文献:

Hinton G E, Osindero S, Teh Y W, A fast learning algorithm for deep belief nets[J], Neural computation, 2006, 18(7): 1527-1554

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值