首先用一句话进行总结: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 条评论