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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

受限Boltzmann机(Restricted Boltzmann Machine)

發布時間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 受限Boltzmann机(Restricted Boltzmann Machine) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

起源:Boltzmann神經網絡

Boltzmann神經網絡的結構是由Hopfield遞歸神經網絡改良過來的,Hopfield中引入了統計物理學的能量函數的概念。

即,cost函數由統計物理學的能量函數給出,隨著網絡的訓練,能量函數會逐漸變小。

可視為一動力系統,其能量函數的極小值對應系統的穩定平衡點。

Hinton發明的Boltzmann中乘熱打鐵,對神經元輸出引入了隨機概率重構的概念。其想法來自于模擬退火算法:

首先在高溫下進行搜索,由于此時各狀態出現概率相差不大,系統可以很快進入“熱平衡狀態”,是一種快速找到系統概率的低能區的“粗搜索”過程。

隨著溫度逐漸降低,各狀態出現概率的差距逐漸被擴大,搜索精度不斷提高。最后以一較高置信度達到網絡能量函數的全局最小點。

隨機重構則是Metropolis抽樣提出的,作為模擬退火算法的核心:

也就是說,每次重構,都往Δ能量差減少的方向移動,這是RBM的cost函數設計核心,AutoEncoder也是受此啟發。

?

?

Part I:RBM的結構與目標

RBM簡化了Boltzmann網絡,取消了每層神經元之間的連接,即不再是一個遞歸神經網絡,更像是一個MLP。

定義聯合能量函數: E(v,h)=?bv?ch?hWv

?? (b'、c'分別顯隱bias做矩陣乘法,h'則是h的全部取值,RBM限定了取值范圍{0,1},由激活函數依據概率分布生成)

由此得到v的邊緣概率分布:P(v)=he?E(v,h)ZZ=vhe?E(v,h)

Z是歸一化常數,說白了就是保證概率在[0,1]之間湊出的式子,計算cost函數時可以無視。

RBM的目的是算出盡量符合v(即輸入)的概率分布P(v)

,即實現 ??argmaxWv?VP(v)

但是問題在于沒有標簽,沒有誤差,無法訓練W,所以無法訓練出P(v)

的概率分布。

所以早期的RBM采用從h重構v'來計算誤差。重構v',說的好像挺簡單,但是需要知道P(v,h)

的聯合概率分布,用這概率分布去生成v'。

通常情況下,聯合概率分布無法計算,但是可以通過條件概率分布+迭代法近似模擬出符合聯合概率的樣本。

RBM中采用的是Gibbs采樣來重構,是MCMC(Monte Carlo?Markov Chain)的一種算法特例。

Monte Carlo是根據概率隨機生成數據的算法統稱,Markov Chain則是符合馬爾可夫鏈的算法統稱。【參考】

這樣,只要通過又臭又長的馬爾可夫鏈,使用Gibbs采樣重構出新樣本v'就好了。

有cost函數:cost=argmaxWv?VlogP(v)?argmaxWv?VlogP(v)

這個cost函數在實際計算時候簡直是折磨,原因有二: ①Z毫無意義且計算麻煩 ②?logP(v)牽扯到E(v,h),E(v,h)的計算也麻煩。

所以Bengio在Learning deep architectures for AI一文中提出了簡化的cost函數——FreeEnergy(自由能量)函數。

定義自由能量函數(無視Z+負對數似然):

FreeEnergy(v)=?log(P(v)?Z)=?loghe?E(v,h)


重定義E函數:Energy(v)=?bv?ihihi(W?v+c),hi?{0,1}

這里的精簡比較神奇,ch

被刻意X掉了,論文里假設是h只有一個神經元,這樣可有可無。c的梯度可以在后半部分求出,所以無須擔心c無法更新。

盡管此時的cost函數已經崩壞(Z因子,c'項都不見了),但是骨子還在,對于Gradient Descent影響不大。

這樣,參數對稱的兩部分,可以得到簡化P(v) 【推導詳見論文】:P(v)=ebvZihiehi(W?v+c)

于是有更加簡化的自由能量函數:FreeEnergy(v)=?bv?iloghiehi(W?v+c),hi?{0,1}

由于取值非0即1,再次簡化,?FreeEnergy(v)=?bv?ilog(1+e(W?v+c))

最終,使用FreeEnergy(v)替代logP(v),有簡化cost函數:cost=FreeEnergy(v))?FreeEnergy(v)

?

?

Part II:重構與Gibbs采樣

由于V層和H層,每層內各個神經元之間并無連接,因而這些神經元的概率分布是獨立的,那么就可以加權通過激活函數計算單個結點的激活概率。

P(hj=1|v)=Sigmoid(Wj?v+cj)P(vi=1|h)=Sigmoid(WTi?h+bi)

注意反向重構時,同AutoEncoder一樣,仍然使用Tied Weight。

這樣,就有了條件概率分布,可以構建馬爾可夫鏈了。

上圖是一條波動的鏈,v0->h0普通的正向傳播,忽略不計。

從h0,正式開始Gibbs采樣,一個step過程為,hn->vn+1->hn+1,即hvh過程。

vn+1=Bernoulli?Sigmoid(WT?hn+b)hn+1=Bernoulli?Sigmoid(W?vn+1+c)

t

時,有 vtv

?

Part III ?K步對比散度算法(CD-K)、可持久化對比散度算法(Persistent CD)

仔細想想RBM中的循環

①外循環:主迭代,訓練W,近似逼近P(v|h)、P(h|v)。

②內循環,Gibbs采樣,近似逼近P(v)

二重壓力下,RBM網絡的計算量實在可怕。

Hinton在2002年的?Training Products of Experts by Minimizing Contrastive Divergence?一文中有這個式子:

???Wij(Q0||Q?Q1||Q)<si,sj>Q0?<si,sj>Q1

即在求v、v'對比相差的cost函數的梯度,用以更新參數時,無限步Gibbs采樣的效果與單步Gibbs采樣效果差距不大。

數學上很難給出解釋,疑似是Gradient Descent與Gibbs Sampling(Gibbs可以看作是GD的先行?)的迭代效果重合。通常取K=1或K=10(更精確)來減少計算量。

?

既然Gibbs Sampling可以看作是Gradient Descent的先行使者,那么每次做梯度法時候,不必重啟馬爾可夫鏈。

而是利用舊鏈尾產生的hk,作為新鏈頭h0。

數學上仍然很難給出解釋,直覺上說,Gradient Descent的小量更新并不會影響馬爾可夫鏈繼續擴展,即便狗尾續貂,效果仍然不錯。

通過測試,可持久化CD在每次鏈長較長時效果比較好(k=15),若k=1,則影響較大,不建議使用,選擇大量梯度比較穩妥。

?

Part IV ?代理似然函數(Proxies to Likelihood)

Bengio的FreeEnerey方法一定程度上減輕了梯度法的計算量,但是為迭代收斂的評估帶來巨大麻煩。

由于歸一化因子Z的省略,若使用FreeEnerey的cost函數做評估,那么不同數據集的收斂值幾乎是千奇百怪的。

所以需要建立一套數據集公用評估標準,即引入代理似然函數。

代理一:交錯熵(or 最小二乘法)

AutoEncoder中使用的cost函數的修改版,Z變成了馬爾可夫鏈尾的h。

cost=v?log(Sigmoid(W?h?1+b))+(1?v)?log(1?Sigmoid(W?h?1+b))

代理二:偽造似然函數(Pseudo?likelihood)

仔細回想一下可持久化CD,馬爾可夫鏈狗尾續貂,徹夜未眠。

這樣,若一直使用鏈尾的h做交錯熵,那么這個交錯熵勢必是不停波動的,并不很直觀的。

因而,引入了偽造似然函數:每次選擇v的某一維度值,取反,偽造成重構的v'。

有對數似然函數:PL(x)=ilogP(xi|x?i)

當然并沒有必要那么精確,每次只需隨機抽一個維度進行偽造,乘上N倍即可:

PL(x)=N?logP(xi|x?i)iRandom(0,N)

logP(xi|x?i)

的條件概率計算頗為麻煩,利用條件概率公式+貝葉斯假設:

logP(xi|x?i)logP(xi)P(xi)+P(x?i)=loge?FreeEnergy(xi)e?FreeEnergy(xi)+e?FreeEnergy(x?i)log(Sigmoid(FreeEnergy(x?i)?FreeEnergy(xi)))



Part V ?與AutoEncoder的關系

準確來說,AutoEncoder是RBM的簡化衍生物。RBM是一個概率生成模型,而AutoEncoder只是一個普通的模型。

神經網絡的本質是訓練岀能夠模擬輸入的W,這樣,在測試的時候,遇到近似的輸入,W能夠做出漂亮的響應。

RBM選擇概率,是因為有概率論的公式支持。這樣優化網絡,能夠達到上述目標。

只是原始目標不好優化,Hinton才提出對比訓練的方法,即繞了個彎子的選擇重構。

能量函數使得W朝更大概率方向優化。但是,正如線性回歸有最小二乘法和高斯分布兩種解釋一樣。

其實,W的訓練大可不必拘泥于概率,AutoEncoder則繞過了這點,直接選擇了加權重構,所以cost函數簡單。

可以這么說,重構的數學理論基礎就是RBM的原始目標函數。而概率重構啟發了直接重構。兩者近似等價。

從馬爾可夫鏈上看,AutoEncoder可看作是鏈長為1的特殊形式,即一次重構,而RBM是多次重構。

能使用直接重構的另一個原因是,Hinton在實驗中發現,梯度法的一次重構效果出奇好。

所以AutoEncoder中摒棄了麻煩的Gibbs采樣過程。

從GPU計算來看,k=1情況下,AutoEncoer的GPU利用率高(70%),RBM利用率低(30%),一開始實現的時候嚇了一跳。

CUDA執行馬爾可夫鏈效率并不高,目測二項分布隨機重構是由CPU執行的(?_(:_」∠)_想想好像GPU沒那么高級 ?)

尤其在把batch_size設為600之后,RBM的GPU利用率居然只有(10%), 所以官方教程把batch_size設為了20,來減小概率生成的計算壓力。

當然k=15時,GPU加速之后仍然十分緩慢。RBM不愧是硬件殺手。

(本圖來自MSI Afterburner,GTX 765M,OC(847/2512/913))

?

Part VI ?Gaussian-Bernoulli RBM

仔細看看Bernoulli-Bernoulli的重構過程:

[0/1]->[0/1]->[0/1].....,由于二項分布是離散概率分布,所以重構生成值要么是0,要么是1,似乎有些不靠譜。

所以,就有了Gaussian-Bernoulli ?RBM,在v層中強制引入連續數值型Gaussian噪聲,主要對原RBM做以下修改:

E(v,h)=i(vi?bi)22σi2?ch?hWvσP(vi=v|h)=N(bi+σi(W?h),σ2i)P(hi=1|v)=Sigmoid(W?vσ+c)

其中Size(σ)=NVisble

,為正態分布標準差,為正值,一般不作訓練,取定值1,原因有二:

其一:梯度法訓練會產生負值和0,導致訓練失敗

其二:Gaussian過程并不需要精確的范圍,取的只是正態分布的連續特征,提供Gaussian噪聲。

當然,還是有人提出了可訓練σ

的改進方法,個人實際測試并沒有成功, σ

在梯度下降過程中,出現了過大數值問題,導致網絡崩潰。參考

Gaussian過程極易產生誤解,由于正態分布的取值范圍是R,所以對比散度樣本不可以再使用由Gaussian分布生成v’

Gaussian過程主要為從二項[0/1]的h,提供一個連續型重構緩沖范圍,而不僅僅把馬爾可夫鏈的運行局限在0/1之間

這樣做的原因是,一般輸入是連續型值,符合的是0~1之間的連續概率分布,而不是簡單的離散二項分布。

然后再把Gaussian分布映射回Bernoulli分布h',最后使用的是h[-1],令:v=Bernoulli?Sigmoid(W?h[?1]+b)

對比圖如下:

? ? ?

?左圖(Bernoulli-Bernoulli) ? ? 右圖(Gaussian-Bernoulli)

可以看到,Gaussian分布使得參數學習到了更多的特征,但是也帶來了更大的重構誤差,以及更快下降到局部最小值。學習率和Bernoulli-Bernoulli相同情況下,epoch2就過擬合了。

Hinton在?A practical guide to training restricted Boltzmann machines?提到Gaussian-Bernoulli模型不穩定,由于Gaussian分布的上界不定,

所以,學習率較之于Bernoulli-Bernoulli應該下降1~2個數量級。同時,應當慎用CD-10、Persistent CD,這些會帶來更不穩定的重構。(個人測試情況,似然幾乎無法下降)


from: http://www.cnblogs.com/neopenx/p/4399336.html

總結

以上是生活随笔為你收集整理的受限Boltzmann机(Restricted Boltzmann Machine)的全部內容,希望文章能夠幫你解決所遇到的問題。

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