之前試圖學過Coursera上講馬爾科夫隨機場的課程,發現聽不太懂,原因是那傢伙一上來簡單介紹一下馬爾科夫隨機場是什麼樣子的就開始Graphcut了。但是到底什麼是馬爾科夫隨機場。為什麼馬爾科夫隨機場可以那樣去定義和推導。這些都沒有怎麼講清楚,於是聽了個稀裡糊塗的。這次系統學了一下機率圖,對這個問題有了比較清晰的認識,這裡簡單談一下自己的理解。
如果沒有另加說明,為了敘述方便,以下的變數都是二值0-1的離散變數。
一、機率圖
所謂機率圖,就是把機率關係用圖表示出來。所謂機率關係,其實就是指的獨立性。這是什麼意思呢。舉個例子,比如我有兩個變數X1和X2,這兩個變數是獨立的,用圖描述出來就是沒有任何串連的兩個單點。而如果這兩個點是有關係的(不獨立),那麼中間就有一條邊。為什麼要這樣去搞呢。因為用圖去描述非常的清晰,獨立性一目瞭然,而且非常簡潔。比如要描述剛才的兩個變數獨立,我們要給出X1,X2的聯合機率分布,即P(X1=i,X2=j),如果是二值的話,則需要4個式子去描述(由於相加等於1,實際上是3個參數)。但是用機率圖的話,畫了兩個單點就表示這兩個點獨立,那麼只需要單獨給定P(X1=i)和P(X2=j)就可以了,需要2個參數。
可能你會覺得例子太過抽象,還是不太理解為什麼要這麼做,那麼舉一個簡單的例子。比如我想推斷一下今天北京天氣晴朗且倫敦天氣晴朗的機率。首先從常識我們大致可以推斷出,這兩個事件應該是獨立的,那麼我們的機率圖就可以畫成兩個單點。於是我們只要分別指定北京天氣晴朗和倫敦天氣晴朗的機率就可以了,而不需要考慮他們的聯合分布。可能你會覺得這個例子說明不了問題,因為即使不用機率圖,我也知道只需要把單獨的機率乘起來就可以了。這是因為這個例子太過簡單了(為了說明核心思想),實際問題中往往涉及很多節點和很多值的變數,那個時候機率圖的優勢就非常明顯了。試想一下,假設我們有A-Z共24個變數,這其中有很多很多的獨立關係,你能保證用非機率圖的方法自己不亂套嗎。但是如果畫成圖的話,這個關係一目瞭然,非常清晰。
在機率圖中有一個非常重要的問題,就是機率圖描述的圖和原問題到底是不是等價的。解決了這個問題我們才可以放心大膽地使用它。通過人們的研究,找出了機率圖和它能描述的機率關係之間的關係,這個會在下一節針對馬爾科夫隨機場詳細說明。
除了機率關係(獨立性),我們還需要把機率放上去,就是類似於P(X1=1,X2=1,X3=1)=0.1 這樣的機率放到圖裡面去,這樣的話,我們就可以完全用機率圖來做了(前面的例子裡面實際是有這一步的,只是沒有特意強調)。可能你會說,如果加上這個機率描述的話,不就和原先沒什麼區別了嗎。因為原先也就是一堆這樣的機率值呀。需要注意的是,這裡面我們要添加的機率值是不一樣的。之前由於我們沒有事先確定獨立性關係,因此這種機率需要把所有變數都囊括進來,比如有是三個變數,我們就需要把P(X1,X2,X3)都列出來共8種情況,我們需要保留7個獨立的參數來描述它。 這裡假設我們知道了X1,X2,X3是相互獨立的,那麼我們可以先用圖來表示出來這個機率關係(就是他們三個沒有直接的邊相連),然後再用簡化的機率去描述,即分別用三個機率P(X1),P(X2),P(X3)去描述,只需要3個獨立的參數就可以了。
通過上面的例子我們可以看出來,機率圖的建模分為兩個步驟。第一,用機率圖的結構來描述機率關係。第二,加入機率值進行完整描述。
二、馬爾科夫隨機場
(摘自古槿老師機率圖課程ppt)
為什麼說了一堆機率圖呢。是因為馬爾科夫隨機場其實就是一種機率圖,叫做無向圖,所謂無向圖就是用沒有方向的線串連節點構成的圖。注意我們機率圖的目的是為了描述機率關係,在馬爾科夫隨機場中,有線相連的兩個節點就是不獨立的。但是沒有線相連的節點一定是獨立的嗎。答案是否定的。只要兩個節點之間有一條通路,這兩個節點就是不獨立的(間接有關係)。 仔細想一下,如果節點有通路就不獨立的話,那豈不是馬爾科夫隨機場中所有的節點都不是獨立的了。這樣的話,比如我要求某個節點表現出0的機率,那麼我就需要確定所有其他變數對它造成的影響,這實在是太不簡潔了。因此在馬爾科夫場中還有一個性質,就是如果一個點的直接相鄰節點都確定了的話,那麼這個點的機率就和所有非相鄰節點都獨立了,這也就是所謂的馬爾科夫性。也就是說,假如我已知X12和X21的取值的話,那麼X11的取值僅和他們有關,與其餘的所有節點都無關。
到了這裡我們完成了第一步:描述獨立關係,實際也就是把機率圖的骨架結構確定了。第二步我們需要把機率值加入。
所謂的機率值,用最最最一般的方式描述就是完整的聯合機率分布,即P(X11=i,.....,X34=p) = c. 這樣的機率。但是這時候我們通過骨架描述已經確定了獨立關係,就有一些獨特的性質在裡面。下面就是馬爾科夫隨機場最最重要的一個地方了。
看上面的隨機場,假設我們想要確定X23=1的機率,P(X23=1),根據馬爾科夫性,只要我們確定了X13,X22,X24和X33,那這個機率就唯一確定了。也就是說,我們需要確定P(X23,X13,X22,X24,X33)的聯合機率分布。這個式子還是太龐大了,於是我們想,它能不能拆成再簡潔一點的式子。這裡,根據一些理論(後面會提到),我們只需要考慮兩種關係就好了,分別叫做unary potential(一元變數)和binary potential(二元變數)。這也就是說:
其中的Pi表示連乘,也就是把一元變數和二元變數都乘起來。這裡面Z是一個歸一化因子,就是把所有的機率加起來(因為機率值之和應該等於1)。這樣相當於把機率泛化了,因為上面的P(Xi),P(Xi,Xj)其實不是機率了(把他們乘起來再歸一化後才是)。那麼問題來了,為什麼只需要這兩種變數描述聯合機率。為什麼我們不需要考慮P(Xi,Xj,Xk)這樣的關係呢。這裡就涉及所謂圖論的知識了,不加證明地進行引用(一般書裡這麼說的話就是作者也不太知道怎麼證)。
上面的隨機場其實就是一個圖,包括節點和邊。這個理論是說,在計算聯合機率分布的時候,我們只需要考慮所有的完全串連子圖的關係就可以了。什麼叫完全串連子圖呢。指的就是完全相連的節點集合。比如一個節點是一個完全鄰接子圖,兩個節點只需要把他們串連起來就是一個完全鄰接子圖了,而三個節點則需要兩兩相連,則需要3條邊,四個節點就需要6條邊了。也就是說,我們只需要對所有的完全鄰接子圖分配一個關係P(Xi,...,Xj)即可。
再來看一下上面的隨機場。首先,所有的單點都是一個完全鄰接子圖,因此我們有P(Xi);所有的兩個點也構成了完全鄰接子圖,因此有P(Xi,Xj)。但是,任意三個節點都不是完全串連的,所以到二元變數就打住了。這也就有了上面的分解。所謂的分解定理告訴我們,這樣的分解是沒問題的。另外,由於Z是把所有的聯合機率可能取值加在一起,它對所有的Xi的取值都是一樣的,因此在計算P(Xi,...,Xj)的時候不需要考慮它。去掉Z後,上面的機率還是有些不夠實用,因為它居然是連乘起來的。這裡是一個比較常用的處理方法,就是取負對數。
其中N表示的是相鄰。到此為止,終於走到了MRF中最常用的能量函數的形式。下面將有兩篇博文分別談談MRF的解法(Graph Cuts)以及這篇博文裡用到的知識與Deep Learning之間的關係。