0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于交叉熵在loss函數(shù)中使用的理解

電子工程師 ? 來源:未知 ? 作者:李倩 ? 2018-07-03 11:32 ? 次閱讀

▌關(guān)于交叉熵在loss函數(shù)中使用的理解

交叉熵(cross entropy)是深度學(xué)習(xí)中常用的一個概念,一般用來求目標(biāo)與預(yù)測值之間的差距。以前做一些分類問題的時候,沒有過多的注意,直接調(diào)用現(xiàn)成的庫,用起來也比較方便。最近開始研究起對抗生成網(wǎng)絡(luò)(GANs),用到了交叉熵,發(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è)X是一個離散型隨機變量,其取值集合為χ,概率分布函數(shù),定義事件的信息量為:

由于是概率所以的取值范圍是[0,1],繪制為圖形如下:?

可見該函數(shù)符合我們對信息量的直覺

2 熵

考慮另一個問題,對于某個事件,有n種可能性,每一種可能性都有一個概率p(xi)。

這樣就可以計算出某一種可能性的信息量。舉一個例子,假設(shè)你拿出了你的電腦,按下開關(guān),會有三種可能性,下表列出了每一種可能的概率及其對應(yīng)的信息量

注:文中的對數(shù)均為自然對數(shù)

我們現(xiàn)在有了信息量的定義,而熵用來表示所有信息量的期望,即:

其中n代表所有的n種可能性,所以上面的問題結(jié)果就是

然而有一類比較特殊的問題,比如投擲硬幣只有兩種可能,字朝上或花朝上。買彩票只有兩種可能,中獎或不中獎。我們稱之為0-1分布問題(也叫二項分布),對于這類問題,熵的計算方法可以簡化為如下算式:

3 相對熵(KL散度)

相對熵又稱KL散度,如果我們對于同一個隨機變量 x 有兩個單獨的概率分布 P(x) 和 Q(x),我們可以使用 KL 散度(Kullback-Leibler (KL) divergence)來衡量這兩個分布的差異

維基百科對相對熵的定義

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)問題,得到的信息增量。

機器學(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散度的計算公式:

(3.1)

n為事件的所有可能性。

DKL的值越小,表示q分布和p分布越接近。

4 交叉熵

對式3.1變形可以得到:

等式的前一部分恰巧就是p的熵,等式的后一部分,就是交叉熵:

在機器學(xué)習(xí)中,我們需要評估label和predicts之間的差距,使用KL散度剛剛好,即,由于KL散度中的前一部分不變,故在優(yōu)化過程中,只需要關(guān)注交叉熵就可以了。所以一般在機器學(xué)習(xí)中直接用交叉熵做loss,評估模型。

▌機器學(xué)習(xí)中交叉熵的應(yīng)用

1 為什么要用交叉熵做loss函數(shù)?

在邏輯回歸問題中,常常使用MSE(Mean Squared Error)作為loss函數(shù),比如:

這里的m表示m個樣本的,loss為m個樣本的loss均值。

MSE在邏輯回歸問題中比較好用,那么在分類問題中還是如此么?

讓我們來看一下不同loss的函數(shù)曲線:

首先所有節(jié)點輸出都用的softmax

分別拿一個樣本來做示例,首先是使用MSE的loss

其中都是常數(shù),loss簡化為:?

,繪圖如下

顯然,這個函數(shù)是非凸的,對優(yōu)化問題來講,不太好優(yōu)化,容易陷入局部極值點。

再來看使用交叉熵的loss

由于one-hot標(biāo)簽的特殊性,一個1,剩下全是0,loss可以簡化為:

繪制曲線如下:

曲線是一個凸函數(shù),自變量的取值范圍是[0,1]。凸函數(shù)便于梯度下降反向傳播,便于優(yōu)化。所以一般針對分類問題采用交叉熵作為loss函數(shù)

2 交叉熵在單分類問題中的使用

這里的單類別是指,每一張圖像樣本只能有一個類別,比如只能是狗或只能是貓。

交叉熵在單分類問題上基本是標(biāo)配的方法

上式為一張樣本的loss計算方法。式2.1中n代表著n種類別。

舉例說明,比如有如下樣本

對應(yīng)的標(biāo)簽和預(yù)測值

那么

對應(yīng)一個batch的loss就是

m為當(dāng)前batch的樣本數(shù)

3 交叉熵在多分類問題中的使用

這里的多類別是指,每一張圖像樣本可以有多個類別,比如同時包含一只貓和一只狗。

和單分類問題的標(biāo)簽不同,多分類的標(biāo)簽是n-hot。

比如下面這張樣本圖,即有青蛙,又有老鼠,所以是一個多分類問題。

對應(yīng)的標(biāo)簽和預(yù)測值

值得注意的是,這里的Pred不再是通過softmax計算的了,這里采用的是sigmoid。將每一個節(jié)點的輸出歸一化到[0,1]之間。所有Pred值的和也不再為1。換句話說,就是每一個Label都是獨立分布的,相互之間沒有影響。所以交叉熵在這里是單獨對每一個節(jié)點進行計算,每一個節(jié)點只有兩種可能值,所以是一個二項分布。前面說過對于二項分布這種特殊的分布,熵的計算可以進行簡化。

同樣的,交叉熵的計算也可以簡化,即

注意,上式只是針對一個節(jié)點的計算公式。這一點一定要和單分類loss區(qū)分開來。

例子中可以計算為:

單張樣本的loss即為loss=loss貓+loss蛙+loss鼠

每一個batch的loss就是:

式中m為當(dāng)前batch中的樣本量,n為類別數(shù)。

▌總結(jié)

路漫漫,要學(xué)的東西還有很多啊。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4237

    瀏覽量

    61969
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5422

    瀏覽量

    120593
  • 交叉熵
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    2338

原文標(biāo)題:一文搞懂交叉熵在機器學(xué)習(xí)中的使用,透徹理解交叉熵背后的直覺

文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何在PyTorch中使交叉損失函數(shù)

    Keras有一個簡潔的API來查看模型的每一層輸出尺寸,這在調(diào)試網(wǎng)絡(luò)時非常有用?,F(xiàn)在在PyTorch中也可以實現(xiàn)這個功能。
    的頭像 發(fā)表于 08-18 11:01 ?2357次閱讀

    什么是交叉?

    2018-04-22 開胃學(xué)習(xí)數(shù)學(xué)系列 - 交叉
    發(fā)表于 03-21 11:08

    交叉的作用原理

    交叉作為損失函數(shù)神經(jīng)網(wǎng)絡(luò)中的作用和幾種常用的交叉損失
    發(fā)表于 06-03 09:10

    keras常用的損失函數(shù)Losses與評價函數(shù)Metrics介紹

    函數(shù)如下,它們有自己適用的應(yīng)用場景,最常用的是均方誤差和交叉誤差: 編號可用損失函數(shù)alias說明1mean_squared_error(y_true, y_pred)mseMSE
    發(fā)表于 08-18 06:31

    wincc中使用vbs常用函數(shù)

    電子發(fā)燒友提供了wincc中使用vbs常用函數(shù),1.函數(shù)array() 功能:創(chuàng)建一個數(shù)組變量格式:array(list)參數(shù):list 為數(shù)組變量中的每個數(shù)值列,中間用逗號間隔
    發(fā)表于 06-20 10:51 ?1.6w次閱讀

    大數(shù)據(jù)中邊界向量調(diào)節(jié)函數(shù)支持向量機研究

    大數(shù)據(jù)中邊界向量調(diào)節(jié)函數(shù)支持向量機研究_林蔚
    發(fā)表于 01-07 19:08 ?0次下載

    采用交叉支持向量機和模糊積分的電網(wǎng)故障診斷_邊莉

    采用交叉支持向量機和模糊積分的電網(wǎng)故障診斷_邊莉
    發(fā)表于 01-08 13:26 ?0次下載

    Zynq中使用FreeRTOS的空閑鉤子函數(shù)SDK中的設(shè)置

    本文介紹zynq中使用FreeRTOS的空閑鉤子函數(shù)SDK中的設(shè)置和一些說明
    發(fā)表于 03-09 14:33 ?2506次閱讀
    Zynq<b class='flag-5'>中使</b>用FreeRTOS的空閑鉤子<b class='flag-5'>函數(shù)</b>時<b class='flag-5'>在</b>SDK中的設(shè)置

    Softmax如何把CNN的輸出轉(zhuǎn)變成概率?交叉如何為優(yōu)化過程提供度量?

    這篇小文將告訴你:Softmax是如何把CNN的輸出轉(zhuǎn)變成概率,以及交叉是如何為優(yōu)化過程提供度量,為了讓讀者能夠深入理解,我們將會用python一一實現(xiàn)他們。
    的頭像 發(fā)表于 07-29 11:21 ?2.1w次閱讀

    基于交叉算法的跟馳模型標(biāo)定

    的確定性標(biāo)定方法會導(dǎo)致大量局部最優(yōu)值的出現(xiàn)。在此基礎(chǔ)上,本文提出了基于交叉算法的跟馳模型標(biāo)定的框架,基于蒙地卡羅與重要樣本策略逐步逼近參數(shù)的最優(yōu)概率密度函數(shù)。實例分別采用合成數(shù)據(jù)與實測數(shù)據(jù)標(biāo)定智能駕駛模型
    發(fā)表于 01-11 16:23 ?8次下載
    基于<b class='flag-5'>交叉</b><b class='flag-5'>熵</b>算法的跟馳模型標(biāo)定

    理解函數(shù)指針、函數(shù)指針數(shù)組、函數(shù)指針數(shù)組的指針

    理解函數(shù)指針、函數(shù)指針數(shù)組、函數(shù)指針數(shù)組的指針
    的頭像 發(fā)表于 06-29 15:38 ?1.5w次閱讀
    <b class='flag-5'>理解</b><b class='flag-5'>函數(shù)</b>指針、<b class='flag-5'>函數(shù)</b>指針數(shù)組、<b class='flag-5'>函數(shù)</b>指針數(shù)組的指針

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

    判斷一個函數(shù)的好壞,這需要確定一個衡量標(biāo)準(zhǔn),也就是我們通常說的損失函數(shù)(Loss Function),損失函數(shù)的確定也需要依據(jù)具體問題而定,如回歸問題一般采用歐式距離,分類問題一般采用
    的頭像 發(fā)表于 09-07 16:12 ?2575次閱讀
    當(dāng)機器學(xué)習(xí)遇上SSD,會擦出怎樣的火花呢?

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

    Loss、分位數(shù)損失 Quantile Loss、交叉損失函數(shù) Cross Entropy Loss
    的頭像 發(fā)表于 10-09 16:36 ?6118次閱讀
    機器學(xué)習(xí)和深度學(xué)習(xí)中分類與回歸常用的幾種損失<b class='flag-5'>函數(shù)</b>

    PyTorch中使用ReLU激活函數(shù)的例子

    PyTorch已為我們實現(xiàn)了大多數(shù)常用的非線性激活函數(shù),我們可以像使用任何其他的層那樣使用它們。讓我們快速看一個PyTorch中使用ReLU激活函數(shù)的例子:
    的頭像 發(fā)表于 07-06 15:27 ?2392次閱讀

    Zynq裸機設(shè)計中使用視覺庫L1 remap函數(shù)的示例

    本篇博文旨在演示如何在 Zynq 設(shè)計中使用 Vitis 視覺庫函數(shù) (remap) 作為 HLS IP,然后 Vitis 中使用該函數(shù)
    的頭像 發(fā)表于 08-01 10:18 ?582次閱讀
    <b class='flag-5'>在</b>Zynq裸機設(shè)計<b class='flag-5'>中使</b>用視覺庫L1 remap<b class='flag-5'>函數(shù)</b>的示例