KL divergence (Kullback-Leibler divergence)用来衡量两个分布的差异,一般标记为$D_{KL}(P||Q)$,离散形式的计算公式是
$$D_{KL}(P||Q) = \sum_{x\in\chi}P(x) \log \frac{P(x)}{Q(x)}$$
从公式上看,它计算的是$P(x)$和$Q(x)$的log差的均值,$x$服从$P(x)$分布,因为$\log \frac{P(x)}{Q(x)} = \log P(x) – \log Q(x)$。
在通信领域它叫相对熵(relative entropy),在机器学习任务中可以通过最小化KL divergence来学习目标分布$P(x)$,不够我们更常用的是交叉熵(Cross Entropy),把KL divergence公式展开就可以得到交叉熵的计算公式
$$D_{KL}(P||Q) = \sum_{x\in\chi}P(x) \log \frac{P(x)}{Q(x)} = \sum_{x\in\chi}P(x) \left [ \log P(x) – \log Q(x) \right ] = \sum_{x\in\chi}P(x) \log P(x) – \sum_{x\in\chi}P(x) \log Q(x)$$
目标是$P(x)$是已知的,我们通过调整模型$Q(x)$的参数最小化KL divergence从而逼近$P(x)$,公式左边的$\sum_{x\in\chi}P(x) \log P(x)$是一个常数,于是剩下的这部分$-\sum_{x\in\chi}P(x) \log Q(x)$是实际有用的部分,这部分就是机器学习中经常使用的交叉熵损失函数,比如二份类问题的话
$$\text{Binary Cross Entropy} = \sum_{x\in\chi} \left [ y \log \hat{y} \right ] = \sum_{x\in\chi} \left [ y\cdot \log \hat{y} + (1-y) \cdot \log (1-\hat{y}) \right ]$$
再进一步分析下,在二分类任务中我们也可以使用最大似然估计来获得模型的参数,这里目标label变成样本是正样本的概率,所以正样本的概率是1,负样本的概率是0。
$$L(\theta) = \prod_{i=1}^{N} Q(x_i|\theta)$$
最大化上述公式同样可以解决我们的分类任务,算乘法不如算加法方便,而且$Q(x)$输出的值本来就小,连乘以后就更小了,所以这里加个$\log$变成:
$$\log L(\theta) = \log \prod_{i=1}^{N} Q(x_i|\theta) = \sum_{i=1}^{N} \log Q(x_i|\theta)$$
$Q(x_i)$即预测值,写成$\hat{y}_i$,最大似然估计的目标即$\sum_{i=1}^{N} \log \hat{y}_i$,本身隐含的就是$\sum_{i=1}^{N} y_i \log \hat{y}_i$,加上负号也就变成了最小化$-\sum_{i=1}^{N} y_i \log \hat{y}_i$。
从上面的分析看,最小化交叉熵损失函数和最大似然估计本身是想通的。