熵,交叉熵

shiiiilong / 2023-04-28 / 原文

熵(Entropy)

定义

可以从两个角度理解熵:

  • 最小平均编码长度
  • 信息量

最小平均编码长度

信息论中熵的概念首次被香农提出,目的是寻找一种高效/无损地编码信息的方法:以编码后数据的平均长度来衡量高效性,平均长度越小越高效;同时还需满足“无损”的条件,即编码后不能有原始信息的丢失。这样,香农提出了熵的定义:无损编码事件信息的最小平均编码长度

\[以离散概率分布举例\\ i的最小编码长度=-log(P(i))\\ Entropy=平均最小编码长度=-\sum_i{P(i)log(P(i))} \]

当然这里 \(i\) 的最小编码长度的计算方式是理论最小,实际不可能出现小数

信息量

一条信息的信息量大小和它的不确定性有直接的关系。我们需要搞清楚一件非常非常不确定的事,或者是我们一无所知的事,就需要了解大量的信息。相反,如果我们对某件事已经有了较多的了解,我们就不需要太多的信息就能把它搞清楚。

比如,有人说广东下雪了。对于这句话,我们是十分不确定的。因为广东几十年来下雪的次数寥寥无几。为了搞清楚,我们就要去看天气预报,新闻,询问在广东的朋友,而这就需要大量的信息,信息熵很高。

比如,中国男足进军2022年卡塔尔世界杯决赛圈。对于这句话,因为确定性很高,几乎不需要引入信息,信息熵很低。

考虑一个离散的随机变量 \(x\),由上面两个例子可知,信息的量度应该依赖于概率分布 \(p(x)\) ,因此我们想要寻找一个函数 \(I(x)\) ,它是概率 \(p(x)\) 的单调函数,表达了信息的内容。怎么寻找呢?如果我们有两个不相关的事件 \(x\)\(y\) ,那么观察两个事件同时发生时获得的信息量应该等于观察到事件各自发生时获得的信息之和,即:\(I(x,y)=I(x)+I(y)\)

因此,我们取 \(I(x)=−log(p(x))\)

  • 负号是用来保证信息量是正数或者零
  • 而 log函数基的选择是任意的

现在假设一个发送者想传送一个随机变量的值给接收者。那么在这个过程中,他们传输的平均信息量为:

\[H(x)=-\sum^n_i{P(x_i)log(P(x_i))} \]

\(H(X)\) 就被称为随机变量 \(x\),它是表示随机变量不确定的度量,是对所有可能发生的事件产生的信息量的期望。

相对熵(KL散度)

相对熵可以用来衡量两个概率分布之间的差异

\(p(x)、q(x)\) 是 离散随机变量 \(X\) 中取值的两个概率分布,则 \(p\)\(q\) 的相对熵是:

\[D_{KL}(p||q)=\sum_x{p(x)log(\frac{p(x)}{q(x)})} \]

性质:

  • 如果 \(p(x)\)\(q(x)\) 两个分布相同,那么相对熵等于0
  • \(D_{KL}(p||q)≠D_{KL}(q||p)\),相对熵具有不对称性。

交叉熵

现在有关于样本集的两个概率分布 \(p(x)\)\(q(x)\) ,其中 \(p(x)\) 为真实分布, \(q(x)\) 非真实分布。

如果用真实分布 \(p(x)\) 来衡量识别一个样本所需要编码长度的期望(平均编码长度)为:

\[H(p)=\sum_xp(x)log(\frac{1}{p(x)}) \]

如果使用非真实分布 \(q(x)\) 来表示来自真实分布 \(p(x)\) 的平均编码长度,则是:

\[H(p,q)=\sum_xp(x)log(\frac{1}{q(x)}) \]

\(H(p,q)\) 即交叉熵

\[D_{KL}(p||q)=\sum_x{p(x)log(\frac{p(x)}{q(x)})}\\=\sum_xp(x)log(\frac{1}{q(x)})-\sum_xp(x)log(\frac{1}{p(x)})\\ =H(p,q)-H(p) \]

在机器学习中,我们希望训练数据上模型学到的分布 \(P(model)\) 和真实数据的分布 \(P(real)\) 越接近越好,所以我们可以使其相对熵最小。又因为训练数据的分布是固定的( \(H(p)\) 为常量),最小化相对熵 \(DKL(p||q)\) 等价于最小化交叉熵 \(H(p,q)\) 也等价于最大化似然估计

  • 希望学到的模型的分布和真实分布一致,\(P(model)≃P(real)\)
  • 但是真实分布不可知,假设训练数据是从真实数据中独立同分布采样的\(P(train)≃P(real)\)
  • 因此,我们希望学到的模型分布至少和训练数据的分布一致,\(P(train)≃P(model)\)

得证,交叉熵可以用来计算学习模型分布与训练分布之间的差异