1. 信息量与熵

信息量:它用来衡量一个事件的不确定性。一个事件发生的概率越大,不确定性越小,则它所携带的信息量就越小。

【数学直观理解】假设 X X X 是一个离散型随机变量,取值集合为 X X X,概率分布函数为 p ( x ) = P ( X = x ) , x ∈ X p(x)=P(X=x),x \in X p(x)=P(X=x),xX

定义事件 X = x 0 X=x_0 X=x0 的信息量为 I ( x 0 ) = − l o g ( p ( x 0 ) ) I(x_0)=-log(p(x_0)) I(x0)=log(p(x0)),当 p ( x 0 ) = 1 p(x_0)=1 p(x0)=1时,也就是事件发生概率为1,信息量将等于0,也就是说该事件的发生不会导致任何信息量的增加。


熵(信息熵):用来衡量一个系统的混乱程度,量化信息的不确定性。它代表一个系统中信息量的总和,信息量总和越大,表明这个系统的不确定性就越大。

如何度量?对所有可能事件所带来的信息量求期望

对于随机变量 X X X,其概率分布 P P P 如下所示:

在这里插入图片描述

那么该随机变量 X X X 的熵值定义如下:
H ( X ) = − ∑ i = 1 n p ( x i ) log ⁡ p ( x i ) \begin{aligned} H(X)=-\sum_{i=1}^n p(x_i)\log p(x_i) \end{aligned} H(X)=i=1np(xi)logp(xi)

  • p ( x i ) = 0 p(x_i)=0 p(xi)=0时,定义 H ( X ) = 0.   ( lim ⁡ x → 0 + x log ⁡ x = 0 ) H(X)=0.\ (\lim_{x\to 0+} x \log x = 0) H(X)=0. (limx0+xlogx=0)
  • 熵越大,随机变量的不确定性就越大。 当每个概率都一样,即 p ( x i ) p(x_i) p(xi)都相等时,熵最大为 H ( X ) = log ⁡ n H(X)=\log n H(X)=logn.
  • 0 ≤ H ( P ) ≤ log ⁡ n 0 \le H(P) \le \log n 0H(P)logn

【e.g.】 存在三个容器,每一个容器里面都含有两种元素:三角形和圆形,哪一个容器的确定性最高?

在这里插入图片描述

很显然,容器3的熵值最小,确定性最大。这个结果也十分符合常理,容器3中有29个圆形,1个三角形,内部信息是相对稳定的。


2. 交叉熵(Cross-Entropy)

2.1 交叉熵的定义

如果说熵是衡量一个随机变量分布内在不确定性的指标,那 交叉熵就是衡量两个概率分布(真实分布和预测分布)之间差异的指标

对于给定的 真实分布 P P P预测分布 Q Q Q交叉熵 定义为:
H ( P , Q ) = − ∑ x P ( x ) log ⁡ Q ( x ) H(P,Q)=-\sum_x P(x)\log Q(x) H(P,Q)=xP(x)logQ(x)

【e.g.】 以分类任务为例。如图所示,一张图像经过神经网络处理,softmax函数处理得到概率分布 [0.775, 0.116, 0.039, 0.070] (预测概率分布)

在这里插入图片描述

这张图像真实对应的类别向量为 [1, 0, 0, 0] (真实概率分布)

模型预测的概率分布和真实概率分布之间的差异有多大呢?可以用交叉熵来衡量。

在这里插入图片描述
L C E = − ∑ i = 1 4 t i log ⁡ ( p i ) = − [ 1 ∗ log ⁡ ( 0.775 ) + 0 ∗ log ⁡ ( 0.116 ) + 0 ∗ log ⁡ ( 0.039 ) + 0 ∗ log ⁡ ( 0.070 ) ] = 0.3677 \begin{aligned} L_{CE}=&-\sum_{i=1}^4 t_i \log(p_i) \\ &=-[1*\log(0.775)+0*\log(0.116)+0*\log(0.039)+0*\log(0.070)] \\ &=0.3677 \end{aligned} LCE=i=14tilog(pi)=[1log(0.775)+0log(0.116)+0log(0.039)+0log(0.070)]=0.3677

这是对于一个样本的交叉熵损失函数值,如果有 N N N个样本,则最终的函数值为 N N N个样本的损失值 累加求平均
L C E = − 1 N ∑ i = 1 N ∑ k = 1 K t i k log ⁡ ( p i k ) L_{CE} = -\frac{1}{N}\sum_{i=1}^N\sum_{k=1}^Kt_{ik}\log(p_{ik}) LCE=N1i=1Nk=1Ktiklog(pik)


2.2 二分类问题中的交叉熵

对于二分类问题,交叉熵损失函数可以简化为:
L = − [ y log ⁡ y ^ + ( 1 − y ) log ⁡ ( 1 − y ^ ) ] L=-[y\log \hat y + (1-y)\log (1- \hat y)] L=[ylogy^+(1y)log(1y^)]

其中, y y y 是真实标签,取值为0或1。 y ^ \hat y y^是模型预测的概率,范围在(0,1)之间。

  • 当真实标签 y = 1 y=1 y=1 时, L = − [ log ⁡ y ^ ] L=-[\log \hat y] L=[logy^],这表示如果真实标签是正类,我们只关心模型预测正类的概率 y ^ \hat y y^,希望它越接近于1越好。
  • 当真实标签 y = 0 y=0 y=0 时, L = − [ log ⁡ ( 1 − y ^ ) ] L=-[\log(1 - \hat y)] L=[log(1y^)],这表示如果真实标签是负类,我们只关心模型预测负类的概率 1 − y ^ 1-\hat y 1y^,希望它越接近1越好。

2.3 多分类问题中的交叉熵

对于有 K K K 个类别的多分类问题,交叉熵损失函数为:

L = − ∑ i = 1 N ∑ k = 1 K y i k log ⁡ ( y ^ i k ) L=-\sum_{i=1}^N \sum_{k=1}^Ky_{ik} \log (\hat y_{ik}) L=i=1Nk=1Kyiklog(y^ik)

其中, N N N 为样本总数, y i y_i yi是真实的类别分布,使用one-hot编码。 y ^ \hat y y^ 是模型预测的第 i i i 个类别的概率,通常通过softmax函数获得,满足 ∑ i = 1 K y ^ i = 1 \sum_{i=1}^K \hat y_i =1 i=1Ky^i=1.

上一节介绍的例子就是多分类的情况。



3. 交叉熵与KL散度

3.1 KL散度定义

KL散度(Kullback–Leibler Divergence) 又称为 相对熵(Relative entropy),是对两个概率分布间差异非对称性度量,即表示的是一个概率分布相对于另一个概率分布的差异程度。

P ( x ) P(x) P(x) Q ( x ) Q(x) Q(x) 是随机变量 X X X 上的两个概率分布, P ( x ) P(x) P(x) 是真实分布, Q ( x ) Q(x) Q(x) 是拟合分布(预测分布)

离散随机变量的情形下, P P P 相对于 Q Q Q 的KL散度定义为:
K L ( P ∥ Q ) = ∑ P ( x ) log ⁡ P ( x ) Q ( x ) = − ∑ P ( x ) log ⁡ Q ( x ) + ∑ P ( x ) log ⁡ P ( x ) = H ( P , Q ) − H ( P ) \begin{aligned} KL(P \parallel Q)&=\sum P(x) \log \frac{P(x)}{Q(x)} \\ &= - \sum P(x) \log Q(x) + \sum P(x) \log P(x)\\ &= H(P,Q) - H(P) \end{aligned} KL(PQ)=P(x)logQ(x)P(x)=P(x)logQ(x)+P(x)logP(x)=H(P,Q)H(P)

KL散度可以表示为交叉熵 H ( P , Q ) H(P,Q) H(P,Q) 与真实数据分布的熵 H ( P ) H(P) H(P) 的差
在分类问题中,最小化KL散度等价于最小化交叉熵损失,因为数据集的熵 H ( P ) H(P) H(P)是个定值,即训练数据的分布是固定的

连续随机变量的情形下, P P P 相对于 Q Q Q 的KL散度定义为:
K L ( P ∥ Q ) = ∫ P ( x ) log ⁡ P ( x ) Q ( x ) d x KL(P \parallel Q)= \int P(x) \log \frac{P(x)}{Q(x)} dx KL(PQ)=P(x)logQ(x)P(x)dx

通俗来说, P ( x ) P(x) P(x) 是真实分布(true distribution) Q ( x ) Q(x) Q(x) 是一个用于拟合真实分布的近似分布(approximate distribution),通过尝试修改 Q ( x ) Q(x) Q(x) 使得两者之间的 K L ( P ∥ Q ) KL(P \parallel Q) KL(PQ)尽可能小,来实现 Q ( x ) Q(x) Q(x) 拟合 P ( x ) P(x) P(x).

因此,KL散度并不是对称的,衡量的是如果用分布 Q Q Q 来替代真实分布 P P P,我们会额外损失多少信息。KL散度越大,说明 Q Q Q P P P 之间的差异越大。


3.2 两类KL散度(了解)

在上面这个概率拟合的应用场景下(即确定了真实分布 P ( x ) P(x) P(x)和拟合分布 Q ( x ) Q(x) Q(x)两个角色之后),有前向KL散度和反向KL散度的定义:

  • K L ( P ∥ Q ) KL(P \parallel Q) KL(PQ) 前向KL散度(forward KL Divergence)
  • K L ( Q ∥ P ) KL(Q \parallel P) KL(QP) 反向KL散度(reverse KL Divergence)

需要注意的是,只有确定了概率拟合的应用场景,这样的定义才是有意义的,否则两个公式只是改变符号表示之后的平凡结果。

【e.g.】 假设真实分布 P P P 是混合高斯分布,由两个高斯分布的分量组成。

\quad\quad\quad 希望用普通的高斯分布 Q Q Q 来近似 P P P ,则有两种方案:在这里插入图片描述

拟合效果如下图所示:

在这里插入图片描述

选择 Q 1 ∗ Q_1^* Q1极小化前向KL损失下的拟合行为特性:寻找均值(Mean-Seeking Behaviour)

  • P ( x ) P(x) P(x) 较大的时候 Q ( x ) Q(x) Q(x) 也必须较大。如果 P ( x ) P(x) P(x) 较大时 Q ( x ) Q(x) Q(x) 较小,则 P ( x ) log ⁡ P ( x ) Q ( x ) P(x) \log \frac{P(x)}{Q(x)} P(x)logQ(x)P(x)较大。
  • P ( x ) P(x) P(x) 较小的时候 Q ( x ) Q(x) Q(x) 可以较大,也可以较小,因此 Q 1 Q_1 Q1会贴近 P ( x ) P(x) P(x) 的峰值。由于峰值有两个,因此 Q 1 Q_1 Q1 无法偏向任意一个峰值,最终结果就是 其峰值在 P ( x ) P(x) P(x) 的两个峰值之间,如图中第二张图片所示。

选择 Q 2 ∗ Q_2^* Q2极小化反向KL损失下的拟合行为特性:搜寻模态(Mode-Seeking Behaviour)

  • P ( x ) P(x) P(x) 较小的时候, Q ( x ) Q(x) Q(x) 必须较小。如果 P ( x ) P(x) P(x) 较小时 Q ( x ) Q(x) Q(x) 较大,则 Q ( x ) log ⁡ Q ( x ) P ( x ) Q(x) \log \frac{Q(x)}{P(x)} Q(x)logP(x)Q(x)较大。
  • P ( x ) P(x) P(x) 较大的时候, Q ( x ) Q(x) Q(x) 可以较大,也可以较小。因此 Q 2 Q_2 Q2 会贴近 P ( x ) P(x) P(x) 的谷值。最终结果就是会贴合 P ( x ) P(x) P(x) 峰值的任何一个。

【其他示例】 图(a)是拟合代价选择前向KL散度,图(b)和图©拟合代价选择反向KL散度(使用相同代价,但到达代价的不同局部极小值点的结果)。

在这里插入图片描述

一般绝大多数场合使用 K L ( P ∥ Q ) KL(P \parallel Q) KL(PQ),因为当我们用分布 Q Q Q 拟合 P P P 时,我们希望对于常见的事件二者概率相差不大。



References

  1. Pytorch常用的交叉熵损失函数CrossEntropyLoss()详解
  2. 熵Entropy和交叉熵Cross-Entropy详解
  3. 进阶详解KL散度
  4. 信息论 - KL散度

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部