NLP基礎數學知識

H(X) = - \sum_{x\in\mathbb{R}}{p(x)\log_2p(x)}

熵的單位爲二進制位(比特),又稱爲自信息,能夠視爲描述一個隨機變量的不肯定性的數量。它表示信息源X每發一個符號所提供的平均信息量。熵越大,不肯定性就越大,正確估計其值的可能性就越小,信息量就越少。git

舉例:a,b,c,d,e,f 6個字符出現機率爲:1/8,1/4,1/8,1/4,1/8,1/8 ,那麼每一個字符的熵爲:github

H(P) = -[4\times\frac{1}{8}log_2\frac{1}{8}+2\times\frac{1}{4}log_2\frac{1}{4}]=2\frac{1}{2}(比特)

能夠設計一種編碼,傳輸一個字符平均須要2.5比特markdown

最大熵概念已知未知分佈的部分知識下,使熵最大的機率分佈最真實反映了事件的分佈狀況。編碼

\hat{p} = \mathop{argmax}_{p\in\mathbb{C}}H(p)

聯合熵和條件熵

H(X,Y) = - \sum_{x\in X}\sum_{y\in Y}p(x,y)log_2p(x,y)

計算時p(x,y)=0時此項爲0。聯合熵實際上就是描述一對隨機變量平均所須要的信息量設計

H(Y|X) =  \sum_ {x\in X}p(x)H(Y|X=x)=\sum_{x\in X}p(x)[-\sum_{y\in y}p(y|x)log_2p(y|x)]=-\sum_{x\in X}\sum_{y\in Y}p(x,y)log_2p(y|x)

上面公式主要是推導下面連鎖規則,理解第一步費了一些勁,另外熟悉一下多種方式計算聯合熵的公式,公式看懂了,代入時條件機率下的熵仍是容易求錯,寫代碼就更費盡了。事件

連鎖規則文檔

H(X,Y)=H(X)+H(Y|X)=H(Y)+H(X|Y)

互信息

I(X;Y)=H(X)-H(X|Y)=H(Y)-H(Y|X)

I(X;Y)反映的是在知道了Y的值之後X的不肯定性的減小量。能夠理解爲Y的值透露了多少關於X的信息量。get

相對熵

也叫KL距離,是衡量相同事件空間裏兩個機率分佈相對差距的測度,兩個機率分佈p(x)q(x)的相對熵定義爲it

D(p||q)= \sum_{x\in X}p(x)log_2\frac{p(x)}{q(x)}

該定義中約定0 log_2(0/q)=0,p log_2(p/0)=\infty。表示成指望值爲io

D(p||q)=E_p(log_2\frac{p(x)}{q(x)})

當兩個隨機分佈徹底相同時,即p=q,其相對熵爲0。當兩個隨機分佈的差異增長時,其相對熵指望值也增大。

互信息實際上就是衡量一個聯合分佈與獨立性差距多大的測度:

I(X;Y)=D(p(x,y)||p(x)p(y))

交叉熵

熵是一個不肯定性的測度,對於某件事情知道的越多,熵就越小。交叉熵的概念就是用來衡量估計模型與真實機率分佈之間差別狀況的。

若是一個隨機變量X~p(x)q(x)爲用於近似p(x)的機率分佈,那麼隨機變量X和模型q之間的交叉熵定義爲:

H(X,q)=H(X)+D(p||q)=- \sum_{x}p(x)log_2q(x)=E_p(log_2\frac{1}{q(x)})

模型的交叉熵越小,模型的表現越好。

此文檔主要由於代碼實現互信息,交叉熵等存在困難,須要對定義公式有一個深入的理解。另外markdown編輯公式太好看了,熟悉一下公式編寫。 md原文件見 github.com/zhanghaitin…

參考書目:統計天然語言處理,宗成慶