交叉熵


title: 交叉熵 date: 2018-06-24 23:59:54 tags:機器學習

  • Math mathjax: true

0x00 信息量

熵是一個很重要的概念。首先來了解一下信息量的概念。信息量大小能夠參考我的感受,粗略來說,某時間A的信息量大小和其發生的機率成反比。這個仍是很好理解的,比方說「高考取消」這件事給人帶來的信息量就比較大。固然不一樣的人對這件事的感覺不同,可是若是把信息量和機率聯繫起來就能作運算。函數

假設X是一個離散型隨機變量,其取值集合爲χ,機率分佈函數p(x)=Pr(X=x),x∈χ,則定義事件 X = x_0 的信息量爲:學習

I(x_0) = -log(p(x_0))

0x01 熵

假設某個事件A有n多種可能的狀況,每種狀況一種機率,那麼A帶來的信息量有多大呢?用數學上的指望來表示彷佛恰到好處。而熵就定義成 表示全部信息量的指望code

H(X) = -\sum_{i=1}^{n}{p(x_i)log(p(x_i))}

對於二分問題,其取值只有兩種可能,對於這類問題,熵的計算方式能夠化簡爲以下算式:cdn

H(X) = -p(x_i)log(p(x_i)) - (1-p(x_i))log(1-p(x_i))

0x02 相對熵(KL散度)

在機器學習中,經常須要衡量兩個分佈的差別。好比,用P(X)描述樣本的真實分佈,用Q(X)描述模型預測的分佈。這裏引入一個 KL散度 的定義blog

D_{KL}(p|q) = \sum_{i=1}^{n}{p(x_i)log(\frac{p(x_i)}{q(x_i)})}

其中,n爲事件的全部可能性。D_KL 的值越小,代表兩個分佈越接近。事件

須要注意的是,KL散度不具備對稱性,也就是說 D_{KL}(p|q) \not ={D_{KL}(q|p)}。可是通常來講,兩個分佈的KL散度越小,分佈就越類似(本身和本身的KL散度爲0)。圖片

KL散度計算問題

雖然看起來KL散度就這麼簡單一公式,但畢竟任意一個分佈 p_i 或者 q_i 並不能保證其機率必定大於0呀。當其中任意一者出現0,問題就來了。數學

  • p_i = 0 時。\lim_{p\to 0}{p\log{p}} = 0
  • p_i \not ={0} 可是 q_i = 0 時。這個時候認爲 D_{KL}(p|q)=\infty

p_iq_i 取0的問題,在用代碼計算上不至於太難解決,只要保證每一項都能加上一個足夠小的非零正數便可。it

0x03 交叉熵

將上面提到的KL散度公式進一步變形

D_{KL}(p|q) = \sum_{i=1}^{n}{p(x_i)log(p(x_i))} - \sum_{i=1}^{n}{ p(x_i)log(q(x_i)) } = -H(p(x)) - \sum_{i=1}^{n}{p(x_i)log(q(x_i))}

前半部分剛好是p的熵,後半部分定義爲「交叉熵」。由於前半部分的值保持不變,所以只須要關注交叉熵。

交叉熵的公式定義

H(p,q) = -\sum_{i=1}^{n}{p(x_i)log(q(x_i))}

0x04 例子

舉個圖像分類的例子,假設有一張圖片,圖片中描述的物體是一隻狗

對應的標籤和模型輸出的預測值爲:

category dog cat duck
Label 1 0 0
Predicts 0.7 0.2 0.1

假設使用天然對數,能夠知道此時的交叉熵爲 H(p,q) = -1*log(0.7) − 0*log(0.2) − 0*log(0.1) = 0.357

如今又假設有一張圖片

那麼如今,對應的標籤和模型輸出的預測值爲(注意機率之和不必定爲1):

category dog cat duck
Label 0 1 1
Predicts 0.2 0.8 0.5

仍是使用天然對數,能夠知道此時的交叉熵爲 H(p,q) = −0*log(0.2) − 1*log(0.8) − 1*log(0.5) = 0.916

0x05

在實際應用中,交叉熵會和 Softmax 結合起來使用,緣由在於二者結合求偏導數會比不結合更加簡單。

相關文章
相關標籤/搜索