天天看點

交叉熵 --- 轉自知乎 蔡傑

看後感覺總結成一句話: KL散度是用來衡量實際分布和預測分布差别的,去掉其中的常數項,剩下的就是交叉熵,用來衡量預測誤差,求導後供權重參數學習。

簡單的交叉熵,你真的懂了嗎? - 蔡傑的文章 - 知乎 https://zhuanlan.zhihu.com/p/61944055

1. 引言

我們都知道損失函數有很多種:均方誤差(MSE)、SVM的合頁損失(hinge loss)、交叉熵(cross entropy)。這幾天看論文的時候産生了疑問:為啥損失函數很多用的都是交叉熵(cross entropy)?其背後深層的含義是什麼?如果換做均方誤差(MSE)會怎麼樣?下面我們一步步來揭開交叉熵的神秘面紗。

2. 交叉熵的來源

2.1 資訊量

一條資訊的資訊量大小和它的不确定性有很大的關系。一句話如果需要很多外部資訊才能确定,我們就稱這句話的資訊量比較大。比如你聽到“雲南西雙版納下雪了”,那你需要去看天氣預報、問當地人等等查證(因為雲南西雙版納從沒下過雪)。相反,如果和你說“人一天要吃三頓飯”,那這條資訊的資訊量就很小,因為條資訊的确定性很高。

那我們就能将事件x_0的資訊量定義如下(其中p(x_0)表示事件x_0發生的機率):

交叉熵 --- 轉自知乎 蔡傑
交叉熵 --- 轉自知乎 蔡傑

機率總是一個0-1之間的值,-log(x)的圖像如上

2.2 熵

資訊量是對于單個事件來說的,但是實際情況一件事有很多種發生的可能,比如擲骰子有可能出現6種情況,明天的天氣可能晴、多雲或者下雨等等。熵是表示随機變量不确定的度量,是對所有可能發生的事件産生的資訊量的期望。公式如下:

交叉熵 --- 轉自知乎 蔡傑

n表示事件可能發生的情況總數

其中一種比較特殊的情況就是擲硬币,隻有正、反兩種情況,該種情況(二項分布或者0-1分布)熵的計算可以簡化如下:

交叉熵 --- 轉自知乎 蔡傑

p(x)代表擲正面的機率,1-p(x)則表示擲反面的機率(反之亦然)

2.3 相對熵

相對熵又稱KL散度,用于衡量對于同一個随機變量x的兩個分布p(x)和q(x)之間的差異。在機器學習中,p(x)常用于描述樣本的真實分布,例如[1,0,0,0]表示樣本屬于第一類,而q(x)則常常用于表示預測的分布,例如[0.7,0.1,0.1,0.1]。顯然使用q(x)來描述樣本不如p(x)準确,q(x)需要不斷地學習來拟合準确的分布p(x)。

KL散度的公式如下:

交叉熵 --- 轉自知乎 蔡傑

n表示事件可能發生的情況總數

KL散度的值越小表示兩個分布越接近。

2.4 交叉熵

我們将KL散度的公式進行變形,得到:

交叉熵 --- 轉自知乎 蔡傑

前半部分就是p(x)的熵,後半部分就是我們的交叉熵:

交叉熵 --- 轉自知乎 蔡傑

機器學習中,我們常常使用KL散度來評估predict和label之間的差别,但是由于KL散度的前半部分是一個常量,是以我們常常将後半部分的交叉熵作為損失函數,其實二者是一樣的。

3. 交叉熵作為loss函數的直覺

在回歸問題中,我們常常使用均方誤差(MSE)作為損失函數,其公式如下:

交叉熵 --- 轉自知乎 蔡傑

m表示樣本個數,loss表示的是m個樣本的均值

其實這裡也比較好了解,因為回歸問題要求拟合實際的值,通過MSE衡量預測值和實際值之間的誤差,可以通過梯度下降的方法來優化。而不像分類問題,需要一系列的激活函數(sigmoid、softmax)來将預測值映射到0-1之間,這時候再使用MSE的時候就要好好掂量一下了,為啥這麼說,請繼續看:

sigmoid加MES的基本公式

交叉熵 --- 轉自知乎 蔡傑

gradient推導過程

上面複雜的推導過程,其實結論就是下面一張圖:

交叉熵 --- 轉自知乎 蔡傑

C就是 的J,sigma就是sigmoid函數,a就是predict

從以上公式可以看出,w和b的梯度跟激活函數的梯度成正比,激活函數的梯度越大,w和b的大小調整得越快,訓練收斂得就越快。而我們都知道sigmoid函數長這樣:

交叉熵 --- 轉自知乎 蔡傑

圖檔來自:https://blog.csdn.net/u014313009/article/details/51043064

在上圖的綠色部分,初始值是0.98,紅色部分初始值是0.82,假如真實值是0。直覺來看那麼0.82下降的速度明顯高于0.98,但是明明0.98的誤差更大,這就導緻了神經網絡不能像人一樣,誤差越大,學習的越快。

但是如果我們把MSE換成交叉熵會怎麼樣呢?

交叉熵 --- 轉自知乎 蔡傑

x表示樣本,n表示樣本的總數

重新計算梯度:

交叉熵 --- 轉自知乎 蔡傑

推導過程

交叉熵 --- 轉自知乎 蔡傑

另外sigmoid有一個很好的性質:

交叉熵 --- 轉自知乎 蔡傑

我們從結果可以看出梯度中不再含有sigmoid的導數,有的是sigmoid的值和實際值之間的差,也就滿足了我們之前所說的錯誤越大,下降的越快。

這也就是在分類問題中常用cross entropy 而不是 MSE的原因了。

繼續閱讀