當前位置:編程學習大全網 - 編程語言 - 最大熵模型和條件隨機場

最大熵模型和條件隨機場

如何理解最大熵模型,先從壹個給預測值從 實數域到概率值 的轉換 再用最大熵構造特征的思想的角度來理解最大熵模型。

考慮壹個解決k分類問題的手段,對每個類別做壹個分類器,對於壹個分類器而言,類別就變成 "是這個類別" 和 "不是這個類別" 。 那麽最後對這k個分類器輸出的值選擇壹個最大分類器輸出值的那個分類來作為類別結果。那麽我們使用最簡單線性回歸來做這個事情(回歸壹樣也能做分類,只是要經過修改,但是不修改也同樣能做)。

也就是以下:(為了方便快速,直接截圖抄CBB老師PPT上面的式子。)

是輸入向量。考慮k分類 。

k個分類器模型:

那麽我們取結果:

但是我們的輸出值是在實數域上的,感覺不是很友好(雖然說其實是有意義的,數值越大,說明模型對自己的預測越有信心,甚至說我們想讓模型做出有信心的預測,拋棄掉在離中心0比較近的那些預測---這個就是SVM的核心思想margin),所以考慮把實數上的值做壹個映射,映射到[0,1]範圍上來。類似softmax,我們可以做壹個這樣的事情:

這個就是我們從實數域轉換到[0,1]上的方法。

然後介紹最大熵模型包括後面的條件熵模型最常用的特征選擇的技巧。

考慮:

這個式子可以定性地理解為,不同的特征(x)設置好了不同的權重(w),對預測結果的影響。雖然說w是訓練的,但是假設,我們有大量的訓練數據,對於壹個類別 出現的時候x中的某個特征 (為了方便討論,這裏假設x上面特征的值都是0或者1。)也就是說某個對 老是出現。那麽模型要往這個方向趨近,明顯對於 這個分類器而言,他壹定會認為 貢獻比較大,從而對應的參數會學習出來比較大。

那麽我們不是直接讓機器學習所有的x特征,而是讓機器學習從x特征上挖掘出來的特征。(之後說的特征都是指挖掘出來的特征。x就稱為輸入向量。)

那麽對於輸入向量x,明顯我們可以做 是否出現 這樣的特征。

形式化就是

並且對於特征,應該有不同的權值,而這個權值就是我們想要學習的參數。

從而有以下模型:

其中:

就是推導之後的最大熵模型。

這種解釋,比起直接給出形式,給出經驗期望和真實期望相同條件來推導能夠更好理解什麽是特征函數,也是最大熵的重要特點。

但是只有這樣的話,還是感覺不出來最大熵是如何操作的,這裏給出壹個老師課上的實例(特別棒!!!):

考慮自然語言處理 裏面填詞問題:

語料庫(訓練數據):

I would like to play basketball.

I like to eat french fries.

I want to play football.

I go to watch moves.

Do you want to play chess.

I play games.

考慮壹個填詞預測問題:

輸入:

Do you like ___ play games?

我們控制壹下特征相關,只考慮單詞的左右相鄰的兩個單詞。

比如上述的問題,輸入特征為 you like play games 這4個單詞。

同時我們的語料庫應該處理成:

I -> would like

would -> I like to

like -> I would to play

to -> would like play basketball

play -> like to basketball

...

然後我們可以考慮設置特征:

特征的設置是隨意的,往往是可以根據人為地去了解數據,觀察數據。比如我會設置以下:

f(x=play,y=to) 。(這裏的特征的含義就認為x中存在play,後面也壹樣,因為理論上x應該是4個詞的序列。)

f(x=like,y=to)。

f(x=like,y=I)。

f(x=play,y=I)。

f(x=interesting,y=I)。

這樣,咱們可以根據上述的來進行計算了。

對於我們的輸入___邊上四個單詞是you like play games

假設我們已經通過訓練數據訓練好了模型的參數

從而我們可以計算:

並且獲得分類的結果。

可以考慮序列標註這個問題。(最大熵和條件隨機場都能做這個問題,特別是條件隨機場在這個問題上是歷史優秀的。)

考慮用最大熵來做序列標註,這裏有兩個思路:

1:直接首先將序列標註問題看作分類問題,假設序列y的長度有n個,並且序列上的元素的狀態有m種,那麽這個類別壹***有 個。這個會帶來類別指數爆炸問題(要求數據量,計算量。)

2:考慮每次只預測壹個序列中的壹項,壹項項預測過去,然後最後得出序列。明顯這個有問題,根本就失去了序列中元素的前後順序關系。

那麽如何解決這個問題呢?

由上圖,我們可以預測壹個子序列,比如上面,我們預測 。這樣類別也就 種。還是可以接受的。

直接理解例子:

解決上面問題的最大熵模型:

解釋壹下:

經典的熵模型:

其思想就是在設置好的特征之後,希望我們的概率模型p(x,y),對於我們設置好的特征的期望 等於 樣本對於特征的期望。

註意這裏的“希望”,因為我們根本就沒有辦法確定p(x)的真實概率。所以在計算我們概率模型的期望的時候借用 也就是樣本中x出現的概率。包括我們的優化目標熵。

另外我們使用的熵是條件熵。

並且用上面的“希望”思路來化簡這個條件熵。

從而得到下面的式子:

其中:

其中p(y|x)是已經知道的,用softmax壹樣的手段,以及特征挖掘來模擬的。

利用最大熵原則進行建模壹般不存在解析方法。但是可以使用梯度下降等手段。

如果對其分析求導後,可以發現模型就是最上面說到的模型。

寶寶老師PPT上另外壹個不錯的例子:

總之,如果要使用最大熵的話,只要設計好特征,然後有了“”概率“”的對應公式,然後求解即可。

圖模型是用來研究若幹個隨機變量的聯合分布的問題的,壹般隨機變量之間因為有壹些關系,不獨立,從而會有連邊。

具體就不細講了。

壹般有兩個分類:

處理圖模型的想法也很簡單,就是分區來處理。

比如:

引入最大團的概念,把圖分區成壹個個最大團。

然後對團設計壹個勢函數。

直接上老師的PPT,不打公式了。

註意勢函數,其實相當於把壹個團 結合成壹個數值。

把這個數值歸壹化就能當做這個團的概率。

然後整個聯合分布就是由所有團的概率的乘積。

具體勢函數的選擇,也同樣是類似softmax + 特征選擇 技巧。(這裏 沒有具體指定,所以沒有體現特征選擇,但是其實我們可以使用最大熵裏面那個特征選擇的線性組合函數。其實這樣就和條件隨機場很接近了!)

要知道,在無向圖上面找最大團這個是壹個不容易的問題,現在都還沒有多項式的求解方法。那麽條件隨機場就直接假定了 相鄰兩個隨機變量 為壹個團。

因為自然語言處理裏面語句都是壹條條的,並且壹般比較看相鄰的兩個詞之間的關系,所以這裏主要介紹鏈式的條件隨機場,其他的結構也是壹樣的。

有了前面的思想。其實條件隨機場的模型就已經出來了。

可以知道,條件隨機場模型,我們可以從多個角度去看。

1) 無向圖模型。團的勢函數 用上softmax 以及 特征提取的思想。

2) 最大熵模型在預測整個序列的時候,假設子序列之間獨立從而分解成預測壹個個子序列。

其實上面兩個角度是統壹的。

並且可以結合以上的思想,我們可以發現最重要的還是特征思想,以及轉換成概率模型進行求解。

而做序列標註問題,用維特比算法求解即可。

  • 上一篇:如何編程廣西真空貼片機
  • 下一篇:如何部署hadoop分布式文件系統
  • copyright 2024編程學習大全網