AI入门:通俗讲解熵、交叉熵和 KL 散度
全文共?4351?字,23?幅圖,
預計閱讀時間?22?分鐘。
本文被以下三份資料所啟發,純純的致敬!
[Christopher Colah] -?Visual Information Theory
[Aurélien Géron] - A Short Introduction to Entropy, Cross-Entropy and KL-Divergence
[Luis Serrano] -?Shannon Entropy and Information Gain
這次還拿馬賽克隊的哈登來舉例 。
1
主題:物理概念的熵
熵(entropy)是物理中的一個概念。如下圖,水有三種狀態:固態、液態和氣態,分別以冰、水和水蒸氣的形式存在。
它們具有不同的熵值:
冰中的分子位置固定,處于穩定狀態,因此冰具有低熵值
水中的分子相對可以進行一些移動,因此水具有中熵值
水蒸氣中的分子幾乎可以移動到任何地方,因此水蒸氣具有高熵值
現在你大體有個感覺,越不穩定的東西具有的熵值越大。
世界處處充滿不確定性,從不確定到確定肯定是得到了額外的信息。從計算機專業術語來講,比特(BIT, Binary Digit)是衡量信息的單位。?
講到這里小孩可能聽不懂了,那么就先不嚴謹的認為,比特可用?0 或 1 代表,而
傳遞 1 比特信息 =?將不確定性減半
2
主題:等概率事件的信息量
從物理切換到體育,假設馬賽克隊的哈登每次進攻,50%?機會投籃,50% 的機會灌籃,如下圖所示。
????如果我預測他會投籃,或他會灌籃
=>
????我都把兩種情況減少到了一種情況,
=>
????我將不確定性減半
=>
????我發出?1 比特的信息
計算公式
????log2(2)?= log2(1/50%) = 1
咦?信息(1 比特)和概率(50%)聯系起來了。
類比一下:
2 種情況,每種發生的概率是 1/2 = 1/21,預測任意一種情況發出 1 比特信息
4 種情況,每種發生的概率是 1/4 = 1/22,預測任意一種情況發出 2?比特信息
8 種情況,每種發生的概率是?1/8 = 1/23,預測任意一種情況發出 3?比特信息
...
2N?種情況,每種發生的概率是?1/2N,預測任意一種情況發出 N?比特信息
3
主題:不等概率事件的信息量
等概率發生的事件理解起來容易,那如果哈登每次進攻,75%?機會投籃,25% 的機會灌籃呢?如下圖所示。
這時我們可以把它等價想象成有四個事件,3 個投籃事件和 1 個灌籃事件。
那么
如果我預測投籃,相當于把 4 個事件的不確定性變成到 3 個事件的不確定性,放縮程度是 4/3,也正好是 1/75%,這時我發出了?log2(4/3) = 0.42 個比特信息
如果我預測灌籃,相當于把?4 個事件的不確定性編程到 1 個事件的確定性,放縮程度是?4/1,也正好是 1/25%,這時我發出了?log2(4)?= 2 個比特信息
如果平均來看,
????75%×0.42 + 25%×2 =?0.81
我發出的信息量是 0.81 比特。
4
主題:熵 = 平均信息量
現在我們可以歸納一下,對于有 p 概率發生的事件,預測該事件發生等價于發出?log2(1/p) 比特信息,因為?log2(1/x) =?-?log2(x),我們可以將信息量寫成?
????信息量 = - log2(p)
考慮到所有事件,平均信息量的公式為(期望公式)
????平均信息量 =?-∑i pi×log2(pi)
平均信息量就是信息論中的熵!用符號 H(p) 表示(粗體 p 代表 p1, p2, ..., pn),因此我們有
????H(p) =?-∑i?pi×log2(pi)
5
主題:等概率事件編碼
某天我在客戶那邊做項目,看不了 NBA 直播,只能通過在美國的朋友小明發短信直播,他會告訴我哈登每次進攻的手段:三分、上籃、灌籃、兩分。
但是小明用二進制密碼和我交流,我收到的短信是下面這樣子的:
? ? 0 1 0?0 1 0 0 0
為了理解短信的真實含義,我需要一個解碼表,如下:
這樣,我就可以把小明傳的密碼分段,然后將每段密碼在解碼表中找到對應的動作,因此 01001000 就解碼成上籃三分灌籃三分。
假設哈登兩分、三分、上籃、灌籃這四個動作是等概率發生,那面我們可以給編碼長度(橫軸)和動作頻率(縱軸)做一個可視化,如下圖。
圖中彩色面積之和就表示每次短信說一個動作所需要的密碼的期望長度,顯然在這種情況下,期望長度為 2 比特。
6
主題:不等概率事件編碼
如果哈登進攻手段(兩分、三分、上籃、灌籃)不是等概率發生呢?我們知道哈登最喜歡投三分(1/2 時間),再就是上籃(1/4 時間),而投兩分(1/8 時間)和上籃(1/8 時間)比較少。
每個動作我們還是用長度為 2 的密碼編碼時,那么最后得到的期望長度還是 2 比特,如下圖所示。
你要知道從小明美國從發短信很貴啊,按編碼長度收錢的,他可以做的更好一點么(即編碼更短一些)?先看下圖。
現在每次短信的期望密碼長度變成了 1.75 比特,好過 2 比特。
其實我們做法很簡單,就
對于頻率高的動作(三分),我們用短編碼(0)
對于頻率低的動作(兩分),我們用短編碼(111)
因此上面上籃三分灌籃三分的編碼為?10 0 111 100。
問題來了,當解碼的時候,我怎么把這一串編碼拆分為對應到每個動作的一個個編碼呢?如果每個動作的編碼長度都一樣,我那還可以等分,但現在每個每個動作的編碼長度都不一樣。
別問,問就是下節告訴你(盡管不情愿)!
7
主題:信息論
正式了解一下編碼:
長度為 1 的編碼有 2 個:{0, 1}
長度為 2 的編碼有 4?= 22 個:{00, 01, 10, 11}
...
長度為 N?的編碼有?2N 個:{太多了,不想寫了}
每次只要加 1 比特,編碼種數就翻倍。如下圖。
如果每個編碼長度相等,那么一串編碼就有唯一的解碼方式。比如 01101110 就可以解碼成 01-10-11-10,簡單。
如果每個編碼長度不相等,那么一串編碼可以用同解碼方法,比如?01101110 可以解碼成以下兩種(其實有很多種)
0 - 11 - 01 - 110
01 - 110 - 111 - 0
這樣不就亂套了,必須采取限制,有個規則叫 prefix codes,就是任何編碼都不能是其他編碼的前綴。舉例
如果你用了 0,你就不能再用以 0 開頭的其他編碼,如 01, 001, 011 ...
如果你用了?01,你就不能再用以?01?開頭的其他編碼,如?011, 011111 ...
從上圖可知
如果你用了?0,你失去了?1/2?的編碼空間了
如果你用了?01,你失去了?1/4?的編碼空間了
這就是代價,這需要權衡,當你對一個動作用了短編碼,你就需要對其他動作用個長編碼。
下圖就是一種編碼,而且是最優編碼(這個就不證明了,需要用到拉格朗日算子,目測沒有小孩可以懂)。
這樣我們就給每一個進攻動作一個密碼:
兩分 - 0
三分 - 10
上籃 - 110
灌籃 - 111
用上面一串密碼來編碼不會有任何歧義了。
8
主題:復習一下熵
現在我們知道最優編碼長度就是熵(通常上面一節解釋,希望現在可以秒懂熵的公式)。
無論怎么修改編碼,如果一個隨機事件的概率定下來了,那么用于交流該事件用的平均編碼長度不會低于基于該事件分布的熵。
如果很確定會發生什么事,那么就根本沒有發送信息的必要。
如果某件事有 2 種可能,概率分別為 50%,那么只需要發送 1 比特。
如果有 64 種可能,每種發生的可能性都一樣,那么平均需要 6 比特。
實際上,如果這些可能性中,每件事發生的概率相對集中,那么所需要的平均編碼長度就更短,而如果概率相對分散,那么需要的平均編碼長度就更長。均勻分布需要的平均編碼長度最長。
9
主題:交叉熵
小明通過研究哈登的歷史進攻動作發生頻率(三分 1/2,上籃 1/4,灌籃和兩分 1/8),做了一套編碼(定義為哈登編碼),每次傳遞一次信息只用 1.75 比特。
現在我又想讓小明告訴我威少的下一個進攻動作,還可以用哈登編碼來傳遞信息嗎?威少的歷史進攻動作發生頻率如下:
三分 1/8
上籃 1/2
灌籃 1/4
二分 1/8
下圖對比一下哈登和威少的進攻動作頻率圖。
這樣,如果用哈登編碼來發送威少動作分布的信息,得到信息平均編碼長度就叫做交叉熵。
反過來,如果用威少編碼來發送哈登動作分布的信息,得到信息平均編碼長度就也叫做交叉熵。
正規定義:使用專門為另一個分布制作的密碼表來發送某個分布中事件的信息,此時信息的平均編碼長度定義為交叉熵(cross-entropy)。
把哈登動作分布稱為?p 分布,把威少動作分布稱為?q 分布,那么?p 分布對?q 分布的交叉熵公式如下
?
而?q 分布對?p 分布的交叉熵公式如下(把 p 和 q 位置反過來)
熵和交叉熵的總結在下圖。
根據上面公式計算各種熵和交叉熵,得到
用哈登編碼傳遞哈登進攻信息 H(p) = 1.75 比特
用哈登編碼傳遞威少進攻信息?Hp(q) = 2.25 比特
用威少編碼傳遞威少進攻信息?H(q) = 1.75?比特
用威少編碼傳遞哈登進攻信息?Hq(p) =?2.375 比特
我們發現兩個規律:
熵小于交叉熵(符合熵是最優編碼的結論)
H(p) = Hp(p)<?Hq(p)
H(q) = Hq(q) <?Hp(q)
交叉熵不對稱(不直觀,接受吧少年)
????Hq(p) ≠ Hp(q)
????
熵比交叉熵要小,那兩者之間的差距是什么?看下節。
10
主題:KL 散度
Kullback-Leibler 散度(KL 散度)是熵與交叉熵之間的差值。稱之為散度而不是距離是因為距離是對稱的,而散度可以是不對稱的。
回到我們的場景,把哈登動作分布稱為 p 分布,把威少動作分布稱為?q 分布,那么?p 分布對 q 分布的?KL 散度定義為
而?q 分布對?p 分布的?KL 散度定義為
上面 log2(q(x)/p(x))?或 log2(p(x)/q(x)) 實際上是描述編碼每個進攻動作時兩種不同的編碼之間的長度差異。
分布 p 和 q 差別越大,那么之間的 KL 散度 KLq(p) 和?KLp(q) 也就越大。
總結
最后看看湖人隊的麥基,他進攻手段只有灌籃,如下圖所示。
我不需要做什么預測(不需要發出任何信息),因此麥基 100% 會灌籃,根據公式我們有
????H(p) = - 0×log20 -?1×log21 = 0
我們知道?log21 = 0,而且需要定義?log20 = 0。
如果某件事本身越不確定,而當你知道發生了什么時,你得到的信息也就越多。
交叉熵,即使用針對另一分布制作的密碼表對某個分布內的事件進行通訊時的長度,其組成分為兩部分:
使用針對本分布密碼表進行通訊時所需的最短平均編碼長度,即熵
因使用針對其他分布的密碼表而導致的多出的部分,即 KL 散度
數學表達式如下:
????交叉熵p(q) =?熵(q) +?散度p(q)
????交叉熵q(p)?=?熵(p)?+?散度q(p)
最后提一下機器學習用的熵公式里面的對數都是以 e 為底,即 ln(),它和以 2?為底的對數只差一個大于零的常數項,我們有
????ln(x) =?log2(x) /?log2e?=?c×log2(x)
因此在做極值問題時,不會對結果有什么影響。
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習在線手冊深度學習在線手冊AI基礎下載(pdf更新到25集)備注:加入本站微信群或者qq群,請回復“加群”獲取一折本站知識星球優惠券,請回復“知識星球”
喜歡文章,點個在看
總結
以上是生活随笔為你收集整理的AI入门:通俗讲解熵、交叉熵和 KL 散度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AI入门:不用任何公式把主成分分析讲清楚
- 下一篇: AI入门:不用任何公式把Embeddin