1. 程式人生 > >NLP --- 隱馬爾可夫HMM(極大釋似然估計詳解)

NLP --- 隱馬爾可夫HMM(極大釋似然估計詳解)

上一節我們介紹了隱馬爾可夫的第三個基本問題的解決方案,但是遇到的問題是在如果語料庫沒有給出狀態轉移概率則就不能使用最大釋然估計了,因此使用EM演算法可以解決,在理解EM演算法之前需要理解最大釋然估計,本節就詳細的探討一下最大釋然估計,下面正式開始:

極大似然估計

這裡先舉一個簡單的例子:

       一對師徒去上山打獵,在山上同時發現了一隻兔子,兩師徒同時開了槍,結果兔子被打中了,那麼問題是兔子是誰打死的呢?

       正常情況下應該都是認為是師傅打中的,其實當我們這樣認為時就已經在使用極大似然思想了。那“似然”是什麼呢?根據字面的意思理解就是“似”是似乎、幾乎、可能的意思,因此似然其實就是可能性。因此極大似然就是最大的可能性的意思了。我們選擇師傅打中的原因,就是認為師傅是最有可能打中的,因此這就是極大似然的最通俗的理解了。

       回到生活中,我們幾乎處處都在使用“極大似然”,很多時候我們沒機會,也沒能力去探究事物的真相,我們最簡單也是最高效的方法就是去估計。當你去找工作時,別人很有可能會問你來自哪所學校?你的文憑如何?你得過什麼獎?記住,任何指標都不能確認你是一個多麼優秀的人,指標只能確定你是優秀人才的可能性。
      在繼續討論“極大似然”之前,我們要補充機器學習中非常重要的一個假設,那就是資料獨立同分布(independent and identically distributed,i.i.d.)條件。獨立同分布假設資料與資料是獨立的,就比如信用卡發放任務中,每一張使用者填寫的表格是相互獨立的,但該任務的所有資料又都來自於同一個概率分佈函式,這就使得我們可以模擬出己知資料的概率分佈模型,同樣也可以運用在未來的任務中。有了i.i.d.條件,就可以構造極大似然估計。
       在機器學習中,我們一般的分類問題可以表示為輸入x得到y 的類別,那麼用概率描述就是在x的條件下分類為y的概率即可以使用條件概率進行描述分類問題\large P(y|x)

,但是呢,一般我們不可能那麼簡單的就得到我們的條件概率公式,裡面會有位置引數的,因此我們把條件概率可以寫成\large P(y|x;\theta ),其中\large \theta是待求引數,這裡解釋一下,為了方便,概率函式只進行了二分類,也就是輸出0或1。那麼如何去判斷\large P(y|x;\theta )的好壞呢?很簡單,那就是該概率函式在己有的資料上發生的概率最高,也就是說我們的目的是使其概率最大,而概率的大小和引數\large \theta有關,那麼就轉換成在某個引數的情況下的概率最大值的問題,也就是說我們能不能找到一組引數\large \theta,使的這個概率的值是最大的,這既是極大釋然估計了。下面我們推倒數學公式,考慮到資料是相互獨立的,因此可以對每一條資料對應的概率函式進行求積,就得到了下式:

                                                    \large L(\theta ) = \prod_{i=1}^{m}P(y_i|x_i;\theta )

                                                 \large \left ( 1 \right )

上式的函式我們稱為釋然函式,而我們就是通過這個式子求出該函式取得最大值時\large \theta對應的值,也就是極大釋然估計。

但這裡的困難在於連乘計算對於計算機來說資源耗費比較大,容易使記憶體下溢,我們有什麼方法可改變連乘的缺點呢?把連乘改為連加就好了,可以做到嗎?答案是肯定的,取對數就可以了,對數的性質大家沒忘吧,我們把使用的對數的性質拿過來,如下所示:

                                                     \large log_a(MN) = log_aM+log_aN                                   \large \left ( 2 \right )

這樣我們把\large \left ( 1 \right )式取log得到如下式:

                                                    \large ln(L(\theta )) = \sum_{i=1}^{m}ln(P(y_i|x_i;\theta ))                                   \large \left ( 3 \right )

上面就是我們常規的釋然函式的定義,但是在機器學習中,我們一般都是求極小值或者平均值,那如何改呢?很簡單加一個負號就是極小了,除以求和的個數m就是均值了,因此 \large \left ( 3 \right )就可以改為如下表達式了:

                                                  \large J(\theta )= ln(L(\theta )) = -\frac{1}{m}\sum_{i=1}^{m}ln(P(y_i|x_i;\theta ))             

假設機器學習演算法\large f(x)就是概率函式\large P(y|x),需要注意的是如果真實的標記y是0,那麼預測的\large f(x)應該也是接近於0,但是公式又不允許0的出現,因此在預測值為0的情況下,預測值使用 \large 1-f(x)來代替,最後代價函式如下所示:

                                 J(\theta )= ln(L(\theta )) = -\frac{1}{m}\sum_{i=1}^{m}(y_ilnf(x_i;\theta )+(1-y_i)ln(1-f(x_i;\theta )))

上式看起來可能很複雜,但是其實很簡單,假如x 的真實分類為y=1,則我們就會使用上式求和第一項,第二項為0了不參與計算,如果真實分類為0.則我們使用求和第二項,第一項不參與計算,這個式子恰好避免了,當真實樣本為0時無法求值的問題,同時上式也被稱為交叉熵。好,到這裡我們舉一個最大釋然的例子,這樣大家理解的會更深入。

這裡使用Logistic迴歸演算法原理為例進行講解,這樣大家不僅可以理解最大釋然還可以理解Logistic迴歸原理:

Logistic迴歸演算法

先給出Logistic迴歸的sigmod函式數學表示式:

                                                                      \large f(x)=\frac{1}{1+e^{-x}}

 很簡單的表示式,再看看它的性質,當\large x\rightarrow +\infty時,\large e^{-x}\rightarrow0,因此\large f(x)\rightarrow 1

                                                           當\large x\rightarrow- \infty時,\large e^{-x}\rightarrow+ \infty,因此\large f(x)\rightarrow 0

Logistic迴歸之所以稱為Logistic是因為只有兩個狀態即0和1,這也是數電中的邏輯數即布林數,那麼為什麼需要這樣的迴歸呢?因為針對二分類問題,有兩個這樣的輸出是最好不過了,但是具有邏輯性質還有其他函式,為什麼就選擇這這個函式呢?

現實中確實存在這樣的訊號,通訊專業的同學都知道有一個訊號是階躍函式,該函式在0這一點瞬間改變到1,但是這個訊號的瞬間跳躍很難處理,或者說頻率太高而無法處理,而sigmod函式很好的處理了高頻特性,他雖不是一瞬間改變狀態,但是當數很大時很接近了,同時在0的左右處於非線性區間,這對後面的深度學習的啟用函式很有用,今天就不深入講了,等到後面實戰深度學習在好好探討該函式的其他性質。 

        實現Logistic迴歸的分類器,我們可以在每個特徵上都乘以一個迴歸係數,然後所有的結果相加,將這個總和代入上面的sigmod函式中,進而得到0~1的數值,把大於0.5 的資料分為1類,把小於0.5的分為0類,所以Logistic迴歸也是一種概率估計。

確定好分類器後,剩下的就是找到一組最佳迴歸係數,這個迴歸係數如何找 ?這屬於優化問題,優化問題,經常使用的是梯度下降演算法, 在上篇的部落格中,詳細的探討了什麼是梯度,為什麼梯度總是沿著函式增加的方向,梯度下降又是什麼?在上篇部落格中詳細的解說了,不懂的可以檢視我的這篇部落格

        我們知道了,所謂梯度其實就是一階函式的一階偏導所組成的向量,因此我們只需要求出一階偏導,代入x,梯度就找到了,但是呢我們的函式是含有未知數的即\large z = w_{0}x_{0}+w_{1}x_{1}+w_{2}x_{2}+.....+w_{n}x_{n},其中【\large w_{0},w_{1},,,,,w_{n}】是未知數,有未知數怎麼求導,又怎麼求該點的梯度呢?這時候就需要我們概率論的方面的知識了即最大釋然估計了,直接給出最大釋然的推倒工程的公式了:

上面的公式就是我們最後說的那個公式。

      先解釋一下上面的符號意義,如果知道釋然估計的同學,應該都能理解所謂的\large \Theta其實就是我們要求的權值向量\large W了,因為最大釋然估計的意義就在於找到一組引數\large \Theta,使得發生的概率最大,例如Logistic迴歸的分為0或者1的概率最大,那既然已經求得表示式了。此時就可以求梯度了,根據上一篇的梯度理解可知對\large \Theta求偏導就好了:

需要解釋一下,下面屬於鏈式求導。

很簡單吧,到這裡,本節就結束了,下一節將詳細介紹EM演算法。其實我還是建議大家看看概率論課本的定義,相信有上面的理解再看課本應是很容易的事了。