熵、交叉熵及似然函式的關係

breezezz發表於2019-07-31

熵、交叉熵及似然函式的關係

1. 熵

1.1 資訊量

  資訊量:最初的定義是訊號取值數量m的對數為資訊量\(I\),即 \(I=log_2m\)。這是與位元數相關的,比如一個訊號只有兩個取值,那麼用1個bit便能將其表示。後來著名的夏農指出,得到的訊號取值結果是隨機的,因此其資訊量應該也是關於概率的函式,於是得到隨機變數\(X\)的資訊量
\[ I(X=x_i) = -logP(x_i) \]
  在機器學習中,熵是描述一個變數發生的不確定性的度量,不確定性越大,這裡麵包含的資訊量就越大。比如有的學生常年不及格,讓你預測他這次考試是否能及格,你肯定會說十有八九不會及格,也就是能否及格的確定性很大了,這時我們不會太關心其結果,因為其發生的結果太容易預料了,所以其資訊量比較小。若該學生有時候能及格,有時候不能及格,這就有點捉摸不定了,我們很難猜中他能不能及格,這時他能否及格的資訊量比較大。

1.3 熵

  既然熵是反應變數(訊號)總體不確定性的大小(資訊量大小)的度量,那麼如何確定熵的大小也就很明顯了——對所有可能的取值計算其平均資訊量,也就是求資訊量關於概率P的期望。這樣就表達了該訊號(隨機變數)的不確定性大小。
\[ H(X)=E_P[-logP(x)]=-\sum_xp(x_i)logp(x_i) \]
  當X服從均勻分佈時,X的熵的結果與最原始的資訊量的定義相同,n為訊號的取值數量
\[ H(x) = -\sum_n \frac 1 n log \frac 1 n= logn \]
實際上只有當所有事件的概率相等時,熵取最大值\(logn\)
  於是得出我個人的猜測:資訊量是描述變數取某個值時的資訊量,熵則描述其所有可能取值的平均資訊量,也就是該訊號到底取哪個值的不確定性。

2. 最大熵中的極大似然函式

  按理說熵後面應該接著說交叉熵的,但是我發現極大似然函式的對數形式與熵的定義十分相近,於是先介紹它們的來路與區別。這種形式的似然函式在最大熵模型中用到過。

  首先我先給出在最大熵模型中用到的似然函式
\[ L_{\widetilde P} = \prod_{x,y} P(y|x)^{\widetilde P(x,y)} \]
李航書中直接給出該定義,這個定義應該是由如下似然函式推導而來的
\[ L(x_1,\cdots,x_n,\theta)=\prod_x P(x)^{\widehat P(x)} \]

2.1 指數型似然函式推導

  我不知道這種形式的似然函式叫什麼名字,所以這個名字是我自己取的。指數型似然函式與我們常用的由n個樣本帶入表示的模型概率之積,也就是它們的聯合概率作為似然函式不同,在常用的似然函式L中
\[ L(x,\theta)=\prod _{i=1}^n P(x_i) \]
它的概率乘積依據於樣本數,最大熵則依據變數x的取值數量,然而這兩種方式本質都是一樣的。最大熵中的似然函式相當於把n個樣本中取值相同的整理到一起,用指數數量表示。

  假設樣本集大小為\(n\)\(X\)的取值數量為\(m\),取值集合為{\(v_1,\cdots,v_m\)}。樣本集中觀測值\(v_i\)出現的次數由\(C(X=v_i)\)表示,於是似然函式可以表示為
\[ L(x,\theta) = \prod _{i=1}^m P(x_i)^{C(X=x_i)} \]
再對該似然函式開\(n\)次方
\[ L(x,\theta)^{\frac 1 n} = \prod _{i=1} ^m P(x_i) ^{\frac {C(X=x_i)} {n}} \]
其中,
\[ \frac {C(X=x_i)} {n} = \widetilde P(x_i) \]
並且,似然函式開\(n\)次方並不影響其最大化,於是可以直接將其定義為新的似然函式
\[ L(x,\theta) = \prod _{i=1} ^m P(x_i) ^{\frac {C(X=x_i)} {n}} \]
帶入\(\widetilde P(x_i)\)簡化得到
\[ L(x,\theta) = \prod _x P(x) ^{\widetilde P(x)} \]
那麼對數似然函式便是
\[ L(x,\theta) = \widetilde P(x) \sum_x log P(x) \]

2.2 最大熵中的似然函式推導

  根據上文得出的似然函式的另一種表示後,由它便可推匯出最大熵模型中用到的對數似然函式
\[ \begin{aligned} L_{\widetilde P} =& log\prod_{x,y} P(x,y) ^{\widetilde P(x,y)}\\ =&\sum_{x,y} \widetilde P(x,y)log[\widetilde P(x) P(y|x)]\\ =&\sum_{x,y} \widetilde P(x,y)logP(y|x) + \sum_{x,y} \widetilde P(x,y) log \widetilde P(x)\\ =& \sum_{x,y} \widetilde P(x,y) logP(y|x) + constant\\ \Rightarrow L_{\widetilde P} =& \sum_{x,y} \widetilde P(x,y) logP(y|x) \end{aligned} \]
推導這個只是順便,目的還是比較指數型對數似然函式\(L=\widetilde P(x)\sum_xlog P(x)\)與熵的定義的關係。

  再回顧熵的定義
\[ H(X) = -\sum_xP(x) log P(x) \]
它們的數學形式長得確實挺像的,不過仔細看還是有很大差別,似然函式中具有經驗分佈和需要估計的模型的分佈,所以似然函式實際上是判斷估計模型與經驗分佈的相似度,最大似然估計就是讓估計模型儘可能的去接近我們得到樣本產生的經驗分佈。而熵的定義中只有概率模型本身,它表示的是該模型本身的每個取值之間的不確定性大小,或者說是該模型本身的混亂程度。而最大熵原理的思想是在面對一個未知內容較多(約束條件不足)的估計時,我們會盡量將其看做等概率的均勻分佈。

  由最大熵原理推匯出的最大熵模型的思想就是在滿足假設條件的模型中,選擇模型內部最混亂,也就是資訊量最大的那個模型!

3. 交叉熵與極大似然

  上述解釋了熵與極大似然的一個重要區別在於熵是描述模型本身混亂度(資訊量)的一個度量,而極大似然是描述估計模型和經驗分佈的相似度的一個度量。那麼熵到底與指數型似然函式有什麼關係呢?

3.1 聯絡

  熵描述模型內部的資訊量,而交叉熵則描述兩個模型之間的關係,Wiki對熵的定義是:在資訊理論中,基於相同事件測度的兩個概率分佈\(p\)\(q\)的交叉熵是指,當基於一個“非自然”(相對於“真實”分佈\(p\)而言)的概率分佈 \(q\)進行編碼時,在事件集合中唯一標識一個事件所需要的平均位元數(bit)。基於概率的交叉熵定義為
\[ H(p,q) = E_p[-log q]= H(p) + D_{KL}(p||q) \]
其中,\(H(p)\)是熵,\(D_{KL}(p||q)\)是p到q的KL散度,對於離散的p,q
\[ H(p,q) = -\sum_x p(x) log q(x) \]
  這個定義與最開始的資訊量和熵的定義是同源的,關於位元數表示可以參照資訊量的定義。現在討論關於p和q的關係,Wiki中說\(p\)是一個“真實”分佈,在此基礎上對\(q\)進行二進位制編碼所需要的平均位元數。如果對這個說法不能很好理解的話,可以將其轉化為下面這個我們經常見到的形式
\[ -\sum_x \widetilde p(x) log p(x) \]
其中,\(\widetilde p(x)\)是經驗分佈,看做我們從樣本中得到的“真實”分佈,而\(p(x)\)是我們需要編碼(求解)的模型分佈。

  再來看看上面提到的指數型對數似然函式
\[ L_\widetilde p = \sum_x \widetilde p(x)log p(x) \]
它們正好是相反數,因此極大化似然函式等價於最小化交叉熵。這個結論在大多數時候成立,但由於剛學不久,很多知識還不知道,所以目前也不能給出明確說法及證明。網上有說滿足廣義伯努利分佈的便等價的,也有說都等價的,暫且先從直觀上理解吧。

  根據定義,交叉熵的含義也比較明顯了,它也是表示兩個概率模型之間的相似度的。這也與極大似然函式的含義相同。若兩個概率模型完全相同呢?從形式上看,這時候交叉熵退化為熵。並且此時交叉熵取最小值,證明如下:

  假設\(p(x)\)分佈已知,其值為常數,且\(q(x)\)滿足約束條件
\[ \sum_x q(x) = 1 \]
構造拉格朗日乘子函式
\[ L(x,\lambda) = -\sum_{x} p(x) log q(x) +\lambda (\sum_x p(x) - 1)) \]
\(\lambda\)和所有的\(x\)求偏導得
\[ -\frac {p(x)} {q(x)} +\lambda = 0\\ \sum_x q(x) = 1\\ \sum_x p(x) = 1 \]
注意,第一個式子實際上有m個等式,m是變數x的取值個數,解得
\[ \lambda = 1\\ p(x) = q(x) \]

3.2 交叉熵損失函式

  至此,再聯絡一下交叉熵損失函式。交叉熵損失函式經常用於分類問題中,特別是在神經網路做分類問題時,也經常使用交叉熵作為損失函式,此外,由於交叉熵涉及到計算每個類別的概率,所以交叉熵幾乎每次都和softmax函式一起出現。

  交叉熵損失函式的一般形式是
\[ CrossEntropy=−\sum_{i=1} ^n y_i^T \cdot log(h(x_i)) \]
其中,\(y和x\)是m維列向量,m是\(y\)的取值數量。當\(y\)取值為{0,1}時,就是我們常見的0-1分佈的交叉熵損失函式
\[ CrossEntropy=-\sum_{i=1}^n (y_i\cdot log (h(x_i)) +(1-y_i) \cdot log (1-(h(x_i))) \]
這裡\(y和x\)是數值。

  交叉熵損失函式與交叉熵的區別在於將原來的“真實”概率分佈替換為“真實”標籤(label)\(y_i\),這與前面推導指數型似然函式的原理基本是一致的。不再贅述。將公式中\(h(x)\)替換為logistic中的分佈函式則得到logistic中的損失函式。

相關文章