熵、交叉熵及似然函数的关系

熵、交叉熵及似然函数的关系

1. 熵

1.1 信息量

  信息量:最初的定义是信号取值数量m的对数为信息量\(I\),即 \(I=log_2m\)。这是与比特数相关的,比如一个信号只有两个取值,那么用1个bit便能将其表示。后来著名的香农指出,得到的信号取值结果是随机的,因此其信息量应该也是关于概率的函数,于是得到随机变量\(X\)的信息量
\[ I(X=x_i) = -logP(x_i) \]
  在机器学习中,熵是描述一个变量发生的不确定性的度量,不确定性越大,这里面包含的信息量就越大。比如有的学生常年不及格,让你预测他这次考试是否能及格,你肯定会说十有八九不会及格,也就是能否及格的确定性很大了,这时我们不会太关心其结果,因为其发生的结果太容易预料了,所以其信息量比较小。若该学生有时候能及格,有时候不能及格,这就有点捉摸不定了,我们很难猜中他能不能及格,这时他能否及格的信息量比较大。

1.3 熵

  既然熵是反应变量(信号)总体不确定性的大小(信息量大小)的度量,那么如何确定熵的大小也就很明显了——对所有可能的取值计算其平均信息量,也就是求信息量关于概率P的期望。这样就表达了该信号(随机变量)的不确定性大小。
\[ H(X)=E_P[-logP(x)]=-\sum_xp(x_i)logp(x_i) \]
  当X服从均匀分布时,X的熵的结果与最原始的信息量的定义相同,n为信号的取值数量
\[ H(x) = -\sum_n \frac 1 n log \frac 1 n= logn \]
实际上只有当所有事件的概率相等时,熵取最大值\(logn\)
  于是得出我个人的猜测:信息量是描述变量取某个值时的信息量,熵则描述其所有可能取值的平均信息量,也就是该信号到底取哪个值的不确定性。

2. 最大熵中的极大似然函数

  按理说熵后面应该接着说交叉熵的,但是我发现极大似然函数的对数形式与熵的定义十分相近,于是先介绍它们的来路与区别。这种形式的似然函数在最大熵模型中用到过。

  首先我先给出在最大熵模型中用到的似然函数
\[ L_{\widetilde P} = \prod_{x,y} P(y|x)^{\widetilde P(x,y)} \]
李航书中直接给出该定义,这个定义应该是由如下似然函数推导而来的
\[ L(x_1,\cdots,x_n,\theta)=\prod_x P(x)^{\widehat P(x)} \]

2.1 指数型似然函数推导

  我不知道这种形式的似然函数叫什么名字,所以这个名字是我自己取的。指数型似然函数与我们常用的由n个样本带入表示的模型概率之积,也就是它们的联合概率作为似然函数不同,在常用的似然函数L中
\[ L(x,\theta)=\prod _{i=1}^n P(x_i) \]
它的概率乘积依据于样本数,最大熵则依据变量x的取值数量,然而这两种方式本质都是一样的。最大熵中的似然函数相当于把n个样本中取值相同的整理到一起,用指数数量表示。

  假设样本集大小为\(n\)\(X\)的取值数量为\(m\),取值集合为{\(v_1,\cdots,v_m\)}。样本集中观测值\(v_i\)出现的次数由\(C(X=v_i)\)表示,于是似然函数可以表示为
\[ L(x,\theta) = \prod _{i=1}^m P(x_i)^{C(X=x_i)} \]
再对该似然函数开\(n\)次方
\[ L(x,\theta)^{\frac 1 n} = \prod _{i=1} ^m P(x_i) ^{\frac {C(X=x_i)} {n}} \]
其中,
\[ \frac {C(X=x_i)} {n} = \widetilde P(x_i) \]
并且,似然函数开\(n\)次方并不影响其最大化,于是可以直接将其定义为新的似然函数
\[ L(x,\theta) = \prod _{i=1} ^m P(x_i) ^{\frac {C(X=x_i)} {n}} \]
带入\(\widetilde P(x_i)\)简化得到
\[ L(x,\theta) = \prod _x P(x) ^{\widetilde P(x)} \]
那么对数似然函数便是
\[ L(x,\theta) = \widetilde P(x) \sum_x log P(x) \]

2.2 最大熵中的似然函数推导

  根据上文得出的似然函数的另一种表示后,由它便可推导出最大熵模型中用到的对数似然函数
\[ \begin{aligned} L_{\widetilde P} =& log\prod_{x,y} P(x,y) ^{\widetilde P(x,y)}\\ =&\sum_{x,y} \widetilde P(x,y)log[\widetilde P(x) P(y|x)]\\ =&\sum_{x,y} \widetilde P(x,y)logP(y|x) + \sum_{x,y} \widetilde P(x,y) log \widetilde P(x)\\ =& \sum_{x,y} \widetilde P(x,y) logP(y|x) + constant\\ \Rightarrow L_{\widetilde P} =& \sum_{x,y} \widetilde P(x,y) logP(y|x) \end{aligned} \]
推导这个只是顺便,目的还是比较指数型对数似然函数\(L=\widetilde P(x)\sum_xlog P(x)\)与熵的定义的关系。

  再回顾熵的定义
\[ H(X) = -\sum_xP(x) log P(x) \]
它们的数学形式长得确实挺像的,不过仔细看还是有很大差别,似然函数中具有经验分布和需要估计的模型的分布,所以似然函数实际上是判断估计模型与经验分布的相似度,最大似然估计就是让估计模型尽可能的去接近我们得到样本产生的经验分布。而熵的定义中只有概率模型本身,它表示的是该模型本身的每个取值之间的不确定性大小,或者说是该模型本身的混乱程度。而最大熵原理的思想是在面对一个未知内容较多(约束条件不足)的估计时,我们会尽量将其看做等概率的均匀分布。

  由最大熵原理推导出的最大熵模型的思想就是在满足假设条件的模型中,选择模型内部最混乱,也就是信息量最大的那个模型!

3. 交叉熵与极大似然

  上述解释了熵与极大似然的一个重要区别在于熵是描述模型本身混乱度(信息量)的一个度量,而极大似然是描述估计模型和经验分布的相似度的一个度量。那么熵到底与指数型似然函数有什么关系呢?

3.1 联系

  熵描述模型内部的信息量,而交叉熵则描述两个模型之间的关系,Wiki对熵的定义是:在信息论中,基于相同事件测度的两个概率分布\(p\)\(q\)的交叉熵是指,当基于一个“非自然”(相对于“真实”分布\(p\)而言)的概率分布 \(q\)进行编码时,在事件集合中唯一标识一个事件所需要的平均比特数(bit)。基于概率的交叉熵定义为
\[ H(p,q) = E_p[-log q]= H(p) + D_{KL}(p||q) \]
其中,\(H(p)\)是熵,\(D_{KL}(p||q)\)是p到q的KL散度,对于离散的p,q
\[ H(p,q) = -\sum_x p(x) log q(x) \]
  这个定义与最开始的信息量和熵的定义是同源的,关于比特数表示可以参照信息量的定义。现在讨论关于p和q的关系,Wiki中说\(p\)是一个“真实”分布,在此基础上对\(q\)进行二进制编码所需要的平均比特数。如果对这个说法不能很好理解的话,可以将其转化为下面这个我们经常见到的形式
\[ -\sum_x \widetilde p(x) log p(x) \]
其中,\(\widetilde p(x)\)是经验分布,看做我们从样本中得到的“真实”分布,而\(p(x)\)是我们需要编码(求解)的模型分布。

  再来看看上面提到的指数型对数似然函数
\[ L_\widetilde p = \sum_x \widetilde p(x)log p(x) \]
它们正好是相反数,因此极大化似然函数等价于最小化交叉熵。这个结论在大多数时候成立,但由于刚学不久,很多知识还不知道,所以目前也不能给出明确说法及证明。网上有说满足广义伯努利分布的便等价的,也有说都等价的,暂且先从直观上理解吧。

  根据定义,交叉熵的含义也比较明显了,它也是表示两个概率模型之间的相似度的。这也与极大似然函数的含义相同。若两个概率模型完全相同呢?从形式上看,这时候交叉熵退化为熵。并且此时交叉熵取最小值,证明如下:

  假设\(p(x)\)分布已知,其值为常数,且\(q(x)\)满足约束条件
\[ \sum_x q(x) = 1 \]
构造拉格朗日乘子函数
\[ L(x,\lambda) = -\sum_{x} p(x) log q(x) +\lambda (\sum_x p(x) - 1)) \]
\(\lambda\)和所有的\(x\)求偏导得
\[ -\frac {p(x)} {q(x)} +\lambda = 0\\ \sum_x q(x) = 1\\ \sum_x p(x) = 1 \]
注意,第一个式子实际上有m个等式,m是变量x的取值个数,解得
\[ \lambda = 1\\ p(x) = q(x) \]

3.2 交叉熵损失函数

  至此,再联系一下交叉熵损失函数。交叉熵损失函数经常用于分类问题中,特别是在神经网络做分类问题时,也经常使用交叉熵作为损失函数,此外,由于交叉熵涉及到计算每个类别的概率,所以交叉熵几乎每次都和softmax函数一起出现。

  交叉熵损失函数的一般形式是
\[ CrossEntropy=−\sum_{i=1} ^n y_i^T \cdot log(h(x_i)) \]
其中,\(y和x\)是m维列向量,m是\(y\)的取值数量。当\(y\)取值为{0,1}时,就是我们常见的0-1分布的交叉熵损失函数
\[ CrossEntropy=-\sum_{i=1}^n (y_i\cdot log (h(x_i)) +(1-y_i) \cdot log (1-(h(x_i))) \]
这里\(y和x\)是数值。

  交叉熵损失函数与交叉熵的区别在于将原来的“真实”概率分布替换为“真实”标签(label)\(y_i\),这与前面推导指数型似然函数的原理基本是一致的。不再赘述。将公式中\(h(x)\)替换为logistic中的分布函数则得到logistic中的损失函数。

猜你喜欢

转载自www.cnblogs.com/breezezz/p/11277131.html