[UFLDL] Generative Model

這一部分是個坑,應該對絕大多數菜雞暈頭轉向的部分,由於有來自物理學界的問候。html

Deep learning:十九(RBM簡單理解)算法

  • 採樣方法

[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算法。

 

  • 對比散度算法(CD: contractive divergence)前夜!

From:受限波爾茲曼機 - 張春霞,你們推薦的一篇文章,可讀性強。

rbm根植於統計力學;快速學習算法 - 對比散度

Hinton paper:http://www.cs.toronto.edu/~hinton/absps/tr00-004.pdf

這裏是根據該論文的repeated理解,感受比Ng的更好接收些。要充分認識事物有必要反覆咀嚼。

 

受限波爾茲曼機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'

 

  • 對比散度算法(CD: contractive divergence)今日!

如何利用」重構「來更新theta = {a, b, w}的問題。

算法以下,hvh過程。可見咱們有了」計算偏差「的方式。

可見,rbm也是一個相似於autoencoder的過程,hidden layer提取出了樣本特徵。

 

  • 與AutoEncoder的關係

準確來講,AutoEncoder是RBM的簡化衍生物。

    • RBM是一個機率生成模型 --> 使用機率方法訓練
    • AutoEncoder只是一個普通的模型 --> 使用bp訓練

 

繞了個彎子的選擇重構

神經網絡的本質是訓練岀可以模擬輸入的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實現數據的降維)

用NN(神經網絡)來對數據進行大量的降維是從2006開始的,這起源於2006年science上的一篇文章:reducing the dimensionality of data with neural networks,做者就是鼎鼎有名的Hinton,這篇文章也標誌着deep learning進入火熱的時代。

    • 權值太大的話,就很容易收斂到」差」的局部收斂點;
    • 權值過小的話則在進行偏差反向傳遞時離輸入層越近的權值更新越慢【梯度消失】;

所以優化問題是多層NN沒有大規模應用的緣由,而autoencoder深度網絡確可以較快的找到比較好的全局最優勢,

它是用無監督的方法(這裏是RBM

    1. 先分開對每層網絡進行訓練,
    2. 而後將它當作是初始值來微調。

這種方法被認爲是對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。整個網絡權值的得到流程梳理以下:

  1. 首先訓練第一個rbm網絡,即輸入層784維和第一個隱含層1000維構成的網絡。採用的方法是rbm優化,這個過程用的是訓練樣本,優化完畢後,計算訓練樣本在隱含層的輸出值。
  2. 利用1中的結果做爲第2個rbm網絡訓練的輸入值,一樣用rbm網絡來優化第2個rbm網絡,並計算出網絡的輸出值。而且用一樣的方法訓練第3個rbm網絡和第4個rbm網絡。
  3. 將上面4個rbm網絡展開鏈接成新的網絡,且分紅encoder和decoder部分。並用步驟1和2獲得的網絡值給這個新網絡賦初值。
  4. 因爲新網絡中最後的輸出和最初的輸入節點數是相同的,因此能夠將最初的輸入值做爲網絡理論的輸出標籤值,而後採用BP算法計算網絡的代價函數和代價函數的偏導數
  5. 利用步驟3的初始值和步驟4的代價值和偏導值,採用共軛梯度降低法優化整個新網絡,獲得最終的網絡權值。以上整個過程都是無監督的。
MINST 分類實驗
有了pretrain,最後一層加softmax層,再微調based on supervised learning便可。
 
 
 
暫且放在這裏。
內容相對久遠,且生僻,實用性不大。
相關文章
相關標籤/搜索