1. 程式人生 > >深度學習 --- 受限玻爾茲曼機(馬爾科夫過程、馬爾科夫鏈)

深度學習 --- 受限玻爾茲曼機(馬爾科夫過程、馬爾科夫鏈)

        上一節我們詳細的探討了玻爾茲曼機,玻爾茲曼機的發明是為了解決Hopfield神經網路的偽吸引子的問題,因此把退火演算法、玻爾茲曼分佈和Hopfield神經網路結合在一起形成了玻爾茲曼機(隨機神經網路)。通過前面幾節我們知道玻爾茲曼機可以很好的解決Hopfield神經網路的偽吸引子的問題,但是帶來的另外一個大問題就是計算量太大了,訓練週期長,因此Hinton和Sejnowski於1986年提出的一種生成式隨機神經網路(generative stochastic neuralnetwork)即受限玻爾茲曼機,其實受限玻爾茲曼機是在玻爾茲曼機的基礎上通過Gibbs取樣,進而提升了計算速度,也因此受限玻爾茲曼機得到廣泛應用,但是想要搞明白Gibbs取樣不是一件容易的事,他需要很深的背景知識,想要理解Gibbs取樣就需要理解MCMC和Metropolis演算法,想要理解MCMC就需要理解馬爾科夫鏈,想要理解馬爾科夫鏈就需要理解馬爾科夫過程,因此這裡需要很深的背景知識,我打算從最初的馬爾科夫過程繼續深入講解,因為這些知識不僅僅這裡使用到,在強化學習、自然語言處理都是經常使用的,搞明白他們很有必要,尤其馬爾科夫過程,整個強化學習就是基於馬爾科夫為基礎的,因此深入理解他很有必要,而隱馬爾可夫又是自然語言處理經常使用的,因此深入理解他們很有必要,從這裡也可以看出,知識點並不是孤立的,他們都是有聯絡的,講的簡單點就是方法論,他們都是相通,因此大家學習時就要學會舉一反三,觸類旁通,然而想達到這樣的地步,你必須深入理解他們。好了,廢話不多說,大家都知道了問題和學習過程,下面我們就按照上面的過程進行逐步講解。

在講解馬爾科夫過程之前呢,先和大家簡單介紹一下隨機過程,這裡如果不懂隨機過程的同學,建議看一下浙大的《概率統論與數理統計》這本書第12章和13章的內容,因為馬爾科夫過程就會根據這本書進行介紹,因此想要深入理解的請看這本書,當然我會盡量講清楚的。
隨機過程:

               具體的例子請參考《概率統論與數理統計》第四版301頁,我只把定義拿過來,不懂隨機過程的建議看看。

連續型隨機過程:

          設T是一無限實數集,我們把依賴於引數\large t\epsilon T

的一族(無限多個)隨機變數稱為隨機過程,記為\large \left \{ X(t), t\epsilon T \right \},這裡對每一個\large t\epsilon T\large X(t)是一隨機變數,T叫做引數集.我們常把t看作為時間,稱\large X(t)為時刻t時過程的狀態,而\large X(t_1)=x(實數)說成是\large t = t_1時過程處於狀態x,對於一切\large t\epsilon T\large X(t)所有可能取的一切值的全體稱為隨機過程的狀態空間.
          對隨機過程\large \left \{ X(t), t\epsilon T \right \}進行一次試驗(即在T上進行一次全程觀測),其結果是t的函式,記為\large X(t)\large t\epsilon T稱它為隨機過程的一個樣本函式或樣本曲線,所有不同的試驗結果構成一族樣本函式.隨機過程可以看作是多維隨機變數的延伸.隨機過程與其樣本函式的關係就像數理統計中總體與樣本的關係一樣.

離散型隨機過程:

          隨機過程還可依時間(引數)是連續或離散進行分類.當時間集T是有限或無限區間時,稱\large \left \{ X(t), t\epsilon T \right \}

為連續引數隨機過程(以下如無特別指明,“隨機過程”總是指連續引數而言的).如果T是離散集合,例如T={0,1,2,..},則稱\large \left \{ X(t), t\epsilon T \right \}為離散引數隨機過程或隨機序列,此時常記成\large \left \{ X_n,n=0,1,2,3,.... \right \}

這是基本的隨機過程的定義,但是我們知道隨機過程如果不加以限制,則無法研究,為了研究方便,加入一些限制,例如平穩隨機過程、馬爾科夫隨機過程,這裡簡單的介紹一下平穩隨機過程,詳細介紹馬爾科夫隨機過程。

平穩隨機過程定義;

          過程的統計特性不隨時間的推移而變化,嚴格的說,如果對於任意的\large n(n=1,2,3,.....,),t_1,t_2,...,t_n\epsilon T和任意實數h,當\large t_1+h,t_2+h,...,t_n+h\epsilon T時,n維隨機變數:

                   \large (X(t_1),X(t_2),X(t_3),....,X(t_n))\large (X(t_1+h),X(t_2+h),X(t_2+h),....,X(t_3+h))

具有相同的分佈函式,則稱隨機過程\large \left \{ X(t), t\epsilon T \right \}具有平穩性,並同時稱此過程為平穩隨機過程,或簡稱平穩過程。

馬爾科夫過程定義:

           由時刻\large t_0系統或過程所處的狀態,可以決定系統或過程在時刻\large t>t_0所處的狀態,而無需藉助於  \large t_0時刻以前的轉態,簡單來說就是將來不依賴過去只依賴現在。舉個例子吧,書中講的太生硬了,例如明天下不下雨只和今天有關,和昨天、前天無關說明天氣就具有馬爾科夫性或者無後效性  (即已經知道過程‘現在’的條件下,其“將來”不依賴於“過去”)。我們就稱具有馬爾科夫性的隨機過程稱為馬爾科夫過程。具體的書面定義如下:

           如果時間和狀態都是離散的我們稱為馬爾科夫鏈簡稱為馬氏鏈。下面給出例子:

   交通燈的就具有馬爾科夫性,紅到黃轉移概率為1,黃到綠轉移概率也是1,但是紅到綠轉移G概率為零,即下一個轉向概率只和本次燈有關。在舉個例子         

   這個是昨天天氣轉移到今天天氣的方向圖,但是這個圖看轉移概率很麻煩,因此我們可以使用轉移矩陣來表示:

   從上面的轉移概率矩陣我們可以看到,今天的天氣只取決於昨天,使用矩陣來表示很清晰間接,這個矩陣怎麼看呢?第一行表示昨天是晴天那麼轉移到今天為晴天的概率為0.5,轉移到今天是多雲的概率是0.375,轉移到雨天的概率為0.125,在這裡只有三種天氣,因此,每行的概率和為1,又因為昨天的天氣也有三種情況,概率也為1,因此這轉移概率矩陣每行每列的概率和均為1,這就是概率轉移矩陣,下面給出書面對這方面的介紹:       

      這裡大家好好理解轉移概率的平穩性,只與ij和時間距離有關係,按照上面的例子,ij其實就是昨天和今天,而時間距離就是1,如果時間距離是n=2,說明昨天影響的是後天,那前前天影響的才是今天,這裡大家需要多注意,多理解一下。需要搞明白n步轉移概率和一步轉移概率是什麼意思,我們上面舉得例子就是一步的,因為時間單位是1天,因此昨天影響今天就是一天的間隔,如果前天影響今天,昨天影響明天,這裡的時間間隔就是n=2,即兩天時間,這裡大家需要好好理解,建議看看上面推薦的書。下面給出一步轉移概率相關資訊:

        大家理解時完全可以按照天氣來理解,上圖的矩陣\large X_m代表昨天,而昨天的天氣具體有三個狀態即晴天、多雲、雨天;\large X_{m+1}代表的是今天,然而今天也有三個狀態即晴天、多雲、雨天,這裡的該變數是\large X即昨天或者今天、明天等,但是每天的天氣的狀態的個數是一樣的,這裡容易搞混的,所有我強調一下。因此每天的天氣狀態是固定的,因此轉移矩陣一定是方陣,這裡大家一定要理解,否則後面就會很困難了。另外需要強調一下就是一步轉移概率的表示即\large P,這個很重要,只要掌握了一步轉移概率,那麼多步的就容易理解了,因為多步的可以通過一步的來推到出來。大家這段需要好好理解一下。

多步轉移概率的確定:

下面我們就看看多步轉移概率矩陣,這裡大家請去看看《概率統論與數理統計》第四版325頁的多步轉移概率的確定,這裡我直接把結果拿過來了:

         矩陣形式的\large C-K方程有這個性質:

                                             \large P(u+v) =P(u)*P(v)

         具體證明請檢視書本。

          那麼根據ck方程我們很容易通過一步轉移概率矩陣求多步轉移概率矩陣:

          令\large u=1,v=n-1,代入上式得:

                                               \large P(n) = p(1)*p(n-1) = p*p*p(n-2) = p^n

          簡單來說就是對於其次馬氏鏈來說,n步轉移概率矩陣就是一步轉移概率矩陣的n次方。

有這個等式就簡單了,如果需要求n轉移概率矩陣,我們只需要求出一步轉移概率矩陣,然後n次方一步轉移概率矩陣就可以了,這裡就考驗大家的矩陣基礎了,這裡舉個例子如何求矩陣的m次方的例子(在科學計算包只需一個函式介面就可以完成計算,很簡單):

 遍歷性:

  《概率統論與數理統計》第四版328頁

這裡我先簡單的說明一下,然後在給出書面定義,這裡大家需要理解\large p_{ij}是什麼意思,根據可以知道,根據我們前面的舉例,天氣,ij其實代表的就是昨天和今天的意思,這裡大家需要注意,詳情請檢視書本。下面介紹遍歷性,所謂遍歷性,就是說無論我從什麼狀態開始,經歷多次轉移以後,最後都會到達一個狀態,那麼滿足這樣的馬爾科夫性性就稱為具有遍歷性,下面給出書面的定義:

例子 

       我們先來看馬氏鏈的一個具體的例子。社會學家經常把人按其經濟狀況分成3類:下層(lower-class)、中層(middle-class)、上層(upper-class),我們用1,2,3分別代表這三個階層。社會學家們發現決定一個人的收入階層的最重要的因素就是其父母的收入階層。如果一個人的收入屬於下層類別,那麼他的孩子屬於下層收入的概率是0.65,屬於中層收入的概率是0.28,屬於上層收入的概率是007。事實上,從父代到子代,收入階層的變化的轉移概率如下

使用矩陣來表示,即概率的轉移矩陣為:

 假設當前這一代人處在下層、中層、上層的人的比例是概率分佈向量\pi _0 = [\pi _0(1),\pi _0(2),\pi _0(3)],那麼他們的子女的分佈比例將是\pi _1 = \pi _0P,他們的孫子代的分佈比例將是\pi _2 = \pi _1P=\pi _0P^2=,....,,,第n代子孫的收入分佈比例將是\pi _n = \pi _{n-1}P=\pi _0P^n

 假設初始概率分佈為\pi _0=[0.21,0.68,0.11],則我們可以計算前n代人的分佈狀況如下:

我們發現從第7代人開始,這個分佈就穩定不變了,這個是偶然的嗎?我們換一個初始概率分佈\pi _0 = [0.75,0.15,0.1]試試看,繼續計算前n代人的分佈狀況 如下:

我們發現,到第9代人的時候,分佈又收斂了。最為奇特的是,兩次給定不同的初始概率分佈,最終都收斂到概率分佈\pi =[0.286,0.489,0.225],也就是說收斂的行為和初始概率分佈\pi _0無關。這說明這個收斂行為主要是由概率轉移矩
P決定的。我們計算一下P^n:

  我們發現,當n足夠大的時候,這個P^n矩陣的每一行都是穩定地收斂到\pi =[0.286,0.489,0.225]這個概率分佈。自然的,這個收斂現象並非是我們這個馬氏鏈獨有的,而是絕大多數馬氏鏈的共同行為,關於馬氏鏈的收斂我們有如下漂亮的定理: 

大家通過這個例子應該可以理解平穩性 即遍歷性,希望大家可以深入理解馬爾科夫鏈,因為下幾節會使用到,本節到此結束。

注:例子來源《LDA數學八卦》