鹹魚半條
交叉熵(Cross-Entropy)
交叉熵是一個在ML領域經常會被提到的名詞。在這篇文章裡將對這個概念進行詳細的分析。
1.什麼是資訊量?
假設XX是一個離散型隨機變數,其取值集合為XX,概率分佈函式為p(x)=Pr(X=x),x∈Xp(x)=Pr(X=x),x∈X,我們定義事件X=x0X=x0的資訊量為: I(x0)=−log(p(x0))I(x0)=−log(p(x0)),可以理解為,一個事件發生的概率越大,則它所攜帶的資訊量就越小,而當p(x0)=1p(x0)=1時,熵將等於0,也就是說該事件的發生不會導致任何資訊量的增加。舉個例子,小明平時不愛學習,考試經常不及格,而小王是個勤奮學習的好學生,經常得滿分,所以我們可以做如下假設: 事件A:小明考試及格,對應的概率P(xA)=0.1P(xA)=0.1,資訊量為I(xA)=−log(0.1)=3.3219I(xA)=−log(0.1)=3.3219 事件B:小王考試及格,對應的概率P(xB)=0.999P(xB)=0.999,資訊量為I(xB)=−log(0.999)=0.0014I(xB)=−log(0.999)=0.0014 可以看出,結果非常符合直觀:小明及格的可能性很低(十次考試只有一次及格),因此如果某次考試及格了(大家都會說:XXX竟然及格了!),必然會引入較大的資訊量,對應的II值也較高。而對於小王而言,考試及格是大概率事件,在事件B發生前,大家普遍認為事件B的發生幾乎是確定的,因此當某次考試小王及格這個事件發生時並不會引入太多的資訊量,相應的II值也非常的低。
2.什麼是熵?
那麼什麼又是熵呢?還是通過上邊的例子來說明,假設小明的考試結果是一個0-1分佈XAXA只有兩個取值{0:不及格,1:及格},在某次考試結果公佈前,小明的考試結果有多大的不確定度呢?你肯定會說:十有八九不及格!因為根據先驗知識,小明及格的概率僅有0.1,90%的可能都是不及格的。怎麼來度量這個不確定度?求期望!不錯,我們對所有可能結果帶來的額外資訊量求取均值(期望),其結果不就能夠衡量出小明考試成績的不確定度了嗎。 即: HA(x)=−[p(xA)log(p(xA))+(1−p(xA))log(1−p(xA))]=0.4690HA(x)=−[p(xA)log(p(xA))+(1−p(xA))log(1−p(xA))]=0.4690 對應小王的熵: HB(x)=−[p(xB)log(p(xB))+(1−p(xB))log(1−p(xB))]=0.0114HB(x)=−[p(xB)log(p(xB))+(1−p(xB))log(1−p(xB))]=0.0114 雖然小明考試結果的不確定性較低,畢竟十次有9次都不及格,但是也比不上小王(1000次考試只有一次才可能不及格,結果相當的確定) 我們再假設一個成績相對普通的學生小東,他及格的概率是P(xC)=0.5P(xC)=0.5,即及格與否的概率是一樣的,對應的熵: HC(x)=−[p(xC)log(p(xC))+(1−p(xC))log(1−p(xC))]=1HC(x)=−[p(xC)log(p(xC))+(1−p(xC))log(1−p(xC))]=1 其熵為1,他的不確定性比前邊兩位同學要高很多,在成績公佈之前,很難準確猜測出他的考試結果。 可以看出,熵其實是資訊量的期望值,它是一個隨機變數的確定性的度量。熵越大,變數的取值越不確定,反之就越確定。
對於一個隨機變數X而言,它的所有可能取值的資訊量的期望(E[I(x)]E[I(x)])就稱為熵。 XX的熵定義為: H(X)=Eplog1p(x)=−∑x∈Xp(x)logp(x)H(X)=Eplog1p(x)=−∑x∈Xp(x)logp(x) 如果p(x)p(x)是連續型隨機變數的pdf,則熵定義為: H(X)=−∫x∈Xp(x)logp(x)dxH(X)=−∫x∈Xp(x)logp(x)dx 為了保證有效性,這裡約定當p(x)→0時,有p(x)logp(x)→0p(x)→0時,有p(x)logp(x)→0 當X為0-1分佈時,熵與概率p的關係如下圖: 可以看出,當兩種取值的可能性相等時,不確定度最大(此時沒有任何先驗知識),這個結論可以推廣到多種取值的情況。在圖中也可以看出,當p=0或1時,熵為0,即此時X完全確定。 熵的單位隨著公式中log運算的底數而變化,當底數為2時,單位為“位元”(bit),底數為e時,單位為“奈特”。
3.什麼是相對熵?
相對熵(relative entropy)又稱為KL散度(Kullback-Leibler divergence),KL距離,是兩個隨機分佈間距離的度量。記為DKL(p||q)DKL(p||q)。它度量當真實分佈為p時,假設分佈q的無效性。 DKL(p||q)=Ep[logp(x)q(x)]=∑x∈Xp(x)logp(x)q(x)DKL(p||q)=Ep[logp(x)q(x)]=∑x∈Xp(x)logp(x)q(x) =∑x∈X[p(x)logp(x)−p(x)logq(x)]=∑x∈X[p(x)logp(x)−p(x)logq(x)] =∑x∈Xp(x)logp(x)−∑x∈Xp(x)logq(x)=∑x∈Xp(x)logp(x)−∑x∈Xp(x)logq(x) =−H(p)−∑x∈Xp(x)logq(x)=−H(p)−∑x∈Xp(x)logq(x) =−H(p)+Ep[−logq(x)]=−H(p)+Ep[−logq(x)] =Hp(q)−H(p)=Hp(q)−H(p) 並且為了保證連續性,做如下約定: 0log00=0,0log0q=0,plogp0=∞0log00=0,0log0q=0,plogp0=∞ 顯然,當p=qp=q時,兩者之間的相對熵DKL(p||q)=0DKL(p||q)=0 上式最後的Hp(q)Hp(q)表示在p分佈下,使用q進行編碼需要的bit數,而H(p)表示對真實分佈pp所需要的最小編碼bit數。基於此,相對熵的意義就很明確了:DKL(p||q)DKL(p||q)表示在真實分佈為p的前提下,使用q分佈進行編碼相對於使用真實分佈p進行編碼(即最優編碼)所多出來的bit數。
4. 什麼是交叉熵?
交叉熵容易跟相對熵搞混,二者聯絡緊密,但又有所區別。假設有兩個分佈p,qp,q,則它們在給定樣本集上的交叉熵定義如下: CEH(p,q)=Ep[−logq]=−∑x∈Xp(x)logq(x)=H(p)+DKL(p||q)CEH(p,q)=Ep[−logq]=−∑x∈Xp(x)logq(x)=H(p)+DKL(p||q) 可以看出,交叉熵與上一節定義的相對熵僅相差了H(p)H(p),當pp已知時,可以把H(p)H(p)看做一個常數,此時交叉熵與KL距離在行為上是等價的,都反映了分佈p,q的相似程度。最小化交叉熵等於最小化KL距離。它們都將在p=qp=q時取得最小值H(p)H(p)(p=q時KL距離為0),因此有的工程文獻中將最小化KL距離的方法稱為Principle of Minimum Cross-Entropy (MCE)或Minxent方法。 特別的,在logistic regression中, p:真實樣本分佈,服從引數為p的0-1分佈,即X∼B(1,p)X∼B(1,p) q:待估計的模型,服從引數為q的0-1分佈,即X∼B(1,q)X∼B(1,q) 兩者的交叉熵為: CEH(p,q)CEH(p,q) =−∑x∈Xp(x)logq(x)=−∑x∈Xp(x)logq(x) =−[Pp(x=1)logPq(x=1)+Pp(x=0)logPq(x=0)]=−[Pp(x=1)logPq(x=1)+Pp(x=0)logPq(x=0)] =−[plogq+(1−p)log(1−q)]=−[plogq+(1−p)log(1−q)] =−[yloghθ(x)+(1−y)log(1−hθ(x))]=−[yloghθ(x)+(1−y)log(1−hθ(x))] 對所有訓練樣本取均值得: −1m∑i=1m[y(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]−1m∑i=1m[y(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))] 這個結果與通過最大似然估計方法求出來的結果一致。