概率论中的熵
我们直接给出定义:
信息量(Information Content)
信息量是指一个随机事件提供的信息量大小。一个事件发生的概率越小,它提供的信息量就越大。信息量的定义是概率对数的相反数,即:
I(X)=−logb(p)
其中 p 是该事件发生的概率
熵(Entropy)
熵是衡量随机变量不确定性的一个量度。在信息论中,熵用于量化信息的不确定性或信息的混乱程度(信息量的期望)。一个系统的熵越高,表示系统的不确定性越大:
对于离散随机变量 X 取值为 xi 且对应的概率为 $ P(X=x_i)=p_i$,其熵 H(X) 定义为:
H(X)=−i∑pilogb(pi)
对于连续随机变量 X 服从于概率分布 f(x),其熵 H(X) 定义为:
H(X)=−∫−∞∞f(x)logb(f(x))dx
其中,b 是对数的底数,通常取2(此时单位是比特),也可以取自然对数的底数 e(此时单位是纳特)
同理概率论的知识可以定义条件熵和联合熵:
H(Y∣X)=x∑p(x)H(Y∣X=x)H(X,Y)−=x,y∑p(x,y)log p(x,y)
为什么这样定义熵?
Motivation:
- 度量不确定性:熵提供了一种度量信息源不确定性的方法。在信息论中,熵越高,表示信息源产生的信息越不确定,即我们从信息源获得的信息越具有价值,因为它减少了我们对结果的不确定性
- 符合逻辑预期:即不太可能发生的事件应该具有更高的信息量。如果一个事件几乎肯定会发生(概率接近1),那么当它实际发生时,它提供的信息量很少或没有。相反,如果一个事件的发生概率很低,那么当它发生时,它提供的信息量很大(且要求概率为0时,熵不应该无限大)
- 概率的乘积规则:熵的定义需要与概率论的基本原则相一致,特别是与联合概率和条件概率的规则相容。熵的定义形式确保了当我们考虑多个随机变量的联合熵或条件熵时,这些概率规则仍然适用
- 可加性:我们要求从多个独立来源获得的信息量应该是它们各自信息量的总和,因此熵应该具有可加性的性质
根据以上规则,再去理解这个式子可能会更加容易(但实际上香农自己都说不知道熵到底是什么,我的理解就是用这个数学表达式去大概建模量化信息,这个建模不一定是最好的,但是这个形式相对简单所以用得最多)
熵(Entropy)在信息论中的含义直接关联到了数据编码的效率。当我们要编码一个具有不同符号概率分布的信息源时,熵提供了一个理论上的最优编码长度的下限。也就是说,对于一个给定的概率分布,我们可以设计出一种编码方式,使得平均而言,每个符号编码的长度趋近于这个分布的熵值。这种编码方式被称为熵编码
交叉熵(Cross-Entropy)
交叉熵是衡量两个概率分布相似度的一个指标。在机器学习中,交叉熵常用于损失函数,衡量模型预测的概率分布与真实数据的概率分布之间的差异。交叉熵的数学定义如下:
对于两个概率分布 P 和 Q
- 若 P,Q 的概率分布均为离散的,交叉熵 H(P,Q) 定义为:
H(P,Q)=−i∑P(i)logb(Q(i))
- 若 P,Q 的概率分布均为连续的,且服从于分布 f,g,交叉熵 H(P,Q) 定义为:
H(P,Q)=−∫−∞∞f(x)logb(g(x))dx
交叉熵可以视为在真实分布 P 下,使用概率分布 Q 来编码事件的平均编码长度:
如果我们有一个事件的概率分布 P(x),它是真实的或理想的情况,那么根据熵(Entropy)的概念,我们知道使用最优的编码方式(即按照每个事件发生的概率为其分配码长),能够达到最小的平均编码长度。而对于任意另一个概率分布 Q(x),如果我们尝试用它来编码同样的事件,那么由于 Q(x) 可能并不精确匹配真实的概率分布 P(x),因此会使得编码效率下降,导致平均编码长度增加(同样的,我的理解还是)
Kullback-Leibler (KL) 散度
KL散度是衡量两个概率分布差异的另一种方式,它是交叉熵和熵的差值:
KL(P∣∣Q)=i∑P(xi)logb(P(xi)Q(xi))=Ep(x) log(q(x)p(x))
KL(P∣∣Q)=∫−∞∞f(x)logb(g(x)f(x))dx=Ep(x) log(q(x)p(x))
一些重要等式和证明
联合熵和熵,条件熵(理解下面式子,独立的时候两个变量的熵之和为它们联合分布的熵):
H(X,Y)=−x,y∑p(x,y)log p(x,y)=−x,y∑p(x,y)log(p(y∣x)p(x))=−x,y∑p(x,y)log(p(y∣x))−x,y∑p(x,y)log p(x)=H(Y∣X)−x∑y∑p(x,y)log p(x)=H(Y∣X)−x∑log p(x)y∑p(x,y)=H(Y∣X)−x∑log p(x)×p(x)=H(Y∣X)+H(X)
KL散度大于0:
KL(X∣∣Y)=∫f(x)log(g(x)f(x))dx=−∫f(x)log(f(x)g(x))dx≥−∫f(x)(f(x)g(x)−1)dx=∫(g(x)−f(x))dx=0
KL散度和交叉熵,熵的关系(用编码理解KL散度衡量两个概率分布的差异的含义):
KL(X∣∣Y)=H(X,Y)−H(X)=−i∑pilog(qi)+i∑pilog(pi)=i∑pilog(qipi)
常用优化策略(优化KL散度相当于优化交叉熵 ):
∇θD(p∣∣qθ)=∇θH(p,qθ)−∇θH(P)=∇θH(p.qθ)
另外一个理解KL散度的方式:
- 有两个概率分布 p,q(均为伯努利分布,视为投硬币),用 p 投出的结果和 q 投出的结果的差异进行衡量,也就可以认为是对概率分布的差异进行衡量:
注意下面知识拿一个简单的伯努利分布举一个例子,seq 代表一个投出来的一个硬币序列,用他们投出来同一个序列的概率值衡量他们之间的概率分布差异:
log(p(seq∣q)P(seq∣q)N1)=N1log(q(h)Nhq(t)Ntp(h)Nhp(t)Nt)=NNhlog p(h)+NNhlog p(t)−NNtlog q(h)−NNtlog q(t)∼p(h)log p(h)+p(t)log p(t)−p(h)log q(h)−p(t)log q(t)=p(h)log(q(h)p(h))+p(t)log(q(t)p(t))∼KL(p∣∣q)
编码定理:
通信中的编码问题(最小期望码长):假设一个离散型随机变量X取值于{x1,⋅⋅⋅,xN} ,其相应概率为 {p(x1),⋅⋅⋅,p(xN)},设计一个编码系统,将 xi 编成 ni 位的二进制序列,通过一个通信网络将从A处传送到B处,为避免混乱,要求编码后的序列不能出现一个序列是另一个序列的延伸。如何设计编码系统使得最终的期望码长最小
引理1:
为了将 X 的可能取值编码成0-1序列,且任何一个序列都不能是另一序列的延伸,其充要条件为:
i=1∑N(21)ni≤1
证明:
记 wj 为 xi 中编码长度为 j 的个数, j=1,2,3… ,显然有:
w12n−1+w22n−2+⋯+wn−12+wn≤2n
两边同除以 2n 得:
{\sum}\limits_{j = 1}^nw_{j}{\left( \frac{1}{2} \right)}^{j} = {\sum}\limits_{i = 1}^N{\left( \frac{1}{2} \right)}^{n_{i}} \leq 1
无噪声编码定理:
假设每个信号单位从位置A到位置B的过程没有发生错误,则编码的期望码长不小于随机变量的信息熵:
{\sum}\limits_{i = 1}^N n_{i}p\left( x_{i} \right) {\geq} H(X) = - \sum_{i = 1}^N p\left( x_{i} \right)\log p\left( x_{i} \right)
证明: 记 pi=p(xi),qi=2−ni/∑j=1N2−nj ,则有
{\sum}\limits_{i = 1}^Np_{i} = {\sum}\limits_{i = 1}^Nq_{i} = 1 \\
{-} {\sum}\limits_{i = 1}^Np_{i}\log\left( \frac{p_{i}}{q_{i}} \right) = {-} \log e{\sum}\limits_{i = 1}^Np_{i}\ln\left( \frac{p_{i}}{q_{i}} \right) \\
= \log e{\sum}\limits_{i = 1}^Np_{i}\ln\left( \frac{q_{i}}{p_{i}} \right) \\
{\leq} \log e{\sum}\limits_{i = 1}^Np_{i}\left( \frac{q_{i}}{p_{i}} {-} 1 \right) \\
= \log e\left( {\sum}\limits_{i = 1}^Np_{i} {-} {\sum}\limits_{i = 1}^Nq_{i} \right) = 0
由此可得:
{-} {\sum}\limits_{i = 1}^Np\left( x_{i} \right)\log p\left( x_{i} \right) {\leq} {-} {\sum}\limits_{i = 1}^Np_{i}\log q_{i} \\
= \sum_{i = 1}^N n_i p_i + \log\left( \sum_{j = 1}^N 2^{-n_j} \right)
\leq \sum_{i = 1}^N n_i p_i