日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

如何理解熵、交叉熵、KL散度、JS散度

發布時間:2023/12/14 javascript 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何理解熵、交叉熵、KL散度、JS散度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在機器學習、深度學習中,經常聽見熵(entropy)、交叉熵(cross-entropy)、KL散度( Kullback–Leibler divergence )、JS散度( Jensen-Shannon divergence )這些概念。初次聽見這些概念肯定一頭霧水,在很多地方都能見到對這些概念 high-level 的解釋,但 high-level 的解釋并不能對這些概念更深入的理解。比如熵是信息的度量,但是為什么熵可以用來作為信息的度量,則不知其緣由。接下來則由淺入深,深入理解這些概念。

編碼(Codes)

在計算機中,任何信息都是用0、1來存儲。所以為了將信息存儲在計算機中,我們要將信息編碼為 0、1串以便存儲在計算機中。

假設 Bob 是一個動物愛好者,住在美國,他只談論四種動物:dog、cat、fish、bird

為了和 Bob 進行交流,我們之間需要建立一個 code 把單詞映射為 0、1 串。

這些0、1串在網絡上傳輸需要消耗一定的帶寬,所以我們希望0、1串越小越好,這樣消耗的帶寬就越小。如何對信息進行編碼呢?

第一種方案:定長編碼

發送信息時,只需要將相應的單詞替換為對應的編碼就行,例如:

第二種方案:變長編碼

假設 Bob 非常喜歡狗,他談論狗的頻率比其它動物要高,假設談論每個動物的概率如下所示。

為了減少帶寬,一個直覺的編碼方式為:對頻率比較高的單詞用較短的編碼長度,頻率比較低的單詞使用較長的編碼長度,這樣最后得到的總長度是最小的。使用變長編碼時,為了讓解碼唯一,可以使用哈夫曼編碼來實現。一種變長編碼方式為:

熵(Entropy)

以橫軸表示每個單詞的編碼長度,縱軸表示談論每種動物的頻率。

使用定長編碼時可以得到下圖:

則發送一個單詞所使用編碼長度的期望(也可以看成圖中的面積)為:
12?2+14?2+18?2+18?2=2bits\frac{1}{2}*2+\frac{1}{4}*2+\frac{1}{8}*2+\frac{1}{8}*2=2\ bits 21??2+41??2+81??2+81??2=2?bits

使用變長編碼時可以得到下圖:

則發送一個單詞所使用編碼長度的期望(也可以看成圖中的面積)為:
12?1+14?2+18?3+18?3=1.75bits\frac{1}{2}*1+\frac{1}{4}*2+\frac{1}{8}*3+\frac{1}{8}*3=1.75\ bits 21??1+41??2+81??3+81??3=1.75?bits
使用哈夫曼編碼定義的變長編碼可以達到最優的期望,證明略。

所以熵可定義為:最優的平均編碼長度(即期望),也即是圖中的面積

如何計算熵?

長度為 1 的有 2 種編碼:0、1

長度為 2 的有 4 種編碼:00、01、10、11

長度為 3 的有 8 種編碼:000、001、010、011、100、101、110、111

以此類推…

為了獲得最優編碼長度常使用變長編碼,而使用變長編碼時,會損失一部分編碼空間。例如:使用 01 作為某一個編碼時,以 01 開頭的那些編碼都不能用(例:010、011、0100、0110…)。在所有編碼種,有 14\frac{1}{4}41? 的編碼以 01 開頭,所以我們損失了 14\frac{1}{4}41? 的編碼空間。

以此類推,當我們想使用一個長度為 LLL 的編碼長度時,損失了 12L\frac{1}{2^L}2L1? 的編碼空間。
cost(L)=12Lcost(L)=\frac{1}{2^L} cost(L)=2L1?

L=log2(1cost)=log2(12L)L=log_2(\frac{1}{cost})=log_2(\frac{1}{2^L}) L=log2?(cost1?)=log2?(2L1?)

同理,為了獲得某個單詞 xxx 的編碼,花費了 p(x)p(x)p(x) (注:p(x)p(x)p(x) 為某一個單詞的概率,這個概率可以看作 costcostcost )。單詞 xxx 的編碼長度為:

L(x)=log2(1p(x))L(x)=log_2(\frac{1}{p(x)}) L(x)=log2?(p(x)1?)

ppp 為單詞詞頻的概率分布,ppp 的最優平均編碼長度定義為 ppp 的 熵 H(p)H(p)H(p):
H(p)=∑xp(x)log?2(1p(x))=?∑p(x)log?2(p(x))H(p) = \sum_x p(x)\log_2\left(\frac{1}{p(x)}\right)=- \sum p(x)\log_2(p(x)) H(p)=x?p(x)log2?(p(x)1?)=?p(x)log2?(p(x))

交叉熵(Cross-Entropy)

假設我還有一個朋友 Alice,她喜歡貓,她的詞頻概率如下圖 q(x)q(x)q(x) 所示:

當 Alice 使用 Bod 的編碼和我進行通信時,她的平均編碼長度為:
18?1+12?2+14?3+18?3=2.25bits\frac{1}{8}*1+\frac{1}{2}*2+\frac{1}{4}*3+\frac{1}{8}*3=2.25\ bits 81??1+21??2+41??3+81??3=2.25?bits
交叉熵可定義為:當某一個分布( 這里為 q(x)q(x)q(x) )使用另一個分布( 這里為 p(x)p(x)p(x))的最優編碼長度進行編碼時的平均編碼長度。
Hp(q)=∑xq(x)log?2(1p(x))=?∑xq(x)log?2(p(x))H_p(q) = \sum_x q(x)\log_2\left(\frac{1}{p(x)}\right)=-\sum_x q(x)\log_2\left(p(x)\right) Hp?(q)=x?q(x)log2?(p(x)1?)=?x?q(x)log2?(p(x))

有四種情況:

  • Bob 使用他自己的編碼 ( H(p)=1.75bitsH(p)=1.75\ bitsH(p)=1.75?bits )
  • Alice 使用 Bob 的編碼 ( $Hp(q)=2.25\ bits $)
  • Alice 使用她自己的編碼 ( H(q)=1.75bitsH(q)=1.75\ bitsH(q)=1.75?bits )
  • Bob 使用 Alice 的編碼 ( Hq(p)=2.375bitsHq(p)=2.375\ bitsHq(p)=2.375?bits )

可以發現:Hp(q)≠Hq(p)H_p(q) \neq H_q(p)Hp?(q)?=Hq?(p) ,即:交叉熵并不對稱

我們為什么要關注交叉熵?因為交叉熵給我們提供了一個方式來度量兩個概率分布有多相同。

如果概率分布 pppqqq 越不相似,pppqqq 的交叉熵比 ppp 自己的熵更大,即:

同理,qqqppp 的交叉熵比 qqq 自己的熵更大

KL散度( Kullback–Leibler divergence )

pppqqq 的KL散度定義為:分布 ppp 使用 qqq 的最優編碼進行編碼時的平均編碼長度( pppqqq 的交叉熵 )與 分布 ppp 的最優平均編碼長度( ppp 的熵 )的差值。
KaTeX parse error: No such environment: equation at position 8: \begin{?e?q?u?a?t?i?o?n?}? \begin{split} …
KL散度有點像一種距離,用來度量兩個分布之間的差距。如果 pppqqq 相同,則KL散度為0。pppqqq 越不相同,KL散度越大。

KL散度也是不對稱的。

JS散度( Jensen-Shannon divergence )

JS散度基于KL散度,是一個對稱平滑版本的KL散度。

pppqqq 的JS散度定義為:
DJS(p∣∣q)=12DKL(p∣∣m)+12DKL(q∣∣m),wherem=12(p+q)D_{JS}(p||q)=\frac{1}{2}D_{KL}(p||m)+\frac{1}{2}D_{KL}(q||m),\ where\ m=\frac{1}{2}(p+q) DJS?(pq)=21?DKL?(pm)+21?DKL?(qm),?where?m=21?(p+q)

總結

以上是生活随笔為你收集整理的如何理解熵、交叉熵、KL散度、JS散度的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。