熵、交叉熵及似然函數的關系
1. 熵
1.1 信息量
信息量:最初的定義是信號取值數量m的對數為信息量\(I\),即 \(I=log_2m\)。這是與比特數相關的,比如一個信號只有兩個取值,那么用1個bit便能將其表示。后來著名的香農指出,得到的信號取值結果是隨機的,因此其信息量應該也是關於概率的函數,於是得到隨機變量\(X\)的信息量
在機器學習中,熵是描述一個變量發生的不確定性的度量,不確定性越大,這里面包含的信息量就越大。比如有的學生常年不及格,讓你預測他這次考試是否能及格,你肯定會說十有八九不會及格,也就是能否及格的確定性很大了,這時我們不會太關心其結果,因為其發生的結果太容易預料了,所以其信息量比較小。若該學生有時候能及格,有時候不能及格,這就有點捉摸不定了,我們很難猜中他能不能及格,這時他能否及格的信息量比較大。
1.3 熵
既然熵是反應變量(信號)總體不確定性的大小(信息量大小)的度量,那么如何確定熵的大小也就很明顯了——對所有可能的取值計算其平均信息量,也就是求信息量關於概率P的期望。這樣就表達了該信號(隨機變量)的不確定性大小。
當X服從均勻分布時,X的熵的結果與最原始的信息量的定義相同,n為信號的取值數量
實際上只有當所有事件的概率相等時,熵取最大值\(logn\)。
於是得出我個人的猜測:信息量是描述變量取某個值時的信息量,熵則描述其所有可能取值的平均信息量,也就是該信號到底取哪個值的不確定性。
2. 最大熵中的極大似然函數
按理說熵后面應該接着說交叉熵的,但是我發現極大似然函數的對數形式與熵的定義十分相近,於是先介紹它們的來路與區別。這種形式的似然函數在最大熵模型中用到過。
首先我先給出在最大熵模型中用到的似然函數
李航書中直接給出該定義,這個定義應該是由如下似然函數推導而來的
2.1 指數型似然函數推導
我不知道這種形式的似然函數叫什么名字,所以這個名字是我自己取的。指數型似然函數與我們常用的由n個樣本帶入表示的模型概率之積,也就是它們的聯合概率作為似然函數不同,在常用的似然函數L中
它的概率乘積依據於樣本數,最大熵則依據變量x的取值數量,然而這兩種方式本質都是一樣的。最大熵中的似然函數相當於把n個樣本中取值相同的整理到一起,用指數數量表示。
假設樣本集大小為\(n\),\(X\)的取值數量為\(m\),取值集合為{\(v_1,\cdots,v_m\)}。樣本集中觀測值\(v_i\)出現的次數由\(C(X=v_i)\)表示,於是似然函數可以表示為
再對該似然函數開\(n\)次方
其中,
並且,似然函數開\(n\)次方並不影響其最大化,於是可以直接將其定義為新的似然函數
帶入\(\widetilde P(x_i)\)簡化得到
那么對數似然函數便是
2.2 最大熵中的似然函數推導
根據上文得出的似然函數的另一種表示后,由它便可推導出最大熵模型中用到的對數似然函數
推導這個只是順便,目的還是比較指數型對數似然函數\(L=\widetilde P(x)\sum_xlog P(x)\)與熵的定義的關系。
再回顧熵的定義
它們的數學形式長得確實挺像的,不過仔細看還是有很大差別,似然函數中具有經驗分布和需要估計的模型的分布,所以似然函數實際上是判斷估計模型與經驗分布的相似度,最大似然估計就是讓估計模型盡可能的去接近我們得到樣本產生的經驗分布。而熵的定義中只有概率模型本身,它表示的是該模型本身的每個取值之間的不確定性大小,或者說是該模型本身的混亂程度。而最大熵原理的思想是在面對一個未知內容較多(約束條件不足)的估計時,我們會盡量將其看做等概率的均勻分布。
由最大熵原理推導出的最大熵模型的思想就是在滿足假設條件的模型中,選擇模型內部最混亂,也就是信息量最大的那個模型!
3. 交叉熵與極大似然
上述解釋了熵與極大似然的一個重要區別在於熵是描述模型本身混亂度(信息量)的一個度量,而極大似然是描述估計模型和經驗分布的相似度的一個度量。那么熵到底與指數型似然函數有什么關系呢?
3.1 聯系
熵描述模型內部的信息量,而交叉熵則描述兩個模型之間的關系。交叉熵中用到了KL散度,KL散度是描述兩個概率分布\(p,q\)相似性的一種度量,記作\(D(p||q)\)。對於離散隨機變量,KL散度定義為
KL散度滿足:\(D(p|q) \geqslant 0\),且僅當\(p=q\)時,\(D(p|q)=0\)。證明如下:
關於Jense不等式在EM算法中已經總結過了,這里不再贅述。這里log是凹函數,\(E[f(x)] \leqslant f(E[x])\)。注意\(p(x)\)滿足\(\sum_xp(x) = 1\)。由定義式可以看出KL散度是非對稱的,不是嚴格意義上的距離度量。
Wiki對交叉熵的定義是:在信息論中,基於相同事件測度的兩個概率分布\(p\)和 \(q\)的交叉熵是指,當基於一個“非自然”(相對於“真實”分布\(p\)而言)的概率分布 \(q\)進行編碼時,在事件集合中唯一標識一個事件所需要的平均比特數(bit)。基於概率的交叉熵定義為
其中,\(H(p)\)是熵,\(D_{KL}(p||q)\)是p到q的KL散度,對於離散的p,q
這個定義與最開始的信息量和熵的定義是同源的,關於比特數表示可以參照信息量的定義。現在討論關於p和q的關系,Wiki中說\(p\)是一個“真實”分布,在此基礎上對\(q\)進行二進制編碼所需要的平均比特數。如果對這個說法不能很好理解的話,可以將其轉化為下面這個我們經常見到的形式
其中,\(\widetilde p(x)\)是經驗分布,看做我們從樣本中得到的“真實”分布,而\(p(x)\)是我們需要編碼(求解)的模型分布。
再來看看上面提到的指數型對數似然函數
它們正好是相反數,因此極大化似然函數等價於最小化交叉熵。\([Mark]\):這個結論在大多數時候成立,但由於剛學不久,很多知識還不知道,所以目前也不能給出明確說法及證明。網上有說滿足廣義伯努利分布的便等價的,也有說都等價的,暫且先從直觀上理解吧。
根據定義,交叉熵的含義也比較明顯了,它也是表示兩個概率模型之間的相似度的。這也與極大似然函數的含義相同。若兩個概率模型完全相同呢?由KL散度可知,\(p=q\)時散度為0,交叉熵變成了熵。從離散形式的定義式也能看出,相等時變為了熵的定義式,交叉熵退化為熵。並且此時交叉熵取最小值,證明如下:
假設\(p(x)\)分布已知,其值為常數,且\(q(x)\)滿足約束條件
構造拉格朗日乘子函數
對\(\lambda\)和所有的\(x\)求偏導得
注意,第一個式子實際上有m個等式,m是變量x的取值個數,解得
3.2 交叉熵損失函數
至此,再聯系一下交叉熵損失函數。交叉熵損失函數經常用於分類問題中,特別是在神經網絡做分類問題時,也經常使用交叉熵作為損失函數,此外,由於交叉熵涉及到計算每個類別的概率,所以交叉熵幾乎每次都和softmax函數一起出現。
交叉熵損失函數的一般形式是
其中,\(y和x\)是m維列向量,m是\(y\)的取值數量。當\(y\)取值為{0,1}時,就是我們常見的0-1分布的交叉熵損失函數
這里\(y和x\)是數值。
交叉熵損失函數與交叉熵的區別在於將原來的“真實”概率分布替換為“真實”標簽(label)\(y_i\),這與前面推導指數型似然函數的原理基本是一致的。不再贅述。將公式中\(h(x)\)替換為logistic中的分布函數則得到logistic中的損失函數。