日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习方法:受限玻尔兹曼机RBM(三)模型求解,Gibbs sampling

發布時間:2023/12/10 pytorch 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习方法:受限玻尔兹曼机RBM(三)模型求解,Gibbs sampling 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

歡迎轉載,轉載請注明:本文出自Bin的專欄blog.csdn.net/xbinworld。
技術交流QQ群:433250724,歡迎對算法、技術、應用感興趣的同學加入。

接下來重點講一下RBM模型求解方法,其實用的依然是梯度優化方法,但是求解需要用到隨機采樣的方法,常見的有:Gibbs Sampling和對比散度(contrastive divergence, CD[8])算法。

RBM目標函數

假設給定的訓練集合是S={vi},總數是ns,其中每個樣本表示為vi=(vi1,vi2,,vinv),且都是獨立同分布i.i.d的。RBM采用最大似然估計,即最大化

lnLS=lni=1nsP(vi)=i=1nslnP(vi)

參數表示為θ=(W,a,b),因此統一的參數更新表達式為:

θ=θ+η?lnLS?θ
其中,η表示學習速率。因此,很明顯,只要我們可以求解出參數的梯度,我們就可以求解RMB模型了。我們先考慮任意單個訓練樣本(v0)的情況,即
LS=lnP(v0)=ln(1Zhe?E(v0,h))=lnhe?E(v0,h)?lnv,he?E(v,h)
其中v表示任意的訓練樣本,而v0則表示一個特定的樣本。

?LS?θ=?lnP(v0)?θ=??θ(lnhe?E(v0,h))???θ(lnv,he?E(v,h))=?1he?E(v0,h)he?E(v0,h)?E(v0,h)?θ+1v,he?E(v,h)v,he?E(v,h)?E(v,h)?θ=?hP(h|v0)?E(v0,h)?θ+v,hP(h,v)?E(v,h)?θ
(其中第3個等式左邊內條件概率P(h|v0),因為e?E(v0,h)he?E(v0,h)=e?E(v0,h)/Zhe?E(v0,h)/Z=P(v0,h)P(v0)=P(h|v0)

上面式子的兩個部分的含義是期望——左邊是梯度?E(v0,h)?θ在條件概率分布P(h|v0)下的期望;右邊是梯度?E(v,h)?θ在聯合概率分布P(h,v)下的期望。要求前面的條件概率是比較容易一些的,而要求后面的聯合概率分布是非常困難的,因為它包含了歸一化因子Z(對所有可能的取值求和,連續的情況下是積分),因此我們采用一些隨機采樣來近似求解。把上面式子再推導一步,可以得到,

?LS?θ=?hP(h|v0)?E(v0,h)?θ+vP(v)hP(h|v)?E(v,h)?θ

因此,我們重點就是需要就算hP(h|v)?E(v,h)?θ,特別的,針對參數W,a,b來說,有

hP(h|v)?E(v,h)?wij=?hP(h|v)hivj=?hP(hi|v)P(h?i|v)hivj=?hiP(hi|v)h?iP(h?i|v)hivj=?hiP(hi|v)hivj=?(P(hi=1|v)?1?vj+P(hi=0|v)?0?vj)=?P(hi=1|v)vj

類似的,我們可以很容易得到:

hP(h|v)?E(v,h)?ai=?vi

hP(h|v)?E(v,h)?bj=?P(hi=1|v)

于是,我們很容易得到,

?lnP(v0)?wij=?hP(h|v0)?E(v0,h)?wij+vP(v)hP(h|v)?E(v,h)?wij=P(hi=1|v0)v0j?vP(v)P(hi=1|v)vj

?lnP(v0)?ai=v0i?vP(v)vi

?lnP(v0)?bi=P(hi=1|v0)?vP(v)P(hi=1|v)

上面求出了一個樣本的梯度,對于ns個樣本有

?LS?wij=m=1ns[P(hi=1|vm)vmj?vP(v)P(hi=1|v)vj]

?LS?ai=m=1ns[vmi?vP(v)vi]

?LS?bi=m=1ns[P(hi=1|vm)?vP(v)P(hi=1|v)]

到這里就比較明確了,主要就是要求出上面三個梯度;但是因為不好直接求概率分布P(v),前面分析過,計算復雜度非常大,因此采用一些隨機采樣的方法來得到近似的解??催@三個梯度的第二項實際上都是求期望,而我們知道,樣本的均值是隨機變量期望的無偏估計。

Gibbs Sampling

很多資料都有提到RBM可以用Gibbs Sampling來做,但是具體怎么做不講(是不是有點蛋疼?),可能很多人也不清楚到底怎么做。下面稍微介紹一下。

吉布斯采樣(Gibbs sampling),是MCMC方法的一種,具體可以看我前面整理的隨機采樣MCMC的文章。總的來說,Gibbs采樣可以從一個復雜概率分布P(X)下生成數據,只要我們知道它每一個分量的相對于其他分量的條件概率P(Xk|X?k),就可以對其進行采樣。而RBM模型的特殊性,隱藏層神經元的狀態只受可見層影響(反之亦然),而且同一層神經元之間是相互獨立的,那么就可以根據如下方法依次采樣:

也就是說hi是以概率P(hi|v0)為1,其他的都類似。這樣當我們迭代足夠次以后,我們就可以得到滿足聯合概率分布P(v,h)下的樣本(v,h),其中樣本(v)可以近似認為是P(v)下的樣本,下圖也說明了這個迭代采樣的過程:

有了樣本(v)就可以求出上面寫到的三個梯度(?LS?wij,?LS?ai,?LS?bi)了,用梯度上升就可以對參數進行更新了。(實際中,可以在k次迭代以后,得到樣本集合{v},比如迭代100次取后面一半,帶入上面梯度公式的后半部分計算平均值。)

看起來很簡單是不是?但是問題是,每一次gibbs采樣過程都需要反復迭代很多次以保證馬爾科夫鏈收斂,而這只是一次梯度更新,多次梯度更新需要反復使用gibbs采樣,使得算法運行效率非常低。為了加速RBM的訓練過程,Hinton等人提出了對比散度(Contrastive Divergence)方法,大大加快了RBM的訓練速度,將在下一篇重點講一下。

OK,本篇先到這里。平時工作比較忙,加班什么的(IT的都這樣),晚上回到家比較晚,每天只能擠一點點時間寫,寫的比較慢,見諒。RBM這一塊可以看的資料很多,網上一搜一大堆,還包括hinton的一些論文和Bengio的綜述[9],不過具體手寫出來的思路還是借鑒了[7],看歸看,我會自己推導并用自己的語言寫出來,大家有什么問題都可以留言討論。下一篇最后講一下CD算法,后面有時間再拿code出來剖析一下。


覺得有一點點價值,就支持一下哈!花了很多時間手打公式的說~更多內容請關注Bin的專欄


參考資料
[1] http://www.chawenti.com/articles/17243.html
[2] 張春霞,受限波爾茲曼機簡介
[3] http://www.cnblogs.com/tornadomeet/archive/2013/03/27/2984725.html
[4] http://deeplearning.net/tutorial/rbm.html
[5] Asja Fischer, and Christian Igel,An Introduction to RBM
[6] G.Hinton, A Practical Guide to Training Restricted Boltzmann Machines
[7] http://blog.csdn.net/itplus/article/details/19168937
[8] G.Hinton, Training products of experts by minimizing contrastive divergence, 2002.
[9] Bengio, Learning Deep Architectures for AI, 2009

轉載于:https://www.cnblogs.com/yihaha/p/7265316.html

總結

以上是生活随笔為你收集整理的深度学习方法:受限玻尔兹曼机RBM(三)模型求解,Gibbs sampling的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。