机器学习与文本中的各种熵

假如一个朋友告诉你外面下雨了,你也许觉得不怎么新奇,因为下雨是很平常的 一件事情,但是如果他告诉你他见到外星人了,那么你就会觉 得很好奇: 真的吗?外星人长什么样?同样两条信息, 一条信息量很小, 一条信息量很大,很有价值。我们可以用熵来度量生活中的各个信息量。

信息熵

那么怎么量化上面所说的这个价值呢?这就需要信息熵, 一个随机变量 X 的信息熵定义如下:
H(X)=xϵXp(x)logp(x)H(X) = -\sum_{x\epsilon X}p(x)\log p(x)

信息越少,事件(变量)的不确定性越大,它的信息熵也就越大,搞 明白该事件所需要的额外信息就越多, 也就是说搞清楚小概 率事件所需要 的额外信息较多,比如说,为什么大多数 人愿意相信专 家 的话,因为专家 在他专注的领域了解的知识(信息量)多 ,所以他对某事件的看法较透彻, 不确定性就越小,那么他所传达出来的信息量就很大, 听众搞明白该事件所需要的额外信息量就很小。总之,记住一句话: 信息熵表示的是不确定性的度量。信息熵越大,不确定性越大。

联合熵与条件熵

联合熵的 定义为:
H(X,Y)=xϵX,yϵYp(x,y)logp(x,y)H(X,Y) = -\sum_{x\epsilon X,y\epsilon Y}p(x,y)\log{p(x,y)}

联合熵描述的是一对随机变量X和 Y的不确定性。

条件熵的定义为:
H(YX)=xϵX,yϵYp(x,y)logp(yx)H(Y|X) = -\sum_{x\epsilon X,y\epsilon Y}p(x,y)\log{p(y|x)}
条件熵衡量的是 : 在一个随机变量 X 己知的情况下,另一个随机变量Y 的不确定性。

相对熵,互信息,交叉熵

相对熵(又叫 KL 距离,信息增益) 的定义如下:

DKL(pq)=xϵXp(x)logp(x)q(x)D_{KL}(p||q) = \sum_{x\epsilon X}p(x)\log{\frac{p(x)}{q(x)}}

相对熵是衡量相同事件空间里两个概率分布 (函数)的差异程度(而前面的熵衡量的是随机变量的关系)。当两个概率分布完全相同时,它们的相对熵就为 0,当它们的差异增加时,相对熵就会增加。相对熵又叫KL距离,但是它不满足距离定义的 3 个条件中的两个:( 1) 非负性(满足): (2)对称性(不满足); (3) 三角不等式(不满足)。它 的物理意义就是如 果用 q 分布来编码 p 分布(一般就是真实分布)的话,平均每个基本事件编码长度增加了多少比特。

JS散度(Jensen-Shannon divergence)

JS散度也称JS距离,是KL散度的一种变形。
JS(PQ)=12KL(P(x)P(x)+Q(x)2+12KL(Q(x))P(x)+Q(x)2)JS(P||Q) = \frac{1}{2}KL(P(x)||\frac{P(x) + Q(x)}{2} + \frac{1}{2}KL(Q(x))||\frac{P(x) +Q(x)}{2})

但是不同于KL主要又两方面:

(1)值域范围

JS散度的值域范围是[0,1],相同则是0,相反为1。相较于KL,对相似度的判别更确切了。

(2)对称性

即 JS(P||Q)=JS(Q||P),从数学表达式中就可以看出。

两个随机变量X和 Y,它们的互信息定义为:

I(X;Y)=DKL(p(x,y)p(x)p(y))=xϵX,yϵYp(x,y)logp(x,y)p(x)p(y)I(X;Y) = D_{KL}(p(x,y)||p(x)p(y)) = \sum_{x\epsilon X,y\epsilon Y} p(x,y)log{\frac{p(x,y)}{p(x)p(y)}}

互信息是衡量两个随机变量的相关程度,当 X和 Y完全相关时,它们
的互信息就是1:反之,当 X和 Y完全无关时,它们的互信息就是 0。 对于 x 和 y 两个具体的事件来说,可以用点互信息( Pointwise Mutual Information)来表示它们的相关程度 。后面的章节就不做具体区分,都叫
作互信息 。
PMI(x;y)=logp(x,y)p(x)p(y)PMI(x;y) = \log{\frac{p(x,y)}{p(x)p(y)}}

互信息和熵有如下关系:
I(X;Y)=H(X)H(XY)=H(Y)H(YX)I(X;Y) = H(X) - H(X|Y) = H(Y) - H(Y|X)

互信息和 KL 距离有如下关系:
I(X;Y)=DKL(p(x,y)p(x)p(y))=EX[DKL(p(yx)p(y))]=EY[DKL(p(xy)p(x))]\begin{aligned}I(X;Y) &= D_{KL}(p(x,y)||p(x)p(y))\\&=E_X[D_{KL}(p(y|x)||p(y))]\\&=E_Y[D_{KL}(p(x|y)||p(x))]\end{aligned}
如果X和Y完全不相关, p(x,y)=p(x)p(y),则DKL(PIIq)=0, 互信
息也为 0。可以看出互信息是 KL 距离的期望。

交叉熵的定义如下:

H(X,q)=H(X)+DKL(pq)=xp(x)logq(x)()\begin{aligned}H(X,q) &=H(X) + D_{KL}(p||q)\\&=-\sum_xp(x)\log{q(x)}(离散分布时)\end{aligned}

它其实就是用分布 q 来表示 X 的熵是多少,也就是说用分布 q 来编码 X (其完美分布是 p)需要多付出多少比特 。
交叉熵和相对熵的关系:
D(PQ)=H(P,Q)H(P)D(P||Q) = H(P,Q) - H(P)

文本中的熵

在文本处理中,有个很重要的数据就是词的互信息。词的互信息可以用来进行纠错等,前面说了,互信息是衡量两个随机变量(事件) 的相关程度,那么词的互信息,就是衡量两个词的相关程度 ,例如,“计算机”和“硬件”的互信息就比“计算机”和“杯子” 的互信息要大 ,因为它们更相关。那么如何在大量的语料下统计出词与词的互信息呢?公式中可以看到需要计算3个值:p(x)、 p(y)和p(x,y)。它们分别表示x独立出现的概率, y独立出现的概率, x和y同时出现的概率。 前两个很容易计算 ,直接统计词频然后除以总词数就知道了,最后一个也很容易,统计一下x 和y 同时出现(通常会限定一个窗口)的频率,除以所有无序对的个数就可以了。这样,词的互信息就计算出来了,这种统计最适合使用 Map-Reduce 来计算 。

熵为什么用log

第一,假设存在一个随机变量,可以问一下自己当我们观测到该随机变量的一个样本时,我们可以接受到多少信息量呢?毫无疑问,当我们被告知一个极不可能发生的事情发生了,那我们就接收到了更多的信息;而当我们观测到一个非常常见的事情发生了,那么我们就接收到了相对较少的信息量。因此信息的量度应该依赖于概率分布,所以说熵的定义应该是概率的单调函数
第二,假设两个随机变量和是相互独立的,那么分别观测两个变量得到的信息量应该和同时观测两个变量的信息量是相同的,即:h(x+y) = h(x)+h(y)。而从概率上来讲,两个独立随机变量就意味着p(x,y)=p(x)p(y),所以此处可以得出结论熵的定义h应该是概率p(x)的log函数。因此一个随机变量的熵可以使用如下定义:
(x)=log2p(x)(x)=-log_2p(x)
此处的负号仅仅是用来保证熵(即信息量)是正数或者为零。而log函数基的选择是任意的(信息论中基常常选择为2,因此信息的单位为比特bits;而机器学习中基常常选择为自然常数,因此单位常常被称为nats)。最后,我们用熵来评价整个随机变量平均的信息量,而平均最好的量度就是随机变量的期望

机器学习与文本中的各种熵