交叉熵、信息与散度:我们每天都在猜,只是有人猜得更贵

📄 文章 🌐 公开
📋 列表 ✏️ 编辑 🎨 画布版 📋 复制MD 🌐 复制HTML ☆ 收藏

交叉熵、信息与散度:我们每天都在猜,只是有人猜得更贵

我们每天都在猜。

猜明天会不会下雨,猜一个人会不会答应,猜股票会上涨还是下跌,猜消费者喜欢什么,甚至猜下一个字会是什么。

很多时候,我们并没有确定答案。

我们只有一个判断:

“我觉得它发生的概率是多少。”

而信息论研究的一个核心问题,就是:

当我们面对一个不确定的世界时,应该怎样衡量“猜”的成本?

这就引出了信息量、熵、交叉熵和 KL 散度。

它们看起来是四个数学概念,其实可以用一句非常简单的话串起来:

世界有不确定性,我们有自己的判断;如果判断错了,就会产生额外的代价。


信息量:越意外的事情,信息越多

假设一枚硬币正面朝上的概率是 50%。

如果有人告诉你:

“硬币是正面。”

你不会特别惊讶。

因为这件事情并不罕见。

但如果有人告诉你:

“连续抛 100 次,100 次全部是正面。”

你就会非常惊讶。

为什么?

因为发生概率越低,事情越“意外”。

信息论把这种“意外程度”定义为:

$$ I(x)=-\log p(x) $$

这里的 (p(x)) 是事件发生的概率。

概率越小:

$$ -\log p(x) $$

就越大。

所以:

  • 必然发生的事情 → 信息量接近 0
  • 50% 概率的事情 → 信息量较小
  • 10% 概率的事情 → 信息量更大
  • 0.001% 概率的事情 → 信息量非常大

这里的“信息”不是“有多少知识”,而是:

当一件事情发生时,它给我们带来了多少意外性。


熵:一个世界到底有多难猜?

如果只讨论一个事件,可以计算它的信息量。

但现实世界不是只发生一个事件。

例如天气可能是:

天气 概率
70%
20%
10%

我们当然可以分别计算晴、雨、雪的信息量。

但我们更关心一个问题:

如果每天都要面对这个天气系统,平均来说,每天要面对多少不确定性?

这就是熵。

$$ H(P)=-\sum_i p_i\log p_i $$

熵可以理解成:

一个概率分布本身平均有多难猜。

例如:

公平硬币:

正面 50%,反面 50%。

两种结果一样常见,因此很难提前猜。

熵比较高。

如果硬币变成:

正面 99%,反面 1%。

那就非常容易猜。

熵就低很多。

所以:

熵高,不代表世界更糟;只是代表这个世界更加不可预测。

这点非常重要。


现实世界和我们的判断,是两回事

现在进入真正有意思的地方。

假设真实天气分布是:

天气 真实概率 P
70%
20%
10%

这是现实。

但是你不知道真实分布。

你心里认为:

天气 你的判断 Q
50%
30%
20%

这就是你的认知模型

注意:

P 是世界本身,Q 是你认为世界是什么样。

现实和认知,从来不是同一个东西。


交叉熵:拿着自己的判断面对现实

如果你按照自己的判断 Q 来进行预测、编码或者决策,但是现实却按照 P 发生,那么你最终付出的平均代价是多少?

这就是交叉熵:

$$ H(P,Q)=-\sum_i p_i\log q_i $$

为什么前面是 (p_i),里面却是 (q_i)?

因为:

事情到底发生多少次,由现实决定。

而:

你为这些事情准备了多少“预测成本”,由你的判断决定。

还是拿天气来说。

你觉得晴天只有 50%。

但实际上晴天发生了 70%。

于是你对最常发生的事件准备得不够充分。

反过来,你认为下雪有 20%,实际上只有 10%。

你又为一个不常发生的事件准备了过多资源。

最终:

你不是因为世界本身的不确定性多花钱,而是因为自己的判断不够准确,又多花了一部分钱。


KL 散度:因为判断错误,多付出的代价

这里出现了一个非常漂亮的公式:

$$ H(P,Q)=H(P)+D_{KL}(P\parallel Q) $$

也就是说:

交叉熵 = 现实本身的最低不确定性成本 + 认知错误造成的额外成本。

其中:

$$ D_{KL}(P\parallel Q) = \sum_i p_i\log\frac{p_i}{q_i} $$

就是 KL 散度。

它可以直观理解成:

你的认知模型 Q 和现实 P 不一致,因此产生的额外信息代价。

对于刚才的例子:

$$ H(P)\approx1.157 $$

而:

$$ H(P,Q)\approx1.495 $$

所以:

$$ D_{KL}(P\parallel Q)\approx0.338 $$

也就是说:

现实本身的“不确定性”不是你的错,但你对现实的错误判断,又额外产生了一部分成本。


一个非常重要的区别:不确定性不是认知错误

这是理解整个理论最重要的一步。

假设天气明天有:

晴 50%,雨 50%。

即使你拥有全世界最强大的计算能力,你仍然不能在今天确定明天到底下不下雨。

这是现实本身的不确定性

它对应的是熵。

但如果真实情况是:

晴 90%,雨 10%。

你却坚信:

晴 10%,雨 90%。

那么问题就不再只是现实的不确定性。

而是:

你的认知模型错了。

这就是 KL 散度所描述的部分。

因此可以把它简单地理解成:

熵:世界有多难猜。

KL 散度:我因为猜错而多付出了多少代价。

这两个问题不能混在一起。


为什么 KL 散度永远不会小于零?

有一个非常漂亮的性质:

$$ D_{KL}(P\parallel Q)\geq0 $$

为什么?

因为如果你知道真实分布 P,那么按照 P 来描述现实,就是最有效的。

你换成另一个错误的分布 Q,不可能凭空获得额外的信息效率。

所以:

认知模型正确,是基准。

认知模型错误,只会增加额外成本。

当:

$$ P=Q $$

时:

$$ D_{KL}=0 $$

也就是:

你的判断和现实完全一致,没有额外的认知误差成本。


但 KL 散度不是普通的“距离”

这里还需要特别注意。

我们平时说“距离”,往往意味着:

A 到 B 的距离 = B 到 A 的距离。

但是 KL 散度不是这样:

$$ D_{KL}(P\parallel Q) \neq D_{KL}(Q\parallel P) $$

所以它更适合被理解为:

“用 Q 去描述 P 时产生的额外代价。”

而不是简单的“P 和 Q 相差多少”。

这也是为什么它叫“散度”,而不是普通的几何距离。


机器学习为什么喜欢交叉熵?

现在再看人工智能,就容易理解很多了。

假设模型预测下一个词:

“今天天气很……”

模型可能认为:

  • 好:40%
  • 热:30%
  • 冷:10%
  • 糟糕:5%
  • ……

但训练数据告诉模型:

实际答案是“好”。

模型就会受到一个反馈:

你给“好”的概率是多少?

如果模型认为“好”的概率非常高,损失就小。

如果模型认为“好”的概率只有 0.001%,损失就非常大。

对于一个确定标签的情况,交叉熵实际上会变成:

$$ -\log q(y) $$

也就是说:

模型越相信正确答案,损失越小;越不相信正确答案,损失越大。

于是训练模型的过程,可以粗略理解成:

不断拿现实发生的结果,纠正模型自己的概率判断。


这其实就是一种“认知纠错”

现在可以换一个角度看机器学习。

模型一开始并不知道世界是什么样。

它有一个内部模型:

$$ Q $$

然后不断接触现实数据:

$$ P $$

如果预测错了,就产生损失。

训练的过程,就是不断修改 Q:

$$ Q_1\rightarrow Q_2\rightarrow Q_3\rightarrow\cdots $$

让它越来越接近现实。

因此:

机器学习的一个核心过程,就是用现实不断纠正自己的概率模型。

这也是交叉熵如此重要的原因。


人类其实也一直在做同样的事情

你第一次下雨前看到乌云。

你可能认为:

乌云出现以后,80% 会下雨。

结果后来发现:

实际只有50%。

你的模型就应该调整。

如果你愿意不断根据现实修正自己的判断,那么你的预测会越来越准确。

但是如果你发现:

“怎么今天没下雨?”

然后不是修改自己的判断,而是说:

“一定是今天特殊。”

下一次又失败,再说:

“这次也是特殊情况。”

那么你实际上是在保护自己的 Q,而不是纠正 Q。

这就是认知系统最危险的一种状态:

现实不断提供错误反馈,但认知模型拒绝修改。


所以,真正聪明的系统,不是没有错误

现实世界太复杂。

没有任何人能够永远预测正确。

真正重要的是:

错误出现以后,系统能不能发现错误,并且修改自己的模型。

从这个角度看:

告诉我们:

世界本身有多少不可预测性。

交叉熵告诉我们:

我拿自己的模型面对现实,要付出多少代价。

KL 散度告诉我们:

其中有多少是因为我的模型错了而产生的额外代价。

于是可以用一句话总结:

世界的不确定性不是错误;把错误的判断当成确定的真相,才会产生额外的代价。

这也解释了为什么信息论不仅是通信技术的基础,也成为机器学习、人工智能的重要数学基础。

而它还可以继续往前走一步:

如果一个人的错误判断只影响自己,代价可能只是自己承担;如果一个机构的错误判断影响几百万人,那么“如何发现和纠正认知错误”,就不再只是数学问题,而变成了制度问题。

这正是下一篇文章要讨论的问题。

💬 留言 ⋮⋮

加载中…
💡 不登录也可留言(IP 限制:每文/每天各 1/10 条)

加载中…

纸张白
护眼绿
羊皮卷
夜间黑
100%