1.信息量的定义
信息量公式:I(x0)=−log(p(x0)) ,代表概率越小的事件信息量越大,发生概率越小的样本越有价值。
2.熵的定义
熵用来表示所有信息量的期望,也就是对所有样本发生概率的期望,其本质是对概率的期望
3.相对熵(KL散度)
相对熵又称KL散度,如果我们对于同一个随机变量 x 有两个单独的概率分布 P(x) 和 Q(x),我们可以使用 KL 散度(Kullback-Leibler (KL) divergence)来衡量这两个分布的差异,即:如果用P来描述目标问题,而不是用Q来描述目标问题,得到的信息增量。换一句话说,对于同一个数据集,真实数据分布的概率密度不变,我们用另外一个分布替换真实分布后得到的熵的差异,也就是两个分布对应的信息量的差异。同一个样本的概率差异越大差值越大。
KL散度的计算公式:
其中n为事件的所有可能性。KL散度的值越小,表示q分布和p分布越接近
4.交叉熵
对KL散度公式变形:
在机器学习中,我们需要评估label和predicts之间的差距,使用KL散度刚刚好,由于KL散度中的前一部分−H(y)不变,故在优化过程中,只需要关注交叉熵就可以了。所以一般在机器学习中直接用用交叉熵做loss,评估模型。
对交叉熵的进一步理解:
假如label标签p(x)的都是{0, 1},通常计算loss前,q(x)是经过softmax或者sigmoid归一化后分布在(0,1)之间的预测值,取-log q(x)之后,全部分布在(0, +∞)。
越是接近真值label=1的预测值,-log q(x)越接近0,对应的loss = -p(x) * logq(x) 也就越小;越是接近真值label=0的预测值,-log q(x)越接近+∞,对应的loss = -p(x) * logq(x) = 0。
这也是torch中NLLLoss的原理:
二分类的理解:
只有两种类别:[0, 1],对于任何一个样本,真值为p,如果网络预测为0的概率是q, 则预测为1的概率为 1-p,对总共两个类别[0, 1]的交叉熵loss = -p log(q) - (1-p) log(1-q)
如果样本真值为0,则对应loss = -0 * log(q) - (1-0) *log(1-q) = -log(1-q); 如果真值为1,则对应loss = -1* log(q) - (1-1) * log(1-q) = -log(q)
三分类及更多分类也是类似的公式。
machine learning - The cross-entropy error function in neural networks - Data Science Stack Exchange