??交叉熵
(cross entropy)是深度學(xué)習(xí)中常用的一個概念,一般用來求目標(biāo)與預(yù)測值之間的差距首妖。以前做一些分類問題的時候院峡,沒有過多的注意,直接調(diào)用現(xiàn)成的庫疤估,用起來也比較方便。最近發(fā)現(xiàn)自己對交叉熵的理解有些模糊霎冯,不夠深入铃拇。遂花了些時間從頭梳理了一下相關(guān)知識點,才算理解了沈撞,特地記錄下來慷荔,以便日后查閱。
交叉熵是信息論中的一個概念缠俺,要想了解交叉熵的本質(zhì)显晶,需要先從最基本的概念講起贷岸。
1. 信息量
首先是信息量
。假設(shè)我們聽到了兩件事磷雇,分別如下:
事件A:巴西隊進入了2018世界杯決賽圈偿警。
事件B:中國隊進入了2018世界杯決賽圈。
??僅憑直覺來說唯笙,顯而易見事件B的信息量比事件A的信息量要大螟蒸。究其原因,是因為事件A發(fā)生的概率很大崩掘,事件B發(fā)生的概率很小七嫌。所以當(dāng)越不可能的事件發(fā)生了,我們獲取到的信息量就越大苞慢。越可能發(fā)生的事件發(fā)生了诵原,我們獲取到的信息量就越小。那么信息量應(yīng)該和事件發(fā)生的概率有關(guān)挽放。
假設(shè)是一個離散型隨機變量绍赛,其取值集合為,概率分布函數(shù),則定義事件的信息量為:,概率的取值范圍是[0,1]骂维,繪制為圖形如下:
可見該函數(shù)符合我們對信息量的直覺惹资。
2 熵
??考慮另一個問題,對于某個事件航闺,有n種可能性褪测,每一種可能性都有一個概率
這樣就可以計算出某一種可能性的信息量。舉一個例子潦刃,假設(shè)你拿出了你的電腦侮措,按下開關(guān),會有三種可能性乖杠,下表列出了每一種可能的概率及其對應(yīng)的信息量:
序號 | 事件 | 概率 | 信息量I |
---|---|---|---|
A | 電腦正常開機 | 0.7 | -log(p(A))=0.36 |
B | 電腦無法開機 | 0.2 | -log(p(B))=1.61 |
C | 爆炸 | 0.1 | -log(p(C))=2.30 |
我們現(xiàn)在有了信息量的定義分扎,而熵用來表示所有信息量的期望,即:其中n代表所有的n種可能性胧洒,所以上面的問題結(jié)果就是:
H(X)=?[p(A)log(p(A))+p(B)log(p(B))+p(C))log(p(C))]=0.7×0.36+0.2×1.61+0.1×2.30=0.804
然而有一類比較特殊的問題畏吓,比如投擲硬幣只有兩種可能,字朝上或花朝上卫漫。買彩票只有兩種可能菲饼,中獎或不中獎。我們稱之為0-1分布問題(二項分布的特例)列赎,對于這類問題宏悦,熵的計算方法可以簡化為如下算式:
3. 相對熵(KL散度)
??相對熵
又稱KL散度
,如果我們對于同一個隨機變量 x 有兩個單獨的概率分布 P(x) 和 Q(x),我們可以使用 KL 散度(Kullback-Leibler (KL) divergence)來衡量這兩個分布的差異
即如果用P來描述目標(biāo)問題饼煞,而不是用Q來描述目標(biāo)問題源葫,得到的信息增量。
??在機器學(xué)習(xí)中砖瞧,P往往用來表示樣本的真實分布息堂,比如[1,0,0]表示當(dāng)前樣本屬于第一類。Q用來表示模型所預(yù)測的分布芭届,比如[0.7,0.2,0.1]
直觀的理解就是如果用P來描述樣本储矩,那么就非常完美。而用Q來描述樣本褂乍,雖然可以大致描述持隧,但是不是那么的完美,信息量不足逃片,需要額外的一些“信息增量”才能達到和P一樣完美的描述屡拨。如果我們的Q通過反復(fù)訓(xùn)練,也能完美的描述樣本褥实,那么就不再需要額外的“信息增量”呀狼,Q等價于P。
KL散度的計算公式: n為事件的所有可能性损离。
的值越小哥艇,表示q分布和p分布越接近。
4.交叉熵
對上式變形可以得到:
等式的前一部分恰巧就是p的熵僻澎,等式的后一部分貌踏,就是交叉熵:
在機器學(xué)習(xí)中,我們需要評估label和predicts之間的差距窟勃,使用KL散度剛剛好祖乳,即,由于KL散度中的前一部分不變秉氧,故在優(yōu)化過程中眷昆,只需要關(guān)注交叉熵就可以了。所以一般在機器學(xué)習(xí)中直接用用交叉熵做loss汁咏,評估模型亚斋。
5. 機器學(xué)習(xí)中交叉熵的應(yīng)用
??在線性回歸問題中,常常使用MSE(Mean Squared Error)作為loss函數(shù)攘滩,比如: 這里的m表示m個樣本的帅刊,loss為m個樣本的loss均值。
MSE在線性回歸問題中比較好用轰驳,那么在邏輯分類問題中還是如此么?
交叉熵在單分類問題中的使用
這里的單類別是指,每一張圖像樣本只能有一個類別级解,比如只能是狗或只能是貓冒黑。
交叉熵在單分類問題上基本是標(biāo)配的方法
上式為一張樣本的loss計算方法。式2.1中n代表著n種類別勤哗。
舉例說明,比如有如下樣本
對應(yīng)的標(biāo)簽和預(yù)測值
* | 貓 | 青蛙 | 老鼠 |
---|---|---|---|
Label | 0 | 1 | 0 |
Pred | 0.3 | 0.6 | 0.1 |
那么 loss=?(0×log(0.3)+1×log(0.6)+0×log(0.1)) = ?log(0.6)
對應(yīng)一個batch的loss就是
m為當(dāng)前batch的樣本數(shù)抡爹。
交叉熵在多分類問題中的使用
??這里的多類別是指,每一張圖像樣本可以有多個類別芒划,比如同時包含一只貓和一只狗冬竟,和單分類問題的標(biāo)簽不同,多分類的標(biāo)簽是n-hot民逼。
比如下面這張樣本圖泵殴,即有青蛙,又有老鼠拼苍,所以是一個多分類問題
對應(yīng)的標(biāo)簽和預(yù)測值
* | 貓 | 青蛙 | 老鼠 |
---|---|---|---|
Label | 0 | 1 | 1 |
Pred | 0.1 | 0.7 | 0.8 |
值得注意的是笑诅,這里的Pred不再是通過softmax計算的了,這里采用的是sigmoid疮鲫。將每一個節(jié)點的輸出歸一化到[0,1]之間吆你。所有Pred值的和也不再為1。換句話說俊犯,就是每一個Label都是獨立分布的妇多,相互之間沒有影響。所以交叉熵在這里是單獨對每一個節(jié)點進行計算燕侠,每一個節(jié)點只有兩種可能值者祖,所以是一個二項分布。前面說過對于二項分布這種特殊的分布贬循,熵的計算可以進行簡化咸包。即
注意,上式只是針對一個節(jié)點的計算公式杖虾。這一點一定要和單分類loss區(qū)分開來烂瘫。
例子中可以計算為:
單張樣本的loss即為
每一個batch的loss就是:
式中m為當(dāng)前batch中的樣本量,n為類別數(shù)奇适。
轉(zhuǎn)自:https://blog.csdn.net/tsyccnh/article/details/79163834