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…

参考书目:统计天然语言处理,宗成庆