▌關(guān)于交叉熵在loss函數(shù)中使用的理解
交叉熵(cross entropy)是深度學(xué)習(xí)中常用的一個(gè)概念,一般用來求目標(biāo)與預(yù)測(cè)值之間的差距。以前做一些分類問題的時(shí)候,沒有過多的注意,直接調(diào)用現(xiàn)成的庫,用起來也比較方便。最近開始研究起對(duì)抗生成網(wǎng)絡(luò)(GANs),用到了交叉熵,發(fā)現(xiàn)自己對(duì)交叉熵的理解有些模糊,不夠深入。遂花了幾天的時(shí)間從頭梳理了一下相關(guān)知識(shí)點(diǎn),才算透徹的理解了,特地記錄下來,以便日后查閱。
交叉熵是信息論中的一個(gè)概念,要想了解交叉熵的本質(zhì),需要先從最基本的概念講起。
1 信息量
首先是信息量。假設(shè)我們聽到了兩件事,分別如下:
事件A:巴西隊(duì)進(jìn)入了2018世界杯決賽圈。
事件B:中國(guó)隊(duì)進(jìn)入了2018世界杯決賽圈。
僅憑直覺來說,顯而易見事件B的信息量比事件A的信息量要大。究其原因,是因?yàn)槭录嗀發(fā)生的概率很大,事件B發(fā)生的概率很小。所以當(dāng)越不可能的事件發(fā)生了,我們獲取到的信息量就越大。越可能發(fā)生的事件發(fā)生了,我們獲取到的信息量就越小。那么信息量應(yīng)該和事件發(fā)生的概率有關(guān)。
假設(shè)X是一個(gè)離散型隨機(jī)變量,其取值集合為χ,概率分布函數(shù),定義事件
的信息量為:
由于是概率所以的取值范圍是[0,1],繪制為圖形如下:?
可見該函數(shù)符合我們對(duì)信息量的直覺
2 熵
考慮另一個(gè)問題,對(duì)于某個(gè)事件,有n種可能性,每一種可能性都有一個(gè)概率p(xi)。
這樣就可以計(jì)算出某一種可能性的信息量。舉一個(gè)例子,假設(shè)你拿出了你的電腦,按下開關(guān),會(huì)有三種可能性,下表列出了每一種可能的概率及其對(duì)應(yīng)的信息量
注:文中的對(duì)數(shù)均為自然對(duì)數(shù)
我們現(xiàn)在有了信息量的定義,而熵用來表示所有信息量的期望,即:
其中n代表所有的n種可能性,所以上面的問題結(jié)果就是
然而有一類比較特殊的問題,比如投擲硬幣只有兩種可能,字朝上或花朝上。買彩票只有兩種可能,中獎(jiǎng)或不中獎(jiǎng)。我們稱之為0-1分布問題(也叫二項(xiàng)分布),對(duì)于這類問題,熵的計(jì)算方法可以簡(jiǎn)化為如下算式:
3 相對(duì)熵(KL散度)
相對(duì)熵又稱KL散度,如果我們對(duì)于同一個(gè)隨機(jī)變量 x 有兩個(gè)單獨(dú)的概率分布 P(x) 和 Q(x),我們可以使用 KL 散度(Kullback-Leibler (KL) divergence)來衡量這兩個(gè)分布的差異
維基百科對(duì)相對(duì)熵的定義
In the context of machine learning, DKL(P‖Q) is often called the information gain achieved if P is used instead of Q.
即如果用P來描述目標(biāo)問題,而不是用Q來描述目標(biāo)問題,得到的信息增量。
在機(jī)器學(xué)習(xí)中,P往往用來表示樣本的真實(shí)分布,比如[1,0,0]表示當(dāng)前樣本屬于第一類。Q用來表示模型所預(yù)測(cè)的分布,比如[0.7,0.2,0.1]
直觀的理解就是如果用P來描述樣本,那么就非常完美。而用Q來描述樣本,雖然可以大致描述,但是不是那么的完美,信息量不足,需要額外的一些“信息增量”才能達(dá)到和P一樣完美的描述。如果我們的Q通過反復(fù)訓(xùn)練,也能完美的描述樣本,那么就不再需要額外的“信息增量”,Q等價(jià)于P。
KL散度的計(jì)算公式:
(3.1)
n為事件的所有可能性。
DKL的值越小,表示q分布和p分布越接近。
4 交叉熵
對(duì)式3.1變形可以得到:
等式的前一部分恰巧就是p的熵,等式的后一部分,就是交叉熵:
在機(jī)器學(xué)習(xí)中,我們需要評(píng)估label和predicts之間的差距,使用KL散度剛剛好,即,由于KL散度中的前一部分
不變,故在優(yōu)化過程中,只需要關(guān)注交叉熵就可以了。所以一般在機(jī)器學(xué)習(xí)中直接用交叉熵做loss,評(píng)估模型。
▌機(jī)器學(xué)習(xí)中交叉熵的應(yīng)用
1 為什么要用交叉熵做loss函數(shù)?
在邏輯回歸問題中,常常使用MSE(Mean Squared Error)作為loss函數(shù),比如:
這里的m表示m個(gè)樣本的,loss為m個(gè)樣本的loss均值。
MSE在邏輯回歸問題中比較好用,那么在分類問題中還是如此么?
讓我們來看一下不同loss的函數(shù)曲線:
首先所有節(jié)點(diǎn)輸出都用的softmax
分別拿一個(gè)樣本來做示例,首先是使用MSE的loss
其中和
都是常數(shù),loss簡(jiǎn)化為:?
取,
繪圖如下
顯然,這個(gè)函數(shù)是非凸的,對(duì)優(yōu)化問題來講,不太好優(yōu)化,容易陷入局部極值點(diǎn)。
再來看使用交叉熵的loss
由于one-hot標(biāo)簽的特殊性,一個(gè)1,剩下全是0,loss可以簡(jiǎn)化為:
繪制曲線如下:
曲線是一個(gè)凸函數(shù),自變量的取值范圍是[0,1]。凸函數(shù)便于梯度下降反向傳播,便于優(yōu)化。所以一般針對(duì)分類問題采用交叉熵作為loss函數(shù)
2 交叉熵在單分類問題中的使用
這里的單類別是指,每一張圖像樣本只能有一個(gè)類別,比如只能是狗或只能是貓。
交叉熵在單分類問題上基本是標(biāo)配的方法
上式為一張樣本的loss計(jì)算方法。式2.1中n代表著n種類別。
舉例說明,比如有如下樣本
對(duì)應(yīng)的標(biāo)簽和預(yù)測(cè)值
那么
對(duì)應(yīng)一個(gè)batch的loss就是
m為當(dāng)前batch的樣本數(shù)
3 交叉熵在多分類問題中的使用
這里的多類別是指,每一張圖像樣本可以有多個(gè)類別,比如同時(shí)包含一只貓和一只狗。
和單分類問題的標(biāo)簽不同,多分類的標(biāo)簽是n-hot。
比如下面這張樣本圖,即有青蛙,又有老鼠,所以是一個(gè)多分類問題。
對(duì)應(yīng)的標(biāo)簽和預(yù)測(cè)值
值得注意的是,這里的Pred不再是通過softmax計(jì)算的了,這里采用的是sigmoid。將每一個(gè)節(jié)點(diǎn)的輸出歸一化到[0,1]之間。所有Pred值的和也不再為1。換句話說,就是每一個(gè)Label都是獨(dú)立分布的,相互之間沒有影響。所以交叉熵在這里是單獨(dú)對(duì)每一個(gè)節(jié)點(diǎn)進(jìn)行計(jì)算,每一個(gè)節(jié)點(diǎn)只有兩種可能值,所以是一個(gè)二項(xiàng)分布。前面說過對(duì)于二項(xiàng)分布這種特殊的分布,熵的計(jì)算可以進(jìn)行簡(jiǎn)化。
同樣的,交叉熵的計(jì)算也可以簡(jiǎn)化,即
注意,上式只是針對(duì)一個(gè)節(jié)點(diǎn)的計(jì)算公式。這一點(diǎn)一定要和單分類loss區(qū)分開來。
例子中可以計(jì)算為:
單張樣本的loss即為loss=loss貓+loss蛙+loss鼠
每一個(gè)batch的loss就是:
式中m為當(dāng)前batch中的樣本量,n為類別數(shù)。
▌總結(jié)
路漫漫,要學(xué)的東西還有很多啊。
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4367瀏覽量
64173 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5554瀏覽量
122470 -
交叉熵
+關(guān)注
關(guān)注
0文章
4瀏覽量
2442
原文標(biāo)題:一文搞懂交叉熵在機(jī)器學(xué)習(xí)中的使用,透徹理解交叉熵背后的直覺
文章出處:【微信號(hào):rgznai100,微信公眾號(hào):rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
如何在PyTorch中使用交叉熵損失函數(shù)
keras常用的損失函數(shù)Losses與評(píng)價(jià)函數(shù)Metrics介紹
wincc中使用vbs常用函數(shù)
大數(shù)據(jù)中邊界向量調(diào)節(jié)熵函數(shù)支持向量機(jī)研究
Softmax如何把CNN的輸出轉(zhuǎn)變成概率?交叉熵如何為優(yōu)化過程提供度量?
基于交叉熵算法的跟馳模型標(biāo)定

當(dāng)機(jī)器學(xué)習(xí)遇上SSD,會(huì)擦出怎樣的火花呢?

機(jī)器學(xué)習(xí)和深度學(xué)習(xí)中分類與回歸常用的幾種損失函數(shù)

在PyTorch中使用ReLU激活函數(shù)的例子
在Zynq裸機(jī)設(shè)計(jì)中使用視覺庫L1 remap函數(shù)的示例

評(píng)論