信息熵html
條件熵算法
相對熵機器學習
交叉熵函數
總結學習
熵 (entropy) 這一詞最初來源於熱力學。1948年,克勞德·愛爾伍德·香農將熱力學中的熵引入信息論,因此也被稱爲香農熵 (Shannon entropy),信息熵 (information entropy)。本文只討論信息熵。首先,咱們先來理解一下信息這個概念。信息是一個很抽象的概念,百度百科將它定義爲:指音訊、消息、通信系統傳輸和處理的對象,泛指人類社會傳播的一切內容。那信息能夠被量化麼?能夠的!香農提出的「信息熵」概念解決了這一問題。編碼
一條信息的信息量大小和它的不肯定性有直接的關係。咱們須要搞清楚一件很是很是不肯定的事,或者是咱們一無所知的事,就須要瞭解大量的信息。相反,若是咱們對某件事已經有了較多的瞭解,咱們就不須要太多的信息就能把它搞清楚。因此,從這個角度,咱們能夠認爲,信息量的度量就等於不肯定性的多少。好比,有人說廣東下雪了。對於這句話,咱們是十分不肯定的。由於廣東幾十年來下雪的次數寥寥無幾。爲了搞清楚,咱們就要去看天氣預報,新聞,詢問在廣東的朋友,而這就須要大量的信息,信息熵很高。再好比,中國男足進軍2022年卡塔爾世界盃決賽圈。對於這句話,由於肯定性很高,幾乎不須要引入信息,信息熵很低。spa
考慮一個離散的隨機變量 $x$,由上面兩個例子可知,信息的量度應該依賴於機率分佈 $p(x)$,所以咱們想要尋找一個函數 $I(x)$,它是機率 $p(x)$ 的單調函數,表達了信息的內容。怎麼尋找呢?若是咱們有兩個不相關的事件 $x$ 和 $y$,那麼觀察兩個事件同時發生時得到的信息量應該等於觀察到事件各自發生時得到的信息之和,即:$I(x,y)=I(x)+I(y)$。.net
由於兩個事件是獨立不相關的,所以 $p(x,y)=p(x)p(y)$。根據這兩個關係,很容易看出 $I(x)$必定與 $p(x)$ 的對數有關 (由於對數的運算法則是 $log_a(mn)=log_am+log_an$)。所以,咱們有code
$I(x)=-logp(x)$orm
其中負號是用來保證信息量是正數或者零。而 $log$ 函數基的選擇是任意的(信息論中基經常選擇爲2,所以信息的單位爲比特bits;而機器學習中基經常選擇爲天然常數,所以單位經常被稱爲奈特nats)。$I(x)$ 也被稱爲隨機變量 $x$ 的自信息 (self-information),描述的是隨機變量的某個事件發生所帶來的信息量。圖像如圖:
最後,咱們正式引出信息熵。 如今假設一個發送者想傳送一個隨機變量的值給接收者。那麼在這個過程當中,他們傳輸的平均信息量能夠經過求 $I(x)=-logp(x)$ 關於機率分佈 $p(x)$ 的指望獲得,即:
$H(X)=-\displaystyle\sum_{x}p(x)logp(x)=-\sum_{i=1}^{n}p(x_i)logp(x_i)$
$H(X)$ 就被稱爲隨機變量 $x$ 的熵,它是表示隨機變量不肯定的度量,是對全部可能發生的事件產生的信息量的指望。
從公式可得,隨機變量的取值個數越多,狀態數也就越多,信息熵就越大,混亂程度就越大。當隨機分佈爲均勻分佈時,熵最大,且 $0\le H(X)\le logn$。稍後證實。將一維隨機變量分佈推廣到多維隨機變量分佈,則其聯合熵 (Joint entropy) 爲:
$H(X,Y)=-\displaystyle\sum_{x,y}p(x,y)logp(x,y)=-\sum_{i=1}^{n}\sum_{j=1}^{m}p(x_i,y_i)logp(x_i,y_i)$
注意點:一、熵只依賴於隨機變量的分佈,與隨機變量取值無關,因此也能夠將 $X$ 的熵記做 $H(p)$。二、令0log0=0(由於某個取值機率可能爲0)。
那麼這些定義有着什麼樣的性質呢?考慮一個隨機變量 $x$。這個隨機變量有4種可能的狀態,每一個狀態都是等可能的。爲了把 $x$ 的值傳給接收者,咱們須要傳輸2比特的消息。$H(X)=-4\times\dfrac{1}{4}log_2\dfrac{1}{4}=2\ bits$
如今考慮一個具備4種可能的狀態 $\left\{a,b,c,d\right\}$ 的隨機變量,每一個狀態各自的機率爲 $\left( \displaystyle\frac{1}{2},\frac{1}{4},\frac{1}{8},\frac{1}{8} \right)$
這種情形下的熵爲:
$H(X)=-\displaystyle\frac{1}{2}log_2\frac{1}{2}-\frac{1}{4}log_2\frac{1}{4}-\frac{1}{8}log_2\frac{1}{8}-\frac{1}{8}log_2\frac{1}{8}=1.75\ bits$
咱們能夠看到,非均勻分佈比均勻分佈的熵要小。如今讓咱們考慮如何把變量狀態的類別傳遞給接收者。與以前同樣,咱們可使用一個2比特的數字來完成這件事情。然而,咱們能夠利用非均勻分佈這個特色,使用更短的編碼來描述更可能的事件,使用更長的編碼來描述不太可能的事件。咱們但願這樣作可以獲得一個更短的平均編碼長度。咱們可使用下面的編碼串(哈夫曼編碼):0、十、1十、111來表示狀態 $\left\{a,b,c,d\right\}$。傳輸的編碼的平均長度就是:
average code length = $\displaystyle\frac{1}{2}\times1+\frac{1}{4}\times2+2\times\frac{1}{8}\times3=1.75\ bits$
這個值與上方的隨機變量的熵相等。熵和最短編碼長度的這種關係是一種廣泛的情形。Shannon 編碼定理https://baike.baidu.com/item/Shannon%20%E7%BC%96%E7%A0%81%E5%AE%9A%E7%90%86/15585931?fr=aladdin 代表熵是傳輸一個隨機變量狀態值所需的比特位下界(最短平均編碼長度)。所以,信息熵能夠應用在數據壓縮方面。這裏這篇文章http://www.ruanyifeng.com/blog/2014/09/information-entropy.html講的很詳細了,我就不贅述了。
證實$0\le H(X)\le logn$
利用拉格朗日乘子法證實:
由於 $p(1)+p(2)+\dots+p(n)=1$
因此有
目標函數:$f(p(1),p(2),\dots,p(n))=-(p(1)logp(1)+p(2)logp(2)+\dots+p(n)logp(n))$
約束條件:$g(p(1),p(2),\dots,p(n),\lambda)=p(1)+p(2)+\dots+p(n)-1=0$
一、定義拉格朗日函數:
$L(p(1),p(2),\dots,p(n),\lambda)=-(p(1)logp(1)+p(2)logp(2)+\dots+p(n)logp(n))+\lambda(p(1)+p(2)+\dots+p(n)-1)$
二、$L(p(1),p(2),\dots,p(n),\lambda)$分別對 $p(1),p(2),p(n),\lambda$ 求偏導數,令偏導數爲 $0$:
$\lambda-log(e\cdot p(1))=0$
$\lambda-log(e\cdot p(2))=0$
$\dots\dots$
$\lambda-log(e\cdot p(n))=0$
$p(1)+p(2)+\dots+p(n)-1=0$
三、求出 $p(1),p(2),\dots,p(n)$ 的值:
解方程得,$p(1)=p(2)=\dots=p(n)=\displaystyle\frac{1}{n}$
代入 $f(p(1),p(2),\dots,p(n))$ 中獲得目標函數的極值爲 $f(\displaystyle\frac{1}{n},\frac{1}{n},\dots,\frac{1}{n})=-(\frac{1}{n}log\frac{1}{n}+\frac{1}{n}log\frac{1}{n}+\dots+\frac{1}{n}log\frac{1}{n})=-log(\frac{1}{n})=logn$
由此可證 $logn$ 爲最大值。
條件熵 $H(Y|X)$ 表示在已知隨機變量 $X$ 的條件下隨機變量 $Y$ 的不肯定性。條件熵 $H(Y|X)$ 定義爲 $X$ 給定條件下 $Y$ 的條件機率分佈的熵對 $X$ 的數學指望:
條件熵 $H(Y|X)$ 至關於聯合熵 $H(X,Y)$ 減去單獨的熵 $H(X)$,即
$H(Y|X)=H(X,Y)-H(X)$,證實以下:
舉個例子,好比環境溫度是低仍是高,和我穿短袖仍是外套這兩個事件能夠組成聯合機率分佈 $H(X,Y)$,由於兩個事件加起來的信息量確定是大於單一事件的信息量的。假設 $H(X)$ 對應着今天環境溫度的信息量,因爲今天環境溫度和今天我穿什麼衣服這兩個事件並非獨立分佈的,因此在已知今天環境溫度的狀況下,我穿什麼衣服的信息量或者說不肯定性是被減小了。當已知 $H(X)$ 這個信息量的時候,$H(X,Y)$ 剩下的信息量就是條件熵:
$H(Y|X) =H(X,Y)-H(X)$
所以,能夠這樣理解,描述 $X$ 和 $Y$ 所需的信息是描述 $X$ 本身所需的信息,加上給定 $X$ 的條件下具體化 $Y$ 所需的額外信息。關於條件熵的例子能夠看這篇文章,講得很詳細。https://zhuanlan.zhihu.com/p/26551798
設 $p(x)$、$q(x)$ 是 離散隨機變量 $X$ 中取值的兩個機率分佈,則 $p$ 對 $q$ 的相對熵是:
$D_{KL}(p||q)=\displaystyle\sum_{x}p(x)log\frac{p(x)}{q(x)}=E_{p(x)}log\frac{p(x)}{q(x)}$
性質:
一、若是 $p(x)$ 和 $q(x)$ 兩個分佈相同,那麼相對熵等於0
二、$D_{KL}(p||q)\not=D_{KL}(q||p)$ ,相對熵具備不對稱性。你們能夠舉個簡單例子算一下。
三、$D_{KL}(p||q)\geq0$ 證實以下(利用Jensen不等式https://en.wikipedia.org/wiki/Jensen%27s_inequality):
由於:
$\displaystyle\sum_{x}p(x)=1$
因此:
$D_{KL}(p||q)\geq0$
總結:相對熵能夠用來衡量兩個機率分佈之間的差別,上面公式的意義就是求 $p$ 與 $q$ 之間的對數差在 $p$ 上的指望值。
如今有關於樣本集的兩個機率分佈 $p(x)$ 和 $q(x)$,其中 $p(x)$ 爲真實分佈, $q(x)$ 非真實分佈。若是用真實分佈 $p(x)$ 來衡量識別別一個樣本所須要編碼長度的指望(平均編碼長度)爲:
$H(p) =\displaystyle\sum_{x}p(x)log\frac{1}{p(x)}$
若是使用非真實分佈 $q(x)$ 來表示來自真實分佈 $p(x)$ 的平均編碼長度,則是:
$H(p,q)=\displaystyle\sum _{x}p(x)log\frac{1}{q(x)}$。(由於用 $q(x)$ 來編碼的樣原本自於分佈 $q(x)$ ,因此 $H(p,q)$ 中的機率是 $p(x)$)。此時就將 $H(p,q)$ 稱之爲交叉熵。舉個例子。考慮一個隨機變量 $x$,真實分佈$p(x)= \left( \displaystyle\frac{1}{2},\frac{1}{4},\frac{1}{8},\frac{1}{8} \right)$,非真實分佈 $q(x)=\left( \displaystyle\frac{1}{4},\frac{1}{4},\frac{1}{4},\frac{1}{4} \right)$, 則$H(p)=1.75\ bits$(最短平均碼長),交叉熵 $H(p,q)=\displaystyle\frac{1}{2}log_24+\frac{1}{4}log_24+\frac{1}{8}log_24+\frac{1}{8}log_24=2\ bits$。由此能夠看出根據非真實分佈 $q(x)$ 獲得的平均碼長大於根據真實分佈 $p(x)$ 獲得的平均碼長。
咱們再化簡一下相對熵的公式。$D_{KL}(p||q)=\displaystyle\sum_{x}p(x)log\frac{p(x)}{q(x)}=\sum_{x}p(x)logp(x)-p(x)logq(x)$
有沒有發現什麼?
熵的公式 $H(p)=-\displaystyle\sum_{x}p(x)logp(x)$
交叉熵的公式 $H(p,q)=\displaystyle\sum _{x}p(x)log\frac{1}{q(x)}=-\sum _{x}p(x)logq(x)$
因此有:
$D_{KL}(p||q)=H(p,q)-H(p)$(當用非真實分佈 $q(x)$ 獲得的平均碼長比真實分佈 $p(x)$ 獲得的平均碼長多出的比特數就是相對熵)
又由於 $D_{KL}(p||q)\geq0$
因此 $H(p,q)\geq H(p)$(當 $p(x)=q(x)$ 時取等號,此時交叉熵等於信息熵)
而且當 $H(p)$ 爲常量時(注:在機器學習中,訓練數據分佈是固定的),最小化相對熵 $D_{KL}(p||q)$ 等價於最小化交叉熵 $H(p,q)$ 也等價於最大化似然估計(具體參考Deep Learning 5.5)。
在機器學習中,咱們但願在訓練數據上模型學到的分佈 $P(model)$ 和真實數據的分佈 $P(real)$ 越接近越好,因此咱們可使其相對熵最小。可是咱們沒有真實數據的分佈,因此只能但願模型學到的分佈 $P(model)$ 和訓練數據的分佈 $P(train)$ 儘可能相同。假設訓練數據是從整體中獨立同分布採樣的,那麼咱們能夠經過最小化訓練數據的經驗偏差來下降模型的泛化偏差。即:
根據以前的描述,最小化訓練數據上的分佈 $P(train)$ 與最小化模型分佈 $P(model)$ 的差別等價於最小化相對熵,即 $D_{KL}(P(train)||P(model))$。此時, $P(train)$ 就是$D_{KL}(p||q)$ 中的 $p$,即真實分佈,$P(model)$ 就是 $q$。又由於訓練數據的分佈 $p$ 是給定的,因此求 $D_{KL}(p||q)$ 等價於求 $H(p,q)$。得證,交叉熵能夠用來計算學習模型分佈與訓練分佈之間的差別。交叉熵普遍用於邏輯迴歸的Sigmoid和Softmax函數中做爲損失函數使用。這篇文章先不說了。
或者:
一、吳軍《數學之美》
二、李航《統計學習方法》
三、馬春鵬《模式識別與機器學習》
三、https://www.zhihu.com/question/41252833 如何通俗的解釋交叉熵與相對熵
四、https://www.zhihu.com/question/65288314/answer/244557337爲何交叉熵(cross-entropy)能夠用於計算代價?
五、https://baike.baidu.com/item/%E4%BA%A4%E5%8F%89%E7%86%B5/8983241?fr=aladdin 交叉熵的百度百科解釋
六、https://blog.csdn.net/saltriver/article/details/53056816信息熵究竟是什麼
本人不是大神,大牛。目前寫博客是爲了讓我本身更深入地記憶學過的知識和對知識進行梳理。這篇博客是個人第一篇,其中借鑑了很多其餘博主的博客裏的分享,都有標註來源,若有遺忘,勞煩提醒,衷心感謝他們對本身所掌握的知識的分享。這篇博客可能還存在着一些錯誤,若有發現,請求斧正,謝謝。