這一部分是個坑,應該對絕大多數菜雞暈頭轉向的部分,由於有來自物理學界的問候。html
[Bayes] runif: Inversion Sampling網絡
[Bayes] dchisq: Metropolis-Hastings Algorithmdom
[Bayes] Metroplis Algorithm --> Gibbs Sampling函數
縱觀大部分介紹RBM的paper,都會提到能量函數。所以有必要先了解下能量函數的概念。參考網頁http://202.197.191.225:8080/30/text/chapter06/6_2t24.htm關於能量函數的介紹:tornado
一個事物有相應的穩態,如在一個碗內的小球會停留在碗底,即便受到擾動偏離了碗底,在擾動消失後,它會回到碗底。學過物理的人都知道,穩態是它勢能最低的狀態。所以穩態對應與某一種能量的最低狀態。post
將這種概念引用到Hopfield網絡中去,Hopfield構造了一種能量函數的定義。這是他所做的一大貢獻。引進能量函數概念能夠進一步加深對這一類動力系統性質的認識,能夠把求穩態變成一個求極值與優化的問題,從而爲Hopfield網絡找到一個解優化問題的應用。學習
1) 聯合機率爲:測試
RBM模型的能量函數:字體
Z是歸一化因子,其值爲:
2) 邊緣分佈爲:
【這裏爲了習慣,把輸入v改爲函數的自變量x】
令一箇中間變量F(x)爲:
邊緣分佈爲從新寫爲:
這時候它的偏導函數取負,變爲:
從上面能量函數的抽象介紹中能夠看出,若是要使系統(這裏即指RBM網絡)達到穩定,則應該是:
系統的能量值E最小 --> F(x)最小 --> P(x)最大 --> 損失函數 as -P(x)
上述就是基本原理,但問題在於計算繁複,例如Z的計算O(2m+n),因此須要下面的CD算法。
受限波爾茲曼機RBM的基本模型
如何理解 p(v,h|theta) ? 注意下面的式子的Wi,j,以及ai, bj的意義。
基於對比散度的RBM快速學習算法
似然函數以下:
注意最後的結論:
第一項,v是具體的觀察樣本,故好求;
第二項,Z的計算O(2m+n),故很差求;
可是能夠經過gibbs採樣獲取近似值,原理參見:[Bayes] Metroplis Algorithm --> Gibbs Sampling
From: 限制Boltzmann機(Restricted Boltzmann Machine)
問題在於沒有標籤,沒有偏差,沒法訓練W,因此沒法訓練出P(v)的機率分佈。
因此早期的RBM採用從h重構v'來計算偏差。重構v',說的好像挺簡單,可是須要知道P(v,h)的聯合機率分佈,用這機率分佈去生成v'。
上圖是一條波動的鏈,v0->h0普通的正向傳播,忽略不計。
從h0,正式開始Gibbs採樣,一個step過程爲,hn->vn+1->hn+1,即hvh過程。
當t→∞時,有vt=v'
如何利用」重構「來更新theta = {a, b, w}的問題。
算法以下,hvh過程。可見咱們有了」計算偏差「的方式。
可見,rbm也是一個相似於autoencoder的過程,hidden layer提取出了樣本特徵。
準確來講,AutoEncoder是RBM的簡化衍生物。
繞了個彎子的選擇重構
神經網絡的本質是訓練岀可以模擬輸入的W,這樣,在測試的時候,遇到近似的輸入,W可以作出漂亮的響應。
RBM選擇機率,是由於有機率論的公式支持。這樣優化網絡,可以達到上述目標。
只是原始目標很差優化,Hinton才提出對比訓練的方法,即繞了個彎子的選擇重構。
二者近似等價
能量函數使得W朝更大機率方向優化。可是,正如線性迴歸有最小二乘法和高斯分佈(貝葉斯線性迴歸)兩種解釋同樣。
其實,W的訓練大可沒必要拘泥於機率,AutoEncoder則繞過了這點,直接選擇了加權重構,因此cost函數簡單。
【相對於rbm,AutoEncoder是兩套參數W,且不同】
能夠這麼說,重構的數學理論基礎就是RBM的原始目標函數。而機率重構啓發了直接重構,二者近似等價。
梯度法的一次重構效果出奇好
從馬爾可夫鏈上看,AutoEncoder可看做是鏈長爲1的特殊形式,即一次重構,而RBM是屢次重構。
能使用直接重構的另外一個緣由是,Hinton在實驗中發現,梯度法的一次重構效果出奇好。
因此AutoEncoder中摒棄了麻煩的Gibbs採樣過程。
從GPU計算來看,k=1狀況下,AutoEncoer的GPU利用率高(70%),RBM利用率低(30%),一開始實現的時候嚇了一跳。
CUDA執行馬爾可夫鏈效率並不高,目測二項分佈隨機重構是由CPU執行的。
尤爲在把batch_size設爲600以後,RBM的GPU利用率竟然只有(10%), 因此官方教程把batch_size設爲了20,來減少機率生成的計算壓力。
固然k=15時,GPU加速以後仍然十分緩慢。RBM不愧是硬件殺手。
(本圖來自MSI Afterburner,GTX 765M,OC(847/2512/913))
拋出一個問題:VAE又是怎麼一回事?具備哪些優點?
Goto: [Bayesian] 「我是bayesian我怕誰」系列 - Variational Autoencoders
用NN(神經網絡)來對數據進行大量的降維是從2006開始的,這起源於2006年science上的一篇文章:reducing the dimensionality of data with neural networks,做者就是鼎鼎有名的Hinton,這篇文章也標誌着deep learning進入火熱的時代。
所以優化問題是多層NN沒有大規模應用的緣由,而autoencoder深度網絡確可以較快的找到比較好的全局最優勢,
它是用無監督的方法(這裏是RBM)
這種方法被認爲是對PCA的一個非線性泛化方法。
DBM由多個RBM疊加起來
由上圖能夠看到,當網絡的預訓練過程完成後,咱們須要把解碼部分從新拿回來展開構成整個網絡,而後用真實的數據做爲樣本標籤來微調網絡的參數。
當網絡的輸入數據是連續值時,只需將可視層的二進制值改成服從方差爲1的高斯分佈便可,而第一個隱含層的輸出仍然爲二進制變量。
文章中包含了多個實驗部分,有手寫數字體的識別,人臉圖像的壓縮,新聞主題的提取等。在這些實驗的分層訓練過程當中,其第一個RBM網絡的輸入層都是其對應的真實數據,且將值歸一化到了(0,1).而其它RBM的輸入層都是上一個RBM網絡輸出層的機率值;可是在實際的網絡結構中,除了最底層的輸入層和最頂層RBM的隱含層是連續值外,其它全部層都是一個二值隨機變量。此時最頂層RBM的隱含層是一個高斯分佈的隨機變量,其均值由該RBM的輸入值決定,方差爲1。
實驗結果1:
這3副圖中每幅圖的最上面一層是原圖,其後面跟着的是用NN重構的圖,以及PCA重構的圖(能夠選取主成分數量不一樣的PCA和logicPCA或者標準PCA的組合,本人對這logicPCA沒有仔細去研究過)。其中左上角那副圖是用NN將一個784維的數據直接降到6維!
做者經過實驗還發現:若是網絡的深度淺到只有1個隱含層時,這時候能夠不用對網絡進行預訓練也一樣能夠達到很好的效果,可是對網絡用RBM進行預訓練能夠節省後面用BP訓練的時間。另外,當網絡中參數的個數是相同時,深層網絡比淺層網絡在測試數據上的重構偏差更小,但僅限於二者參數個數相同時。做者在MINIST手寫數字識別庫中,用的是4個隱含層的網絡結構,維數依次爲784-500-500-2000-10,其識別偏差率減少至1.2%。預訓時練獲得的網絡權值佔最終識別率的主要部分,由於預訓練中已經隱含了數據的內部結構,而微調時用的標籤數據只對參數起到稍許的做用。
MINST降維實驗:
本次是訓練4個隱含層的autoencoder深度網絡結構,輸入層維度爲784維,4個隱含層維度分別爲1000,500,250,30。整個網絡權值的得到流程梳理以下: