交叉熵 (cross entropy) ,KL 散度的值,到底有什么含义?
交叉熵一看就是个信息论的概念,为什么变成了大模型最常用的损失函数了呢?交叉熵的值到底有什么含义呢?与 KL 散度又有什么关系呢?
从信息熵说起
1948年,克劳德·香农发表了一篇论文《A Mathematical Theory of Communication》, 结果一年以后,这篇论文被改成了《The Mathematical Theory of Communication》。
从 A 变成了 The,一门新的学科:信息论,诞生了。当然后来有些八卦,说信息论里面的很多概念都是香农从诺伯特·维纳那里学来的。因为维纳和香农在交流的过程中,感觉并没有碰撞出火花,所以认为香农“总是来挖他的脑浆子”。但是香农把信息论的大致框架在一篇论文里就能完整呈现出来,也是很很了不起。况且香农专注于通信领域,和维纳的研究方向还是略有差异。总之呢,信息论之父扣到香农头上没有扣到维纳头上,可能也有些不开心,虽然香农在论文里明确提到"荣誉同样属于维纳教授"。
信息论是一门很重要的学科,解决了一些很重要的问题:比如信息应该如何度量?信息如果需要通信,那么最优的编码方式是什么?
信息如何度量?
如果某件事情大概率发生,当这件事情发生的时候,携带的信息量是很少的。举个例子:国足输球的概率是95%。当国足又输了的时候,并没有什么信息量。但是如果国足赢球了,那这个信息量大的惊人。为了度量某个事件的信息,可以定义这么一个信息函数I(P)I(P)I(P) , 其中 ppp 为事件的发生概率。这个信息函数有如下的性质:
- 这个函数应该和概率ppp成反比, ppp越大则 I(p)I(p)I(p) 越小。
- 当 p = 1 时,I(p)I(p)I(p) 为0. 总是发生的事情没有任何信息量。
- 两个独立的事件同时发生产生的信息,应该等于各自信息的和。I(p1)+I(p2)=I(p1⋅p2)I(p_1)+I(p_2)=I(p_1 \cdot p_2)I(p1)+I(p2)=I(p1⋅p2)
最后这个信息函数香农给出的答案是I(p)=−logpI(p)=-\log pI(p)=−logp 。有没有其他表示呢?可能有,但是当时香农给出的解就是这个,后来大家发现这个似乎就是唯一的解。
I(p)I(p)I(p)可以用来表示一个概率为 p 的事件发生后的产生信息或者不确定性。那么假设某个随机事件的概率分布为 p, 那么其信息(或者不确定性)的期望值是多少呢?根据求期望的公式,应该为
H(p)=∑pi(−logpi)=−∑pilogpiH(p)=\sum p_i (-\log p_i) = -\sum p_i \log p_iH(p)=∑pi(−logpi)=−∑pilogpi
这就是信息熵。衡量的是某个随机事件的信息的期望值。
最优前缀编码
任何理论的产生都是为了解决某一个具体的问题。信息熵的提出在香农的业务场景中,被用来解决通信的最优前缀编码问题,具体点就是数据应该如何编码才能使编码后的长度最短。因为相同的信息,越短的编码就意味着传输效率越高。
比如胡适的日记,简化一下可以写成这样:“打牌,打牌,上课,打牌,读书,打牌,上课,考试”
最简单的编码方法就是按二进制编码,比如
- 00 表示 打牌
- 01 表示 上课
- 10 表示 读书
- 11 表示 考试
这样这段文本可以编码为 0000010010000111, 长度为16, 每个事件的平均编码长度为2.
有更优的编码么,之前读书时候学过的 Huffman 编码这不就用上了。用 Huffman 编码如下:
- 0 表示 打牌
- 10 表示 上课
- 110 表示 读书
- 111 表示 考试
利用这个编码,上面文本可以表示为:00100110010111, 长度为14, 每个事件的平均编码长度为 1.75那么问题来了,如果知道一个事件的概率分布,其最优编码是多少?
通过计算(过程见最后),信息熵也就是每个字符最优编码的期望长度。 可以知道,Huffman 编码就是最优的前缀编码。这里举的例子有一定的特殊性,表示概率的分子都是2的倍数,所以能达到最优,现实生活中很难达到理论上最优的编码。
这里又有个小八卦:当年香农的信息论发表后,也发明了一个编码方式:香农-法诺编码,因为这个编码同时被法诺教授独立发明。但是很遗憾,这个编码并没有达到理论上的最优,于是法诺上课的时候出了一道题:如何达到最优编码的理论值。谁解出来了这学期不用参加期末考试。
结果哈夫曼算了几周后,还真被他折腾出来了哈夫曼编码,达到了理论上的最优值。后来哈夫曼回忆说,我要是知道香农和法诺教授都没解出来,我根本就不会尝试。
信息熵就是某个随机事件的信息的期望值,同时也是最优编码的期望长度。
计算过程

2926

被折叠的 条评论
为什么被折叠?



