机器学习中使用的交叉熵(cross entropy)透彻分析
從字面分析交叉熵,1是交叉、2是熵(熵與信息量有關(guān));首先交叉熵涉及信息論里面的東西,想要徹底理解交叉熵就要明白此概念跟信息量的關(guān)系以及里邊的熵怎么理解。
(1)信息量
衡量信息量可以用大小或者多少來形容,就是你傳達的信息能別人帶來多大的價值感吧,首先我說明天會下雨,這句話的信息量有多少呢?(我也不知道啊,哈哈)但是你說中國疫情現(xiàn)在已經(jīng)結(jié)束了;mei國疫情也已經(jīng)結(jié)束了。顯然僅憑直覺,我們可以看出你要傳達的第二句話比第一句話的信息量要大,因為中國的疫情我們大家很顯然知道已經(jīng)結(jié)束了,這句話發(fā)生概率幾乎為1,而meiguo剛剛我們觀察還處在很嚴重的階段,你說他已經(jīng)結(jié)束了這件事發(fā)生的概率很小幾乎為0,但是你傳達給我了一個幾乎不會發(fā)生的事情發(fā)生了。證明我獲得了我不知道的信息得到了很大的信息量。
由此我們可以總結(jié)出:那么信息量應該和事件發(fā)生的概率有關(guān)。所以當越不可能的事件發(fā)生了,我們獲取到的信息量就越大;越可能發(fā)生的事件發(fā)生了,我們獲取到的信息量就越小。因此一個具體事件的信息量應該是隨著其發(fā)生概率而遞減的,且不能為負。
因此衡量信息量大小的公式為:
假設(shè)X是一個離散型隨機變量,其取值集合為,概率分布函數(shù),則定義事件的信息量為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???? ? ? ???
PS:之后沒有特殊說明的對數(shù)都是自然對數(shù),以e為底的。(以常數(shù)e為底數(shù)的對數(shù)叫做自然對數(shù),記作lnN(N>0))
那么為什么是log公式呢?不要著急下邊分析:
隨著概率增大而減少的函數(shù)形式太多了!
如果我們有倆個不相關(guān)的事件x和y,那么我們觀察到的倆個事件同時發(fā)生時獲得的信息應該等于觀察到的事件各自發(fā)生時獲得的信息之和,即:
h(x,y) = h(x) + h(y)
由于x,y是倆個不相關(guān)的事件,那么滿足p(x,y) = p(x)*p(y).
根據(jù)上面推導,我們很容易看出h(x)一定與p(x)的對數(shù)有關(guān)(因為只有對數(shù)形式的真數(shù)相乘之后,能夠?qū)獙?shù)的相加形式,可以試試)。因此我們有信息量公式如下:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
下面解決倆個疑問?
(1)為什么有一個負號
其中,負號是為了確保信息一定是正數(shù)或者是0,總不能為負數(shù)吧!
(2)為什么底數(shù)為2
這是因為,我們只需要信息量滿足低概率事件x對應于高的信息量。那么對數(shù)的選擇是任意的。我們只是遵循信息論的普遍傳統(tǒng),使用2作為對數(shù)的底!(但是本文中舉例講解的一律是自然對數(shù))
(2)熵
信息熵也被稱為熵,用來表示所有信息量的期望。
熵是一種度量,可以用熵的大小度量信息的混亂程度,或者是信息的不確定性。熵越大,信息的不確定性越大。同樣,熵也可以用來衡量變量的不確定性。
熵也可以衡量一件事的信息量的大小,因為一件事確定性越大,那它的信息量就越小;反之,一件事不確定性越大它得信息量就越大。
考慮另一個問題,對于某個事件,有n種可能性,每一種可能性都有一個概率p(xi)
這樣就可以計算出某一種可能性的信息量。舉一個例子,假設(shè)你開門,插入鑰匙,會有三種可能性,下表列出了每一種可能的概率及其對應的信息量 。
PS:之后沒有特殊說明的對數(shù)都是自然對數(shù),以e為底的。ln0.6=-0.51
| 序號 | 事件 | 概率P | 信息量I |
| A | 鑰匙對的門開了 | 0.6 | |
| B | 鑰匙錯的門沒開 | 0.3 | |
| C | 鑰匙斷在里邊了 | 0.2 |
我們由上邊已經(jīng)知道了信息量的定義,而熵用來表示所有信息量的期望(期望就是試驗中每次可能結(jié)果的概率乘以其結(jié)果的總和),所以此處的熵就是某一事件的信息量乘以該事件信息量概率的總和,即(信息量的熵為):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
其中n代表所有的n種可能性,所以上面的問題結(jié)果就是 :
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? =
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? =0.826
然而有一類比較特殊的問題,比如投擲硬幣只有兩種可能,字朝上或花朝上。買彩票只有兩種可能,中獎或不中獎。我們稱之為0-1分布問題(二項分布的特例),對于這類問題,熵的計算方法可以簡化為如下算式:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
信息論之父克勞德·香農(nóng)給出的信息熵的三個性質(zhì):
- 單調(diào)性,發(fā)生概率越高的事件,其攜帶的信息量越低;
- 非負性,信息熵可以看作為一種廣度量,非負性是一種合理的必然;
- 累加性,即多隨機事件同時發(fā)生存在的總不確定性的量度是可以表示為各事件不確定性的量度的和,這也是廣度量的一種體現(xiàn)。
(3)相對熵(KL散度)
相對熵又稱KL散度,如果我們對于同一個隨機變量 x 有兩個單獨的概率分布 P(x) 和 Q(x),我們可以使用 KL 散度(Kullback-Leibler (KL) divergence)來衡量這兩個分布的差異。
KL散度的計算公式:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
其中n為事件的所有可能性。的值越小,表示P分布和Q分布越接近。
在機器學習中,常常使用P(x)來表示樣本的真實分布,Q(x)來表示模型所預測的分布,比如在一個三分類任務中(例如,人車道路分類器),x1,x2,x3分別代表人,車,道路,例如一張人的圖片真實分布P(X)=[1,0,0],預測分布Q(X)=[0.7,0.2,0.1],(直觀的理解就是如果用P來描述樣本,那么就非常完美。而用Q來描述樣本,雖然可以大致描述,但是不是那么的完美,信息量不足,需要額外的一些“信息增量”才能達到和P一樣完美的描述。如果我們的Q通過反復訓練,也能完美的描述樣本,那么就不再需要額外的“信息增量”,Q等價于P。即如果用P來描述目標問題,而不是用Q來描述目標問題,得到的信息增量。(同時我們可以反復的訓練Q來使Q的分布逼近于P) )計算KL散度:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
(4)交叉熵
首先將上述公式拆開我們可以得到:?
? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
前者H(p(x))表示信息熵,后者即為交叉熵,KL散度 = 交叉熵 - 信息熵
交叉熵公式表示為: ? ? ? ? ? ? ??
𝑝(x𝑖 ) is the ground-truth(真值) probability of category 𝑖 ?
𝑞(x𝑖 ) is the predicted(預測) probability of category 𝑖
?
在機器學習中,我們需要評估label和predicts之間的差距,使用KL散度剛剛好,即,由于KL散度中的前一部分?H(y)不變(為什么不變呢?因為在機器學習訓練網(wǎng)絡時,輸入數(shù)據(jù)與標簽常常已經(jīng)確定,那么真實概率分布P(x)也就確定下來了,所以信息熵在這里就是一個常量),故在優(yōu)化過程中,只需要關(guān)注交叉熵就可以了。所以一般在機器學習中直接用用交叉熵做loss,評估模型。即(由于KL散度的值表示真實概率分布P(x)與預測概率分布Q(x)之間的差異,值越小表示預測的結(jié)果越好,所以需要最小化KL散度,而交叉熵等于KL散度加上一個常量(信息熵),且公式相比KL散度更加容易計算,所以在機器學習中常常使用交叉熵損失函數(shù)來計算loss就行了。)
(5)交叉熵在實際中的應用
在線性回歸問題中,常常使用MSE(Mean Squared Error)作為loss函數(shù),比如:(這里的m表示m個樣本的,loss為m個樣本的loss均值。)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
而在分類問題中常常使用交叉熵作為loss函數(shù)。
5.1交叉熵在單分類問題中的應用。
這里的單類別是指,每一張圖像樣本只能有一個類別,比如只能是人或只能是車。交叉熵在單分類問題上基本是標配的方法 :
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
上式為一張樣本的loss計算方法。n代表著n種類別。
下面通過一個例子來說明如何計算交叉熵損失值。
假設(shè)我們輸入了一張帶有人的圖片,該圖片的標簽和預測值分別如下表:
| 人 | 車 | 道路 | |
| label | 1 | 0 | 0 |
| predicate | 0.7 | 0.2 | 0.1 |
那么該分類問題的損失函數(shù)就可以用交叉熵損失函數(shù)還表示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
對應一個batch的loss就是 :
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
其中m表示樣本個數(shù)。
5.2交叉熵在多分類問題中的使用
這里的多類別是指,每一張圖像樣本可以有多個類別,比如同時包含一個人和一輛車。和單分類問題的標簽不同,多分類的標簽是n-hot。
假設(shè)我們輸入了一張即有人,又有車的圖片,所以是一個多分類問題, 該圖片的標簽和預測值分別如下表:
| 人 | 車 | 道路 | |
| label | 1 | 1 | 0 |
| predicate | 0.8 | 0.7 | 0.1 |
值得注意的是,這里的Pred不再是通過softmax計算的了,這里采用的是sigmoid。將每一個節(jié)點的輸出歸一化到[0,1]之間。所有Pred值的和也不再為1。換句話說,就是每一個Label都是獨立分布的,相互之間沒有影響。所以交叉熵在這里是單獨對每一個節(jié)點進行計算,每一個節(jié)點只有兩種可能值,所以是一個二項分布。前面說過對于二項分布這種特殊的分布,熵的計算可以進行簡化。
同樣的,交叉熵的計算也可以簡化,即?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
注意,上式只是針對一個節(jié)點的計算公式。這一點一定要和單分類loss區(qū)分開來。
例子中可以計算為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
則單張樣本的loss即為
每一個batch的loss就是:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
式中m為當前batch中的樣本量,n為類別數(shù)。
PS:總結(jié):
(1)交叉熵能夠衡量同一個隨機變量中的兩個不同概率分布的差異程度,在機器學習中就表示為真實概率分布與預測概率分布之間的差異。交叉熵的值越小,模型預測效果就越好。
(2)交叉熵在分類問題中常常與softmax是標配,softmax將輸出的結(jié)果進行處理,使其多個分類的預測值和為1,再通過交叉熵來計算損失。
參考:https://www.zhihu.com/question/65288314/answer/244557337
https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence
https://blog.csdn.net/tsyccnh/article/details/79163834
https://blog.csdn.net/b1055077005/article/details/100152102
?
? ? ? ? ?
?
總結(jié)
以上是生活随笔為你收集整理的机器学习中使用的交叉熵(cross entropy)透彻分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Gradient Descent梯度下降
- 下一篇: C语言小知识:typedef\函数模板\