DeepLearning(深度學習)原理與實現(一)

   經過三年的狂刷理論,覺得是時候停下來做些有用的東西了,因此決定開博把他們寫下來,一是爲了整理學過的理論,二是監督自己並和大家分享。先從DeepLearning談起吧,因爲這個有一定的實用性(大家口頭傳的“和錢靠的很近”大笑),國內各個大牛也都談了不少,我儘量從其他方面解釋一下。

        DeepLearning算是多倫多大學Geoffery hinton教授第二春吧,第一春就是傳統神經網絡,由於傳統的多層感知機很容易陷入局部最小,直接用反向傳播算法(Back Propagation)求取的分類效果並不如意,原因一是特徵是手工的,二就是局部最小問題。而DeepLearning引入了概率圖模型裏的生成模型,他可以直接自動的從訓練集裏提取所需要的特徵,典型的模型爲有限制玻爾茲曼機(Restricted Boltzmann Machines,簡稱RBM),自動提取的特徵解決了手工特徵考慮不周的因素,而且很好的初始化了神經網絡權重,接着可以採用反向傳播算法進行分類,實驗得出了很好的效果。 因此DeepLearning被喻爲下一代神經網絡。今天的話題就來討論下RBM:

       再說RBM之前,我們先提一下基於能量的模型(Engery based model),能量方法來源於熱動力學,分子在高溫中運動劇烈,能夠克服局部約束(分子之間的一些物理約束,比如鍵值吸引力等),在逐步降到低溫時,分子最終會排列出有規律的結構,此時也是低能量狀態。受此啓發,早期的模擬退火算法就是在高溫中試圖跳出局部最小。隨機場作爲物理模型之一,也引入了此方法。在馬爾科夫隨機場(MRF)中能量模型主要扮演着兩個作用:一、全局解的度量(目標函數);二、能量最小時的解(各種變量對應的配置)爲目標解,能否把最優解嵌入到能量函數中至關重要,決定着我們具體問題求解的好壞。統計模式識別主要工作之一就是捕獲變量之間的相關性,同樣能量模型也要捕獲變量之間的相關性,變量之間的相關程度決定了能量的高低。把變量的相關關係用圖表示出來,並引入概率測度方式就夠成了概率圖模型的能量模型,其實實際中也可以不用概率表示,比如立體匹配中直接用兩個像素點的像素差作爲能量,所有像素對之間的能量和最小時的配置即爲目標解。RBM作爲一種概率圖模型,引入概率就是爲了方便採樣,因爲在CD(contrastive divergence)算法中採樣部分扮演着模擬求解梯度的角色。


先來看一下RBM模型定義(圖一)和能量的定義(公式一):

      
(圖一)      

              

(公式一)


        其中v表示實際樣本節點,以下叫可視節點,h表示隱藏節點數據,theta={W,b,a},W表示網絡權重,b表示可視節點偏移,a表示隱藏節點偏移。這些參數是需要我們求解的,一般開始時我們隨機初始化這些參數,對於16*16的二值圖像,可視節點有256個,每個節點可能的狀態有兩個(0,1);隱藏節點的數目由自己制定,每個節點的狀態也有兩個(0,1)。當每個節點都有一個指定的狀態時,此時的RBM有一個對應的能量。此時所有節點對應某個狀態的組合成爲一個配置。窮舉所有配置對應的能量之和就構成了歸一化常量Z(配分函數-partition function)。每個配置能量除以常量Z即爲當前配置的概率。在一般計算時,爲了避免數值計算問題,我們常常引入極家族函數(對數函數和指數函數),那麼模型概率定義爲(公式二):

  
(公式二)

        由於RBM是一種生成模型(generative model),我們的目標使得概率p(x)最大時對應的參數theta,常規思路應該使用最大似然法,在求最大似然函數的極值時,我們需要用到梯度法,梯度推導如(圖二)所示(大家不要被公式嚇倒,CD算法不用它,=、=,只是證明求梯度有點難度):

(圖二)

公式雖然這麼寫,但是實際中計算歸一化分割函數Z時不可取的,因爲組合狀態是NP-complete的。但是這個公式給出了Contrastive divergence算法的原型(公式三):

(公式三)

        alpha是學習率,括號中第一項是訓練數據集期望分佈,第二項是模型期望分佈,CD算法的核心是計算(或逼近)出這兩項的數值,下面分別說出下面計算上式中兩個期望分佈,需要用到採樣方法(我先給出步驟,然後解釋,步驟是大家最關心的):

       第一項(數據相關期望項):利用可視節點v1乘上權重,然後用sigmoid函數計算出隱藏節點h每個節點的概率,通過此概率對隱藏節點採樣,得出隱藏節點狀態h1,然後用能量公式計算出所有節點的期望能量(<v1*h1>)作爲第一項。

       第二項(模型期望項):根據第一項中隱藏節點h1乘上權重,然後用sigmoid函數計算出可視節點v2的概率,在此通過採樣得出v2 狀態,同樣用v2計算出h2的狀態,用能量公式計算出所有節點的期望能量(<v2*h2>)。套用上面公式,就可以求出deltaW,


      有了類梯度,那麼就可以做權重更新咯,迭代就行了,b,a類似求解。
      這是用CD算法模擬梯度,關鍵在於使用什麼採樣方法,基於MCMC的各種採樣方法(如Gibbs,MH,拒絕採樣等)請酌情使用,深度理解採樣方法有助於我們理解爲什麼CD可以模擬梯度,用hinton的話來說:這是個驚人的事實。我概括了這麼一句話來給我們一個直觀的理解:數據期望分佈是我們整個數據的分佈中心,可以看成最小點,模型期望是採樣出來的,具有一定的隨機性,分佈在中心點周圍,二者相減正好可以模擬梯度。其實求解參數theta的方法不止這一種,比如在Russlan的論文中也給出另外一種方法:用隨機逼近過程來估計模型期望,用變分方法來估計數據相關期望等。礙於作者水平有限,就不講了。 

     另外對DBN這個生成模型(generative model)對參數求導時,得出的結果也和CD公式相似,DBN的訓練方法也可以用類似方法訓練,具體可參考russlan的代碼。

      DBM訓練方法其實就是層層通過對RBM分別訓練。對於russlan論文中提到的其他衍生應用和技巧大家可以根據自己所需詳細閱讀。比如估計分割函數(Z)是圖模型裏一個重要的基石部分;autoencoders的神奇作用其實是模擬了神經科學裏神經分佈式描述,相當於找到了低維流形;深度網絡的微調部分(fine-tune),其實通過上述方法做了無監督預訓練後,結合標籤部分用BP等方法做了權重微更新,值得一提的識別可以用生成模型(generative model),也可以是判別模型(discriminative model),針對具體應用大家可以試着採用不同方法。
     我想我要說的基本說完了,整個深度學習除了需要概率圖模型和神經網絡基礎支撐外,也用到了大量的trick。
     哦,對了,hinton也說過,神經網絡幾乎可以模擬現在絕大多數的機器學習方法,包括SVM,Adaboost,當然也包括概率圖模型的那一套(其中有結構化學習),這有點把圖模型收編的味道,作者視野有限,不敢不認同,也不敢認同。就講到這裏吧,作者寫的輕浮一些,公式都是從別人paper上扣下來的,
而且作者水平有限,可能有些會說錯,希望大家多多指正。


       最後附加一點:概率圖模型的能量和概率之間的關係可以參閱gibbs measureHammersley–Clifford theorem,他們倆在能量模型到概率之間的轉換上扮演着很重要的角色。還有爲什麼最大化P(x)或者p(v)可以使得能量最小?這個問題一開始我沒搞明白,後來一個做事嚴謹網友(北流浪子)的花了好長時間找到答案,並且無私的與俺分享:對(圖二)中的公式(5.7)兩邊同時取對數得到:lnp(v)=-FreeEnergy(v)-lnZ,這樣當p(v)最大時,自由能FreeEnergy(v)最小,而自由能最小決定了系統達到統計平衡,詳細可以參考:Gibbs free energy


參考文獻:

         [1]  Learning Deep Generative models.Ruslan Salakhutdinov

         [2]  Learning Deep Architectures for AI.Yoshua Bengio

         [3] A Tutorial on Energy-Based Models. yann lecun


轉載請註明出處:http://blog.csdn.net/cuoqu/article/details/8886971

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章