首先用一句话进行总结:KL散度可以被用于计算代价,而在特定情况下最小化KL散度等价于最小化交叉熵。而交叉熵的运算更简单,所以用交叉熵来当做代价。

熵(Entropy)

熵度量的是所包含的信息量。

举例一句话“昨天花了10万买了北京二环一套房”。

这句话信息量大,因为它的内容出乎意料,违反常理。因此:

  • 越不可能发生的事情信息量越大,而确定的时间信息量就比较低。
  • 独立事件的信息量可叠加。

熵的公示为:

对于一个一定会发生的时间,其发生概率为1,

信息量为0。

KL散度

KL散度,有时候也叫KL距离,主要用来衡量两个事件或者分布之间的不同。

举个不恰当的例子:

  • 事件A:张三今天买了2个土鸡蛋
  • 事件B:李四今天买了6个土鸡蛋

我们定义随机变量x:买土鸡蛋,那么事件A和B的区别是什么?

有人可能说,那就是李四多买了4个土鸡蛋?这个答案只能得50分,因为忘记了”坐标系”的问题。

换句话说,对于张三来说,李四多买了4个土鸡蛋。对于李四来说,张三少买了4个土鸡蛋。

选取的参照物不同,那么得到的结果也不同。

更严谨的说,应该是说我们对于张三和李四买土鸡蛋的期望不同,可能张三天天买2个土鸡蛋,而李四可能因为孩子满月昨天才买了6个土鸡蛋,而平时从来不买。

因此对于离散事件,我们定义KL散度为:

观察公式我们可以得出:

  • 如果Pa=Pb,既两个事件的分布完全相同,那么KL散度为0。
  • 上式减号左边部分就是事件A的熵。
  • 如果颠倒一下顺序(求B||A),那么结果就不一样了,因此KL散度不具有对称性。

交叉熵

现在我们已经有KL散度来衡量两个分布之间的不同了,那么交叉熵是用来做什么的呢?

事实上交叉熵和KL散度的公式非常相近,其实就是KL散度的后半部分:A和B的交叉熵 = A与B的KL散度 – A的熵。

既:

因此,交叉熵的公式为:

可以观察到,当S(A)为常量时,交叉熵等价于KL散度(当然这里的等价并不是数学意义上的“等于”,而是交叉熵和KL散度的变量一致)。因此我们可以有两个发现:

  • 交叉熵和KL散度一样,不具有对称性。
  • 对同一件事求交叉熵实际上就是求该事件的熵

那么为什么使用交叉熵来当作代价函数呢?

首选我们定义训练模型分布P(model) [下称为Pm]以及训练数据分布P(training) [下称为Pt]。我们需要最小化两个Pm和Pt两个分布之间的KL散度。既:KL(Pt || Pm )

但是,当给定数据集时,Pt一定,KL散度等价于交叉熵,因此问题转换为了 H(Pt || Pm )。因此,交叉熵可以用于计算训练模型分布与训练模型分布之间的不同。当交叉熵最低时(等于训练数据分布的熵),我们学到了“最好的模型”。


当然,完美的拟合训练数据往往意味着过拟合,不过那就是另外的故事了。


0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注