交叉熵与KL散度

目录

最近遇到交叉熵作为损失函数的情况,且在花书刚好看到KL散度一节,故写一下学习笔记。

KL散度的定义

KL散度的具体定义参考花书3.13节,

DKL(PQ)=ExP[logP(x)Q(x)]=ExP[logP(x)logQ(x)] D_{KL}(P \| Q) = \mathbb{E}_{x \thicksim P} \big[ \log \frac{P(x)}{Q(x)} \big] = \mathbb{E}_{x \thicksim P} \big[ \log P(x) - \log Q(x) \big], DKL​(P∥Q)=Ex∼P​[logQ(x)P(x)​]=Ex∼P​[logP(x)−logQ(x)],

DKL(PQ)D_{KL}(P \| Q)DKL​(P∥Q)用于衡量两个分布PPP、QQQ之间的差异大小,DKL0D_{KL} \geq 0DKL​≥0,并且越接近0说明ppp与qqq这两个分布越近似,当且仅当ppp与qqq完全一致时KL散度取0。

图例3.6已经很好地说明了机器学习损失函数为何采用DKL(pq)D_{KL}(p \| q)DKL​(p∥q)而不是DKL(qp)D_{KL}(q \| p)DKL​(q∥p),这两者是不对称的。已知分布p(x)p(x)p(x),求一个分布q(x)q(x)q(x)来近似p(x)p(x)p(x),qq^*q∗右上角的*∗符号表示最优值。这里可以看成已知xxx的类别分布p(x)p(x)p(x),拟学习一个算法y^\hat{y}y^​去预测xxx的类别,y^\hat{y}y^​所给类别预测的概率分布为q(x)q(x)q(x),y^\hat{y}y^​上方的尖号表示对yyy的预测(猜测)值,学习目标是使q(x)q(x)q(x)尽可能地近似p(x)p(x)p(x)。当采用DKL(qp)D_{KL}(q \| p)DKL​(q∥p)时,qq^*q∗不仅可以放在左峰(如右图),也可以放在右峰(未画出),右图给人感觉有点“丢失”了一半的信息。

交叉熵与KL散度

KL散度与交叉熵

DKL(PQ)=Exp[logp(x)q(x)]=xp(x)logp(x)q(x) E使=xp(x)logp(x)xp(x)logq(x)=H(p)+CE(p,q) CECross Entropy \begin{aligned} D_{KL}(P \| Q) &= \mathbb{E}_{x \thicksim p} \big[ \log \frac{p(x)}{q(x)} \big] =\sum_x p(x) \cdot \log \frac{p(x)}{q(x)} ~ (\mathbb{E}表示数学期望,变量连续时使用\int符号)\\ & = \sum_x p(x) \log p(x) - \sum_x p(x) \log q(x) \\ & = - H(p) + CE(p, q),~ (CE表示Cross ~ Entropy,即交叉熵) \end{aligned} DKL​(P∥Q)​=Ex∼p​[logq(x)p(x)​]=x∑​p(x)⋅logq(x)p(x)​ (E表示数学期望,变量连续时使用∫符号)=x∑​p(x)logp(x)−x∑​p(x)logq(x)=−H(p)+CE(p,q), (CE表示Cross Entropy,即交叉熵)​
由于p(x)p(x)p(x)已经固定,所以H(p)-H(p)−H(p)是一个常数,我们的目标是优化DKL(PQ)D_{KL}(P \| Q)DKL​(P∥Q),把常数省略掉,相当于直接优化CE(p,q)CE(p, q)CE(p,q),即交叉熵部分。

针对第iii个样本xix_ixi​,其类别分布为y(xi,k)y(x_i, k)y(xi​,k),算法y^\hat{y}y^​对其类别的预测分布为y^(xi,k)\hat{y}(x_i, k)y^​(xi​,k),其中k={1,,m}k = \{ 1, \dots, m \}k={1,…,m}表示总共有mmm种类别,有
CE(y(xi,{1,,m}),y^(xi,{1,,m}))=ky(x,k)logy^(x,k) CE \Big( y \big(x_i, \{ 1, \dots, m \} \big), \hat{y} \big(x_i, \{ 1, \dots, m \} \big) \Big) = - \sum_k y(x, k) \log \hat{y}(x, k), CE(y(xi​,{1,…,m}),y^​(xi​,{1,…,m}))=−k∑​y(x,k)logy^​(x,k),

上述等式已给出单个样例的损失函数,而对于批量(整个)数据集D={(x1,y1),(x2,y2),,(xn,yn)}D = \{ (x_1, y_1), (x_2, y_2), \dots, (x_n, y_n) \}D={(x1​,y1​),(x2​,y2​),…,(xn​,yn​)},有
CE(y(D),y^(D))=i=1nk=1my(xi,k)logy^(xi,k) CE( y(D), \hat{y}(D) ) = -\sum_{i=1}^n \sum_{k=1}^m y(x_i, k) \log \hat{y} (x_i, k)。 CE(y(D),y^​(D))=−i=1∑n​k=1∑m​y(xi​,k)logy^​(xi​,k)。

Acknowledge

参考自:
交叉熵与KL散度
感谢@LittleSasuke

感谢花书作者以及所有做出巨大贡献的人

上一篇:海思平台机顶盒适配遥控器流程


下一篇:KL散度、JS散度、W距离