机器学习之相对熵、交叉熵(为什么交叉熵可以作为损失函数)

回眸只為那壹抹淺笑 提交于 2019-12-10 15:58:10

自信息

  信息论的基本想法是一个不太可能的事件居然发生了,要比一个非常可能的事件发生,能够提供发更多的信息。消息说:“今天早上太阳升起”,信息量是如此少,以至于没有必要发送;但一条消息说:“今天早上有日食”,信息量就很丰富。
  一条信息的信息量大小和它的不确定性有直接的关系,我们可以认为,信息量的度量就等于不确定性的多少。使用自信息来量化信息量
I(x)=logP(x)I(x)=-logP(x)
  loglog函数基的选择是任意的,信息论中基常常选择为2,因此信息的单位为比特(bit);而机器学习中基常常选择为自然常数,因此单位常常被称为奈特(nats)。

信息熵

  使用信息熵对整个概率分布中的不确定性总量进行量化:
H(X)=ExP[I(x)]=ExP[logP(x)]H(X)=E_{x\sim P}[I(x)]=-E_{x\sim P}[logP(x)]
  信息熵是表示随机变量不确定的度量,是对所有可能发生的事件产生的信息量的期望。信息熵可以被认为是系统有序化程度的一个度量。
  Shannon 编码定理表明熵是传输一个随机变量状态值所需的比特位下界(最短平均编码长度)。故信息熵可以应用在数据压缩方面。详见文章数据压缩与信息熵介绍。

相对熵(KL散度)

  对于同一个随机变量XX有两个单独的概率分布P(x)P(x)Q(x)Q(x),可以使用KL散度来衡量这两个分布的差异。KL 散度是一种衡量两个概率分布的匹配程度的指标,两个分布差异越大,KL散度越大。
DKL(PQ)=ExP[logP(x)Q(x)]=ExP[logP(x)logQ(x)]D_{KL}(P||Q)=E_{x\sim P}[log\frac{P(x)}{Q(x)}]=E_{x\sim P}[logP(x)-logQ(x)]
  其中P(x)P(x)是目标分布,Q(x)Q(x)是去匹配的分布,如果两个分布完全匹配,那么DKL(PQ)=0D_{KL}(P||Q)=0
  信息论中,相对熵可以理解为使用基于Q的编码对来自P的变量进行编码额外需要的编码长度

交叉熵

  定义如下:
H(PQ)=ExP[logQ(x)]H(P,Q)=-E_{x\sim P}[logQ(x)]
  交叉熵可以来衡量在给定的真实分布下,使用非真实分布所指定的策略消除系统的不确定性所需要付出的努力的大小。
  又
H(P,Q)=H(P)+DKL(PQ)H(P,Q)=H(P)+D_{KL}(P||Q)
  故当DKL(PQ)=0D_{KL}(P||Q)=0时,H(P,Q)H(P,Q)达到最小值。
  信息论中,可以理解为使用基于Q的编码对来自P的变量进行编码所需的平均编码长度。即用非真实分布 P(x)P(x)来表示真实分布 Q(x)Q(x)所需的平均编码长度。

为什么交叉熵可以作为损失函数

  在机器学习中,我们希望在训练数据上模型学到的分布 𝑃(𝑚𝑜𝑑𝑒𝑙) 和真实数据的分布 𝑃(𝑟𝑒𝑎𝑙) 越接近越好,所以我们可以使其相对熵最小。但是我们没有真实数据的分布,所以只能希望模型学到的分布 𝑃(𝑚𝑜𝑑𝑒𝑙) 和训练数据的分布 𝑃(𝑡𝑟𝑎𝑖𝑛) 尽量相同。假设训练数据是从总体中独立同分布采样的,那么我们可以通过最小化训练数据的经验误差来降低模型的泛化误差。即:

  1. 希望学到的模型的分布和真实分布一致,𝑃(𝑚𝑜𝑑𝑒𝑙)≃𝑃(𝑟𝑒𝑎𝑙)
  2. 但是真实分布不可知,假设训练数据是从真实数据中独立同分布采样的,𝑃(𝑡𝑟𝑎𝑖𝑛)≃𝑃(𝑟𝑒𝑎𝑙)
  3. 因此,我们希望学到的模型分布至少和训练数据的分布一致,𝑃(𝑚𝑜𝑑𝑒𝑙)≃𝑃(𝑡𝑟𝑎𝑖𝑛)

  最小化训练数据上的分布 𝑃(𝑡𝑟𝑎𝑖𝑛) 与最小化模型分布 𝑃(𝑚𝑜𝑑𝑒𝑙) 的差异等价于最小化相对熵,即DKLD_{KL}(𝑃(𝑡𝑟𝑎𝑖𝑛)||𝑃(𝑚𝑜𝑑𝑒𝑙))。此时, 𝑃(𝑡𝑟𝑎𝑖𝑛) 就是DKLD_{KL}(𝑝||𝑞) 中的 𝑝,即真实分布,𝑃(𝑚𝑜𝑑𝑒𝑙) 就是 𝑞。又因为训练数据的分布 𝑝 是给定的,所以求 DKLD_{KL}(𝑝||𝑞) 等价于求 𝐻(𝑝,𝑞)。得证,交叉熵可以用来计算学习模型分布与训练分布之间的差异。
  但是神经网络的输出却不一定是一个概率分布,为此我们常常用Sigmoid或Softmax函数将神经网络前向传播得到的结果变成概率分布。故交叉熵广泛用于逻辑回归的Sigmoid和Softmax函数中作为损失函数使用。

参考文章

博客园-详解机器学习中的熵、条件熵、相对熵和交叉熵

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!