機器學習基礎--信息論相關概念總結以及理解
摘要:
熵(entropy)、KL 散度(Kullback-Leibler (KL) divergence)和交叉熵(cross-entropy)以及JS散度,在深度學習以及機器學習不少地方都用的到,尤爲是對於目標函數和損失函數的定義。在邏輯迴歸問題中,目標函數就是用交叉熵定義的。
1. 信息量(熵)
信息論是應用數學的一個分支,主要研究的是對一個信號包含信息的多少進行量化。信息論的基本想法是一個不太可能的事件發生了,要比一個很是可能的事件發生,能提供更多的信息。事件發生的可能性大,信息量少;事件發生的可能性小,其信息量大。機器學習
好比:早上你出門碰到一個朋友,他告訴你今天是晴天,這句話的信息量就很小,由於天氣你已經知道了,並且是個肯定性事件,等同於廢話。
要是他再告訴你,明天可能下雪,這句話的信息量就比剛剛的話要大好多。
能夠看出信息量的大小與事件發生的可能性成反比。函數
- 很是可能發生的事件信息量要比較少。在極端狀況下,確保可以發生的事件應該沒有信息量。
- 較不可能發生的事件具備更高的信息量。
- 獨立事件應具備增量的信息。例如,投擲的硬幣兩次正面朝上傳遞的信息量,應該是投擲一次硬幣正面朝上的信息量的兩倍。
爲了知足上面 3 個性質,定義了一事件 \(x=X\) 的自信息(self-information)爲:
\[I(x)=-log(P(x)) \tag{1} \]
使用 \(x\) 表示隨機變量,使用 \(x_1,x_2,...,x_i,...,x_N\) 或者 \(x\) 表示隨機變量 \(x\) 可能的取值。當式(1)中 log 以 2 爲底數時,\(I(x)\) 單位是比特(bit)或者香農(shannons);當 \(log\) 以天然常數 \(e\) 爲底數時,\(I(x)\) 單位是奈特(nats)。這兩個單位之間能夠互相轉換,經過比特度量的信息只是經過奈特度量信息的常數倍。(使用對數換底公式轉化)在機器學習中大部分是以\(e\)爲底。
自信息只能處理單個的輸出。咱們可使用香農熵(Shannon entropy)來對整個機率分佈中的不肯定性總量進行量化:學習
\[H(P)=H(x)= E_{x∼P}[I(x)]=\sum_{i=1}^NP(x_i)I(x_i)=−\sum_{i=1}^NP(x_i)logP(x_i)\tag{2} \]
式(2)後兩個等號是在離散型變量的狀況下成立,對於連續型變量,則須要求積分。當 x 是連續的,香農熵被稱爲微分熵(differential entropy)。
熵的一些性質:編碼
- 那些接近肯定性的分佈(輸出幾乎能夠肯定)具備較低的熵。
- 那些接近均勻分佈的機率分佈具備較高的熵。
當一個事件的發生機率爲\(p(x)\) 時,它的信息量就是\(−log(p(x))\)。那麼咱們將這個事件的全部可能發生的結果都羅列出來,求的該事件信息量的指望(信息量的算術平均)
熵就是用來描述事件發生的不肯定性。事件所含有的信息
從KL散度的角度理解熵的概念將熵的定義式寫爲:spa
\[H(P)=log(\frac{1}{P(x)}) \]
\(1\)爲肯定性事件,則事件\(P\)的熵(自信息)爲與肯定性事件的差別,也就是\(P\)變成肯定性事件所須要的信息。orm
2. KL散度
KL 散度能夠用來衡量兩個分佈的差別。事件
在機率論與統計中,咱們常常會將一個複雜的分佈用一個簡單的近似分佈來代替。KL 散度能夠幫助咱們測量在選擇一個近似分佈時丟失的信息量。深度學習
假設原機率分佈爲 \(P(x)\),近似機率分佈爲 \(Q(x)\),則使用 KL 散度衡量這兩個分佈的差別:數學
\[D_{KL}(P||Q)=E_{x∼P}[log(\frac{P(x)}{Q(x)})]=E_{x∼P}[logP(x)−logQ(x)] \tag{3} \]
若是 x 是離散型變量,式(3)還能夠寫成以下形式:it
\[D_{KL}(P||Q)=\sum_{i=1}^NP(x_i)logP(x_i)Q(x_i)=\sum_{i=1}^NP(x_i)[logP(x_i)−logQ(x_i)] \tag{4} \]
對於連續型變量,則式(4)不能這麼寫,須要求積分。若是 x 是連續型變量,則式(3)中機率分佈最好用 \(p(x)\)和\(q(x)\) 代替 \(P(x)\)和\(Q(x)\)。習慣上,用小寫字母表示連續型變量的機率密度函數(probability density function,PDF),用大寫字母表示離散型變量的機率質量函數(probability mass function,PMF)。(PDF和PMF都是用來描述機率分佈)
KL 散度的一些性質:
- KL 散度是非負的。
- KL 散度爲 0,當且僅當 P 和 Q 在離散型變量的狀況下是相同的分佈,或者在連續型變量的狀況下是「幾乎到處」相同的。
- KL 散度不是真的距離,它不是對稱的,即 \(D_{KL}(P||Q)≠D_{KL}(Q||P)\),故稱其爲散度。
3. 交叉熵
交叉熵(cross-entropy)和 KL 散度聯繫很密切。一樣地,交叉熵也能夠用來衡量兩個分佈的差別。以離散型變量 x 爲例:
\[H(P,Q)=−E_{x∼P}logQ(x)=−\sum_{i=1}^NP(x_i)logQ(x_i) \tag{5} \]
交叉熵 H(P,Q)=H(P)+DKL(P||Q)。其中 H(P)(即 H(x) ,其中 x∼P)爲分佈 P 的熵,DKL(P||Q) 表示兩個分佈的 KL 散度。當機率分佈 P(x) 肯定了時,H(P) 也將被肯定,即 H(P) 是一個常數。在這種狀況下,交叉熵和 KL 散度就差一個大小爲 H(P) 的常數。下面給出一個簡單的推導:
咱們將式(4)中 KL 散度的公式再進行展開:
\[D_{KL}(P||Q)=\sum_{i=1}^NP(x_i)[logP(x)−logQ(x)]=\sum_{i=1}^NP(x_i)logP(x_i)−\sum_{i=1}^NP(x_i)logQ(x_i)=−[−\sum_{i=1}^NP(x_i)logP(x_i)]+[−\sum_{i=1}^NP(x_i)logQ(x_i)]=−H(P)+H(P,Q) \tag{6} \]
即 \(H(P,Q)=H(P)+D_{KL}(P||Q)\)。
最好本身手推一下 公式很簡單 手推能夠加深印象。
交叉熵的一些性質:
- 非負。
- 和 KL 散度相同,交叉熵也不具有對稱性,即 \(H(P,Q)≠H(Q,P)\)。
- 對同一個分佈求交叉熵等於對其求熵。
爲何既有 KL 散度又有交叉熵?在信息論中,熵的意義是對 \(P\) 事件的隨機變量編碼所需的最小字節數,KL 散度的意義是「額外所需的編碼長度」若是咱們使用 Q 的編碼來表示 P,交叉熵指的是當你使用 Q 做爲密碼來表示 P 是所須要的 「平均的編碼長度」。可是在機器學習評價兩個分佈之間的差別時,因爲分佈 P 會是給定的,Q爲生成的分佈,來衡量量分佈的差別,因此此時 KL 散度和交叉熵的做用實際上是同樣的,並且由於交叉熵少算一項\(H(P)\),更加簡單,因此選擇交叉熵會更好。
4. JS散度
JS散度也是用於度量兩個機率分佈的類似度,其解決了KL散度不對稱的缺點。
再GAN公式的推導中會用到,到時候再回來。
\[JS(p||q)=\frac{1}{2}KL(p||\frac{p+q}{2})+\frac{1}{2}KL(q||\frac{p+q}{2}) \tag{7} \]
JS散度的一些性質:
- 值域\(JS(P||Q)\in[0,1]\),P,Q兩分佈相同爲0,相反爲1
- 對稱性