非香农类信息不等式_信息量、熵 、交叉熵与softmax、KL散度
-
信息 :用来表征 消除 消息 不确定性的物理量
-
信息量: 随事件发生概率 单调递减,
-
熵 :信息量的期望
昨天下雨这个事件,因为已知,那么它的信息量就为0。
明天会下雨这个事件,因为未知,那么这个事件的信息量就大。
事件发生的概率越小,(但对其进行预测,那么)其信息量越大。
比如,你告诉我,赛马中哪匹是第一,信息量很大(有价值)。告诉我明天太阳会升起,信息量很小(说了等于没说)
一个具体事件的信息量不能为负。
如果有俩不相关的事件x和y,那么观察到的俩个事件同时发生时 获得的信息应该等于 观察到的事件各自发生时 获得的信息之和,即:
h(x,y) = h(x) + h(y)
由于x,y是俩不相关的事件,那么满足p(x,y) = p(x)*p(y). (其实独立才能把概率拆开, 原文这里应该错了)
信息量公式如下:
(香农应该有严格推导)
(1)有一个负号: 确保信息非负
(2)底数为2: 对数的选择是任意的。我们只是遵循信息论的普遍传统,使用2作为对数的底!有看过用10的.
熵:信息量的期望
随机变量X的熵
为:
(计算某随机变量的熵的前提:知道这个变量的真实分布)
0-1分布问题,熵的计算方法可以简化为如下算式:(p是成功概率)
import matplotlib.pyplot as plt #画图包
import numpy as np
x = np.linspace(0,1,50)
y = -(x * np.log(x) + (1-x)* np.log(1 - x))
plt.plot(x,y)
plt.show()

抛硬币,它是均匀的时候,最难预测结果,此时熵为log2, 最大。(正反面的概率都是1/2,它是完全随机的!)
概率趋向0时, 信息量趋向无穷大, 熵趋向0,
如果一张图,猫狗二分类,label是[0, 1],熵是-1乘log1 - 0乘log 0,等于0
y = -x * np.log(x)
#<stdin>:1: RuntimeWarning: divide by zero encountered in log
a*loga在a趋近无穷小时, 是0
但python不能计算
https://www.cnpython.com/qa/659319
相对熵(KL散度):
如果同一个 随机变量 x 有两个单独的概率分布 P(x) 和 Q(x),可以使用 KL 散度来衡量这两个分布的差异。
P往往用来表示样本的真实分布,Q用来表示模型所预测的分布
Q的分布越接近P(Q分布越拟合P),那么散度值越小。
因为对数函数是凸函数,所以KL散度的值为非负数。(需要推一下)
有时会将KL散度称为KL距离,但它并不满足距离的性质:
- KL散度不是对称的;
- KL散度不满足三角不等式。
交叉熵:
将KL散度公式进行变形:
等式的前一部分恰巧就是p的负熵,等式的后一部分**,被定义为交叉熵:**
计算模型分布与目标分布间的差异,** KL散度是最合适的** 。即
由于KL散度中的前一部分**−H(y)不变** ,故在优化过程中,只需要关注交叉熵 就可以了。所以一般在机器学习中直接用用交叉熵做loss,评估模型。
softmax-cross-entropy loss:

T is a temperature that is normally set to 1
(T不是1,就是temperature softmax)
why higher temperatures lead to softer distributions, that has to do with the exponential function. The temperature parameter penalizes bigger logits more than the smaller logits. The exponential function is an 'increasing function'. So if a term is already big, penalizing it by a small amount would make it much smaller (% wise) than if that term was small.
(T可以理解为征收富人税, 缩小贫富差距的程度, 温度高, 贫富差距小( 各类的概率拉平))

Sharpening:
we apply a sharpening function to reduce the entropy of the label distribution. In practice, for the sharpening function, we use the common approach of adjusting the“temperature” of this categorical distribution
和temperature softmax类似, 但不尽相同
in MixMatch, p is the average class prediction over augmentations

one-hot没有随机性, 熵为0
lowering the temperature encourages the model to produce lower-entropy predictions
另外的说法:
- 若某一事件的标签是已知的,不变的(例如设置猫的label为1,那么所有关于猫的样本都要标记为1),即目标分布的熵为常数 。此时不用计算KL散度,只需要计算交叉熵,就可以得到模型分布与目标分布的损失值。(交叉熵代替KL散度)
2. 如果目标分布是有变化的,那么就不能使用交叉熵
例如蒸馏模型的损失函数就是KL散度,因为蒸馏模型的目标分布也是一个模型,该模型针对同类别的不同样本,会给出不同的预测值(如两张猫的图片a和b,目标模型对a预测为猫的值是0.6,对b预测为猫的值是0.8)。 (毕竟没用到ground truth?)
交叉熵和KL散度应用方式不同的另一种解释(暂时没理解):
交叉熵: 衡量在给定的真实分布下,使用 非真实分布所指定的策略 消除系统的不确定性 所需要付出的努力的大小 (模型在推断阶段,需要付出的努力是什么?)。
最小化交叉熵,诱导由算法产生的策略 接近最优策略, KL散度(相对熵):
衡量不同策略( 模型分布?)之间的差异
把熵的公式中的概率真值p换成预测概率q,得到交叉熵
KL散度 = 交叉熵 - 熵
交叉熵大于等于熵【预测的分布只能接近真实分布,但永远不会严格相等?】(KL散度非负)
KevinCK:交叉熵、相对熵(KL散度)、JS散度和Wasserstein距离(推土机距离)


