阅读 221

NLP基础数学知识

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

熵的单位为二进制位(比特),又称为自信息,可以视为描述一个随机变量的不确定性的数量。它表示信息源X每发一个符号所提供的平均信息量。熵越大,不确定性就越大,正确估计其值的可能性就越小,信息量就越少。

举例:a,b,c,d,e,f 6个字符出现概率为:1/8,1/4,1/8,1/4,1/8,1/8 ,那么每个字符的熵为:

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比特

最大熵概念已知未知分布的部分知识下,使熵最大的概率分布最真实反映了事件的分布情况。

\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的信息量。

相对熵

也叫KL距离,是衡量相同事件空间里两个概率分布相对差距的测度,两个概率分布p(x)q(x)的相对熵定义为

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。表示成期望值为

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…

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

关注下面的标签,发现更多相似文章
评论