最大熵模型(maximum entropy model, MaxEnt)也是很典型的分類算法了,它和邏輯迴歸相似,都是屬於對數線性分類模型。在損失函數優化的過程當中,使用了和支持向量機相似的凸優化技術。而對熵的使用,讓咱們想起了決策樹算法中的ID3和C4.5算法。理解了最大熵模型,對邏輯迴歸,支持向量機以及決策樹算法都會加深理解。本文就對最大熵模型的原理作一個小結。html
在決策樹算法原理(上)一文中,咱們已經講到了熵和條件熵的概念,這裏咱們對它們作一個簡單的回顧。算法
熵度量了事物的不肯定性,越不肯定的事物,它的熵就越大。具體的,隨機變量X的熵的表達式以下:微信
\[ H(X) = -\sum\limits_{i=1}^{n}p_i logp_i \]函數
其中n表明X的n種不一樣的離散取值。而\(p_i\)表明了X取值爲i的機率,log爲以2或者e爲底的對數。post
熟悉了一個變量X的熵,很容易推廣到多個個變量的聯合熵,這裏給出兩個變量X和Y的聯合熵表達式:學習
\[ H(X,Y) = -\sum\limits_{i=1}^{n}p(x_i,y_i)logp(x_i,y_i) \]優化
有了聯合熵,又能夠獲得條件熵的表達式H(Y|X),條件熵相似於條件機率,它度量了咱們的Y在知道X之後剩下的不肯定性。表達式以下:ui
\[ H(Y|X) = -\sum\limits_{i=1}^{n}p(x_i,y_i)logp(y_i|x_i) = \sum\limits_{j=1}^{n}p(x_j)H(Y|x_j) \]url
用下面這個圖很容易明白他們的關係。左邊的橢圓表明H(X),右邊的橢圓表明H(Y),中間重合的部分就是咱們的互信息或者信息增益I(X,Y), 左邊的橢圓去掉重合部分就是H(X|Y),右邊的橢圓去掉重合部分就是H(Y|X)。兩個橢圓的並就是H(X,Y)。spa
最大熵模型假設分類模型是一個條件機率分佈\(P(Y|X)\),X爲特徵,Y爲輸出。
給定一個訓練集\({(x^{(1)},y^{(1)}), (x^{(2)},y^{(2)}), ... ,(x^{(m)},y^{(m)})}\),其中x爲n維特徵向量,y爲類別輸出。咱們的目標就是用最大熵模型選擇一個最好的分類類型。
在給定訓練集的狀況下,咱們能夠獲得整體聯合分佈\(P(X,Y)\)的經驗分佈\(\overline{P}(X,Y)\),和邊緣分佈\(P(X)\)的經驗分佈\(\overline{P}(X)\)。\(\overline{P}(X,Y)\)即爲訓練集中X,Y同時出現的次數除以樣本總數m,\(\overline{P}(X)\)即爲訓練集中X出現的次數除以樣本總數m。
用特徵函數\(f(x,y)\)描述輸入x和輸出y之間的關係。定義爲:
\[ f(x,y)= \begin{cases} 1& {x與y知足某個關係}\\ 0& {不然} \end{cases} \]
能夠認爲只要出如今訓練集中出現的\((x^{(i)},y^{(i)})\),其\(f(x^{(i)},y^{(i)}) = 1\). 同一個訓練樣本能夠有多個約束特徵函數。
特徵函數\(f(x,y)\)關於經驗分佈\(\overline{P}(X,Y)\)的指望值,用\(E_{\overline{P}}(f)\)表示爲:
\[ E_{\overline{P}}(f) = \sum\limits_{x,y}\overline{P}(x,y)f(x,y) \]
特徵函數\(f(x,y)\)關於條件分佈\(P(Y|X)\)和經驗分佈\(\overline{P}(X)\)的指望值,用\(E_{P}(f)\)表示爲:
\[ E_{P}(f) = \sum\limits_{x,y}\overline{P}(x)P(y|x)f(x,y) \]
若是模型能夠從訓練集中學習,咱們就能夠假設這兩個指望相等。即:
\[ E_{\overline{P}}(f) = E_{P}(f) \]
上式就是最大熵模型學習的約束條件,假如咱們有M個特徵函數\(f_i(x,y) (i=1,2...,M)\)就有M個約束條件。能夠理解爲咱們若是訓練集裏有m個樣本,就有和這m個樣本對應的M個約束條件。
這樣咱們就獲得了最大熵模型的定義以下:
假設知足全部約束條件的模型集合爲:
\[ E_{\overline{P}}(f_i) = E_{P}(f_i) (i=1,2,...M) \]
定義在條件機率分佈\(P(Y|X)\)上的條件熵爲:
\[ H(P) = -\sum\limits_{x,y}\overline{P}(x)P(y|x)logP(y|x) \]
咱們的目標是獲得使\(H(P)\)最大的時候對應的\(P(y|x)\),這裏能夠對\(H(P)\)加了個負號求極小值,這樣作的目的是爲了使\(-H(P)\)爲凸函數,方便使用凸優化的方法來求極值。
在上一節咱們已經獲得了最大熵模型的函數\(H(P)\)。它的損失函數\(-H(P)\)定義爲:
\[ \underbrace{ min }_{P} -H(P) = \sum\limits_{x,y}\overline{P}(x)P(y|x)logP(y|x) \]
約束條件爲:
\[ E_{\overline{P}}(f_i) - E_{P}(f_i) = 0 (i=1,2,...M) \]
\[ \sum\limits_yP(y|x) = 1 \]
因爲它是一個凸函數,同時對應的約束條件爲仿射函數,根據凸優化理論,這個優化問題能夠用拉格朗日函數將其轉化爲無約束優化函數,此時損失函數對應的拉格朗日函數\(L(P,w)\)定義爲:
\[ L(P,w) \equiv -H(P) + w_0(1 - \sum\limits_yP(y|x)) + \sum\limits_{i=1}^{M}w_i(E_{\overline{P}}(f_i) - E_{P}(f_i)) \]
其中\(w_i(i=1,2,...m)\)爲拉格朗日乘子。若是你們也學習過支持向量機,就會發現這裏用到的凸優化理論是同樣的,接着用到了拉格朗日對偶也同樣。、
咱們的拉格朗日函數,即爲凸優化的原始問題:\(\underbrace{ min }_{P} \underbrace{ max }_{w}L(P, w)\)
其對應的拉格朗日對偶問題爲:\(\underbrace{ max}_{w} \underbrace{ min }_{P}L(P, w)\)
因爲原始問題知足凸優化理論中的KKT條件,所以原始問題的解和對偶問題的解是一致的。這樣咱們的損失函數的優化變成了拉格朗日對偶問題的優化。
求解對偶問題的第一步就是求\(\underbrace{ min }_{P}L(P, w)\), 這能夠經過求導獲得。這樣獲得的\(\underbrace{ min }_{P}L(P, w)\)是關於w的函數。記爲:
\[ \psi(w) = \underbrace{ min }_{P}L(P, w) = L(P_w, w) \]
\(\psi(w)\)即爲對偶函數,將其解記爲:
\[ P_w = arg \underbrace{ min }_{P}L(P, w) = P_w(y|x) \]
具體的是求\(L(P, w)\)關於\(P(y|x)\)的偏導數:
\[ \frac{\partial L(P, w)}{\partial P(y|x)} = \sum\limits_{x,y}\overline{P}(x)(logP(y|x) +1) - \sum\limits_yw_0 - \sum\limits_{x,y}(\overline{P}(x)\sum\limits_{i=1}^{M}w_if_i(x,y)) \]
\[ = \sum\limits_{x,y}\overline{P}(x)(logP(y|x) +1- w_0 -\sum\limits_{i=1}^{M}w_if_i(x,y)) \]
令偏導數爲0,能夠解出\(P(y|x)\)關於\(w\)的表達式以下:
\[ P(y|x) = exp(\sum\limits_{i=1}^{M}w_if_i(x,y) +w_0 -1) = \frac{exp(\sum\limits_{i=1}^{M}w_if_i(x,y))}{exp(1-w_0)} \]
因爲$\sum\limits_yP(y|x) = 1 \(,能夠獲得\)P_w(y|x)$的表達式以下:
\[ P_w(y|x) = \frac{1}{Z_w(x)}exp(\sum\limits_{i=1}^{M}w_if_i(x,y)) \]
其中,\(Z_w(x)\)爲規範化因子,定義爲:
\[ Z_w(x) = \sum\limits_yexp(\sum\limits_{i=1}^{M}w_if_i(x,y)) \]
這樣咱們就得出了\(P(y|x)\)和\(w\)的關係,從而能夠把對偶函數\(\psi(w)\)裏面的全部的\(P(y|x)\)替換成用\(w\)表示,這樣對偶函數\(\psi(w)\)就是所有用\(w\)表示了。接着咱們對\(\psi(w)\)求極大化,就能夠獲得極大化時對應的w向量的取值,帶入\(P(y|x)\)和\(w\)的關係式, 從而也能夠獲得\(P(y|x)\)的最終結果。
對\(\psi(w)\)求極大化,因爲它是連續可導的,因此優化方法有不少種,好比梯度降低法,牛頓法,擬牛頓法均可以。對於最大熵模型還有一種專用的優化方法,叫作改進的迭代尺度法(improved iterative scaling, IIS)。
IIS也是啓發式方法,它假設當前的參數向量是\(w\),咱們但願找到一個新的參數向量\(w+\delta\),使得對偶函數\(\psi(w)\)增大。若是能找到這樣的方法,就能夠重複使用這種方法,直到找到對偶函數的最大值。
IIS使用的方法是找到\(\psi(w + \delta) - \psi(w)\)的一個下界\(B(w|\delta)\),經過對\(B(w|\delta)\)極小化來獲得對應的\(\delta\)的值,進而來迭代求解\(w\)。對於\(B(w|\delta)\),它的極小化是經過對\(\delta\)求偏導數而獲得的。
因爲IIS通常只用於最大熵模型,適用範圍不普遍,這裏就不詳述算法過程了,感興趣的朋友能夠直接參考IIS的論文The improved iterative scaling algorithm: A gentle introduction。
最大熵模型在分類方法裏算是比較優的模型,可是因爲它的約束函數的數目通常來講會隨着樣本量的增大而增大,致使樣本量很大的時候,對偶函數優化求解的迭代過程很是慢,scikit-learn甚至都沒有最大熵模型對應的類庫。可是理解它仍然頗有意義,尤爲是它和不少分類方法都有千絲萬縷的聯繫。
慣例,咱們總結下最大熵模型做爲分類方法的優缺點:
最大熵模型的優勢有:
a) 最大熵統計模型得到的是全部知足約束條件的模型中信息熵極大的模型,做爲經典的分類模型時準確率較高。
b) 能夠靈活地設置約束條件,經過約束條件的多少能夠調節模型對未知數據的適應度和對已知數據的擬合程度
最大熵模型的缺點有:
a) 因爲約束函數數量和樣本數目有關係,致使迭代過程計算量巨大,實際應用比較難。
(歡迎轉載,轉載請註明出處。歡迎溝通交流: 微信:nickchen121)