NLP基础-熵

一些基础

互斥

如果事件A和B不可能同时发生,即$AB=\Phi$,则称A与B是互斥的。

对立

如果A与B互斥,又在每次试验中不是出现A就是出现B,即$AB=\Phi$且$A+B=\Omega$,则称B是A的对立事件。

条件概率

在事件B发生的条件下,事件A发生的概率称为事件A在事件B已发生的条件下的条件概率,记作P(A|B)。当P(B)>0时,规定:
$$
P(A|B)=\frac {P(AB)}{P(B)}
$$
当P(B)=0时,规定P(A|B)=0。由条件概率的定义,可以得到乘法公式
$$\begin {aligned}
&P(AB)=P(A)P(B|A)\\\\
&P(A_1A_2…A_n)=P(A_1)P(A_2|A_1)P(A_3|A_2A_1)…P(A_n|A_{n-1}A_{n-2}…A_1)=\prod_i^n P(A_i|A_{i-1}A_{i-2}…A_1)
\end {aligned}$$
一般而言,条件概率P(A|B)与概率P(A)是不等的。但在某些情况下,它们是相等的。根据条件概率的定义和乘法公式有:$$P(AB)=P(A)P(B)$$这时,称事件A与B是相互独立的。

贝叶斯公式

根据乘法公式,可以的得到下面重要的公式,该公式称为贝叶斯公式:
$$P(A|B)=\frac {P(B|A)(A)}{P(B)}$$
一般地,事件$A_1,A_2,…,A_n$两两互斥,事件B满足$B\subset A_1+A_2+…+A_n$且$P(A_i)>0(i=1,2,…,n),P(B)>0$,贝叶斯公式可以推广为:$$
p(A_j|B)=\frac{P(A_j)P(B|A_j)}{P(A_1)P(B|A_1)+…+P(A_n)P(B|A_n)}=\frac {P(A_j)P(B|A_j)}{\sum_i^n P(A_i)P(B|A_i)}
$$
实用上称,$P(A_1),P(A_2),…,P(A_n)$的值称为先验概率,称$P(A_1|B),P(A_2|B),…,P(A_n|B)$的值称为后验概率,贝叶斯公式便是从先验概率计算后验概率的公式。

各种熵(entropy)

在信息论中,如果发送一个消息所需要的编码的长度较大,则可以理解为消息所蕴涵的信息量较大,如果发送一个消息所需要的编码长度较小,则该消息所蕴涵的信息量较小,平均信息量即为发送一个消息的平均编码长度,可以用的概念来描述。

自信息

自信息是熵的基础,自信息表示某一事件发生时所带来的信息量的多少。当事件发生的概率越大,则自信息越小。当一件事发生的概率非常小,并且实际上也发生了(观察结果),则此时的自信息较大。某一事件发生的概率非常大,并且实际上也发生了,则此时的自信息较小。如何度量它?现在要寻找一个函数,满足条件:事件发生的概率越大,则自信息越小;自信息不能是负值,最小是0;自信息应该满足可加性,并且两个对立事件的自信息应该等于两个事件单独的自信息。自信息的公式如下:
$$I(p_i)=-log(p_i)$$
其中,$p_i$表示随机变量的第i个事件发生的概率,自信息单位是bit,表征描述该信息需要多少位。可以看出,自信息的计算和随机变量本身数值没有关系,只和其概率有关。

熵的定义

设X是取有限个值的随机变量,它的分布密度为$p(x)=P(X=x),且x\in X$,则X的熵的定义为:$$H(x)=-\sum _{x \in X}p(x)log_ap(x)$$
熵描述了随机变量的不确定性。一般也说,熵给出随机变量的一种度量。对于数底a可以是任何正数,对数底a决定了熵的单位,如果a=2,则熵的单位称为比特(bit)。

熵的基本性质

  • $H(x)<=log|X|$,其中等号成立当且仅当$p(x)=\frac {1}{|x|}$,这里|X|表示集合X中的元素个数。该性质表明等概场具有的最大熵;
  • $H(X)>=0$,其中等号成立的条件当且仅当对某个i,$p(x_i)=1$,其余的$p(x_k)=0 (k!=i)$。这表明确定场(无随机性)的熵最小;
  • 熵越大,随机变量的不确定性就越大,分布越混乱,随机变量状态数越多;

联合熵

设X,Y是两个离散随机变量,它们的联合分布密度为p(x,y),则给定X时Y的条件熵定义为:
$$\begin{aligned}
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 p(y|x)]\\\\
&=-\sum_{x \in X}\sum_{y \in Y} p(x,y)log p(y|x)
\end{aligned}
$$
联合熵和条件熵的关系可以用下面的公式来描述,该关系一般也称为链式规则:$$
H(X,Y)=H(X)+H(Y|X)$$
信息量的大小随着消息的长度增加而增加,为了便于比较,一般使用熵率的概率。熵率一般也称为字符熵(per-letter entropy)或词熵(per-word entropy)。

熵率

对于长度为n的消息,熵率的定义为:
$$
H_{rate}=\frac{1}{n}H(x_{1n}) = -\frac {1}{n}\sum_{x_{1n}}p(x_{1n})log p(x_{1n})
$$
这里的$x_{1n}$表示随机变量序列$X_1,X-2…X_n,p(x_{1n})表示分布密度p(x_1,x_2,…,x_n)$。
可以把语言看做一系列语言单位构成的一个随机变量序列$L={X_1X_2…X_n}$,则语言L的熵可以定义这个随机变量序列的熵率:
$$
H_{rate}=\lim_{x \to +\infty}\frac{1}{n}H(H_1,H_2,…,H_n)
$$

互信息

根据链式规则,有:$$H(X,Y)=H(X)+H(Y|X)=H(Y)+H(X|Y)$$可以推导出:$$
H(X)-H(X|Y)=H(Y)-H(Y|X)
$$
H(X)与H(X|Y)的差称为互信息,一般记作I(X;Y)。I(X;Y)描述了包含在X中的有关Y的信息量,或包含在Y中的有关X的信息量。下图很好的描述了互信息和熵之间的关系。
mark
$$\begin{aligned}
I(X;Y)&=H(X)-H(X|Y)\\\\&=H(X)+H(Y)-H(X,Y)\\\\
&=\sum_x p(x)log \frac {1}{p(x)}+\sum_x p(y)log \frac {1}{p(y)}+\sum_{x,y} p(x,y)log p(x, y)\\\\&=\sum_{x,y}log \frac {p(x,y)}{p(x)p(y)}
\end{aligned}
$$
互信息(mutual information),随机变量X,Y之间的互信息定义为:$$
I(X;Y)=\sum_{x,y}p(x,y)log \frac {p(x,y)}{p(x)p(y)}
$$
互信息的性质

  • $I(X;Y)>=0$,等号成立当且仅当X和Y相互独立。
  • $I(X;Y)=I(Y;X)$说明互信息是对称的。

互信息相对于相对熵的区别就是,互信息满足对称性;
互信息的公式给出了两个随机变量之间的互信息。在计算语言学中,更为常用的是两个具体事件之间的互信息,一般称之为点式互信息
点式互信息(pointwise mutual information),事件x,y之间的互信息定义为:$$
I(x,y) = log \frac {p(x,y)}{p(x)p(y)}
$$
一般而言,点间互信息为两个事件之间的相关程度提供一种度量,即:

  • 当$I(x,y)>>0$时,x和y是高度相关的;
  • 当$I(x,y)=0$时,x和y是高度相互独立;
  • 当$I(x,y)<<0$时,x和y呈互补分布;

交叉熵(cross entropy)

交叉熵的概念是用来衡量估计模型与真实概率分布之间差异情况的,其定义为,设随机变量X的分布密度p(x),在很多情况下p(x)是未知的,人们通常使用通过统计的手段得到X的近似分布q(x),则随机变量X的交叉熵定义为:
$$
H(p,q) = -\sum_{x \in X} p(x)log q(x)
$$
其中,p是真实样本的分布,q为预测样本分布。在信息论中,其计算数值表示:如果用错误的编码方式q去编码真实分布p的事件,需要多少bit数,是一种非常有用的衡量概率分布相似的数学工具。

相对熵(relative entropy)

相对熵,设p(x),q(x)是随机变量X的两个不同的分布密度,则它们的相对熵定义为:$$
D(p||q)=\sum_{x \in X}p(x) log \frac {p(x)}{q(x)}=H(p,q)-H(p)
$$
相对熵较交叉熵有更多的优异性质,主要为:

  • 当p分布和q分布相等的时候,KL散度值为0;
  • 可以证明是非负的;
  • KL散度是非对称的,通过公式可以看出,KL散度是衡量两个分布的不相似性,不相似性越大,则值越大,当完全相同时,取值为0;

对比交叉熵和相对熵,可以发现仅仅差一个H(p),如果从最优化的角度来看,p是真实分布,是固定值,最小化KL散度的情况下,H(p)可以省略,此时交叉熵等价于KL散度。

在机器学习中,何时需要使用相对熵,何时使用交叉熵?
在最优化问题中,最小化相对熵等价于最小化交叉熵;相对熵和交叉熵的定义其实可以从最大似然估计得到。最大化似然函数,等价于最小化负对数似然,等价于最小化交叉熵,等价于最小化KL散度。交叉熵大量应用在Sigmoid函数和SoftMax函数中,而相对熵大量应用在生成模型中,例如,GAN、EM、贝叶斯学习和变分推导中。从这可以看出:如果想通过算法对样本数据进行概率分布建模,那么通常都是使用相对熵,因为需要明确知道生成的分布和真实分布的差距,最好的KL散度值应该是0;而在判别模型中,仅仅只需要评估损失函数的下降值即可,交叉熵可以满足要求,其计算量比KL散度小。在《数学之美》一书中是这样描述它们的区别:交叉熵,其用来衡量在给定的真实分布下,使用非真实分布所指定的策略消除新系统的不确定性所需要付出的努力的大小;相对熵,其用来衡量两个取值为正的函数或概率分布之间的差异。

困惑度(perplexity)

对于语言$L=(x_i)~p(x)$,与其模型q的交叉熵定义为:$$
H(L,p)=-\lim_{x \to \infty} \frac {1}{n} \sum_{x_1^n}p(x_1^n)log q(x_1^n)
$$
其中,$x_1^n=x_1,…,x_n$为语言L的语句,$p(x_1^n)$为L中语句的概率,$q(x_1^n)$为模型q对$x_1^n$的概率估计。
我们可以假设这种语言是“理想”的,即n趋于无穷大时,其全部“单词”的概率和为1。就是说,根据信息论的定理:假定语言L是稳态(stationary) ergodic随机过程, L与其模型q的交叉熵计算公式就变为:
$$H(L,q)=-\lim_{x \to \infty} \frac {1}{n} log q(x_1^n)$$
由此,我们可以根据模型q和一个含义大量数据的L的样本来计算交叉熵。在设计模型q时,我们的目的是使交叉熵最小,从而使模型最接近真实的概率分布p(x)。

在设计语言模型时,通常用困惑度来代替交叉熵衡量语言模型的好坏。给定语言L的样本$l_1^n=l_1,,,,l_n$,L的困惑度为$PP_q$定义为:
$$
PP_q = 2^{H(L,q)} \approx 2^{-\frac {1}{n}log q(l_1^n)} = [q(l_1^n)]^{- \frac {1}{n}}
$$
于是语言模型设计的任务就是寻找困惑度最小的模型,使其最接近真实语言的情况。从perplexity的计算式可以看出来,它是对于样本句子出现的概率,在句子长度上Normalize一下的结果。它越小,说明出现概率越大,所得模型就越好。

参考

坚持原创技术分享,您的支持将鼓励我继续创作!