1、最大熵模型
最大熵模型描述的是這麼一種情況,即在有約束條件的情況下,如何得到最好的模型。我們先來考慮如果沒有約束的條件下,如何獲得最好的模型,舉個栗子,比如一個骰子,有6個面,轉一次,求每個面的概率,根據經驗,每個面的概率是1/6,這其實就是我們讓整個系統熵最大。
那麼什麼是在有約束條件下概率最大呢,比如這時告訴你其中點數爲4的概率爲1/3,那麼現在這種情況下,每個面的概率是多少呢?\(p(點數=4) = 1/ 3\),\(p(點數=1) = p(點數=2) = p(點數=3) = p(點數=5) = p(點數=6) = (2/3) / 5\),這種就是在約束條件下熵最大。本文介紹將最大熵模型如何用於分類任務。
給定一個訓練數據集
\[ {(x_{1},y_{1}), (x_{2},y_{2}),(x_{3},y_{3}) .........(x_{n},y_{n})}
\]
我們的目標是得到條件概率\(p(y|x)\)即我們對於給定未知的一個變量\(X\),我們會得到在每個標籤上最大的概率值,我們取最大的概率值所對應的標籤作爲最終的標籤。計算條件概率\(p(y|x)\)的方法有很多,其中,樸素貝葉斯是一種方法,當然,我們也可以利用最大熵模型來得到這個概率值。首先,根據熵最大的模型是最好的模型,我們這裏定義條件熵。即
\[ H(p(y|x)) = - \sum\limits_{x,y} \tilde{p}(x) p(y|x) \log p(y|x) \tag{1}
\]
如果在沒有約束的條件下,我們直接求式子(1)即可,但是這樣算下來所有的條件概率是均等的,沒有意義,所以我們想有哪些約束條件呢?首先,我們肯定希望得到的模型和能夠和數據集的整體分佈是一樣的。我們先定義一個特徵函數
\[ f(x,y) =
\left \{
\begin{array}{**lr**}
1 , x,y滿足某些條件 & \\
0 否則 &
\end{array}
\right.
\]
這裏滿足某些條件聽起來不知道是在幹什麼,當我看來GIS用於文本分類的代碼後,才發現,其實如果一條數據中,如果\((x_{i},y_{j})\)出現,那麼f(x,y)就爲1,不出現,則爲0。我們的約束條件是希望得到的模型可以很好的表現數據集,那用什麼表示呢,我們用特徵函數關於經驗分佈\(\tilde{p}(X|Y)\)的期望值和特徵函數關於模型\(P(Y|X)\)的期望來表示,先給出特徵函數關於經驗分佈\(\tilde{p}(X|Y)\)的期望值
\[ E_{\tilde{p}}(f) = \sum\limits_{x,y} \tilde{P}(y|x) f(x,y) \tag{2}
\]
這個經驗分佈的數學期望是一個定值,我們可以根據數據集來求出,對於文本分類來說,$E_{\tilde{p}} (f_{i}) = $ x,y出現的個數/文檔總數。接着我們給出特徵函數關於模型的的期望值
\[ E_{p}(f) = \sum\limits_{x,y} P(y|x) f(x,y) \\
= \sum\limits_{x,y} p(x,y)f(x,y) \\
= \sum\limits_{x,y} p(x)p(y|x) f(x,y) \\
= \sum\limits_{x,y} \tilde{p}(x)p(y|x) f(x,y) \tag{3}
\]
由於\(p(x),p(x,y)\)不好求,所以用\(p(x,y) = \tilde{p}(x) p(y|x)\)來代替。那麼,我們的期望是將兩者劃等號,即
\[ E_{\tilde{p}}(f) = E_{p}(f) \tag{4}
\]
那麼根據上述公式,我們可以得到最大熵模型的公式和其約束條件
\[ \max \limits_{P \in C } H(p(y|x)) = - \sum\limits_{x,y} \tilde{p}(x) p(y|x) \log p(y|x) \\
s.t E_{\tilde{p}}(f) = E_{p}(f) i=1,2,3....n \\
\sum\limits_{y} p(y|x) = 1
\]
至此我們得到最大熵模型的公式,接下來,我們就求解p(y|x)
2、最大熵模型推導
我們將公式進行轉換,將最大值改爲求最小值,這樣我們就能引入拉格朗日乘子
\[ \min \limits_{P \in C } - H(p(y|x)) = \sum\limits_{x,y} \tilde{p}(x) p(y|x) \log p(y|x) \\
s.t E_{\tilde{p}}(f) = E_{p}(f) i=1,2,3....n \\
\sum\limits_{y} p(y|x) = 1
\]
引入拉格朗日乘子得到
\[ L(p,w) = \sum\limits_{x,y} \tilde{p}(x) p(y|x) \log p(y|x) + w_{0}(\sum\limits_{y} p(y|x) - 1) + \sum\limits_{i=1}{n} w_{i}(E_{\tilde{p}}(f) - E_{p}(f)) \tag{5}
\]
最優化的原始問題是
\[ \min \limits_{P \in C } \max \limits_{w} L(p,w) \tag{6}
\]
對偶問題是
\[ \max \limits_{w} \min \limits_{P \in C } L(p,w) \tag{7}
\]
首先對p(y|x)進行求導
\[ \frac {\partial L(p)}{p(y|x)} = \sum\limits_{x,y} \tilde{p}(x) (\log p(y|x) + 1) + \sum\limits_{y} w_{0} - \sum\limits_{i=1}{n} w_{i} \sum \limits_{x,y} \tilde{p}(x) f_{i}(x,y)
\]
由於\(\sum\limits_{x} \tilde{p}(x) = 1\),所以原式等於
\[ \frac {\partial L(p)}{p(y|x)} = \sum\limits_{x,y} \tilde{p}(x) (\log p(y|x) + 1) + \sum\limits_{x} \tilde{p}(x) \sum\limits_{y} w_{0} - \sum \limits_{x,y} \tilde{p}(x) \sum\limits_{i=1}^{n} w_{i} f_{i}(x,y) \\
= \sum\limits_{x,y} \tilde{p}(x) ( \log p(y|x) + 1 + w_{0} - \sum\limits_{i=1}^{n} w_{i} f_{i}(x,y) ) \tag{8}
\]
由於\(\sum\limits_{x,y} \tilde{p}(x) > 0\)那麼我們令後面部分爲0
\[ \log p(y|x) + 1 + w_{0} - \sum\limits_{i=1}^{n} w_{i} f_{i}(x,y) = 0 \\
\log p(y|x) = \sum\limits_{i=1}^{n} w_{i} f_{i}(x,y) - w_{0} - 1 \\
p(y|x) = \frac {\exp \sum\limits_{i=1}^{n} w_{i} f_{i}(x,y)} {\exp (w_{0} + 1)} \\
由於 \sum\limits_{y} p(y|x) = 1 \\
所以 \exp (w_{0} + 1) = \sum\limits_{y} \exp \sum\limits_{i=1}^{n} w_{i} f_{i}(x,y) \\
帶入得 \\
p(y|x) = \frac{1} {Z_{w}(x)} * \exp \sum\limits_{i=1}^{n} w_{i} f_{i}(x,y) \\
Z_{w}(x) = \sum\limits_{y} \exp \sum\limits_{i=1}^{n} w_{i} f_{i}(x,y)
\]