交叉熵的意义是什么?它又是怎么来的?
我们之前对交叉熵的讨论集中在代数分析和实际实现。这些内容看起来是足够了,但也留下一些待回答的更宽泛的概念问题,比如:交叉熵的意义是什么?有没有直观方式去思考交叉熵?还有,我们怎么才能在一开始的时候就想到交叉熵?
我们从最后一个问题入手:什么会促使我们在第一时间想到交叉熵?假设我们发现了之前描述过的学习减慢的问题,并且明白根源是公式(55)和公式(56)中的项。在仔细观察了这两个公式之后,我们可能会猜想——是否可以通过选择一个代价函数使得项消失。那样的话,一个单一训练样本的代价就会满足:
如果我们能选择某个代价函数使得这个等式成立,那么它们将会直接使得如下直觉成立:一开始的错误越大,神经元学习得越快。同时它们也消除了学习减缓的问题。实际上,如果我们从这些等式着手,凭借我们的数学嗅觉,就能够推导出交叉熵的公式。注意由链式法则,我们有:
运用最后一个等式变成:
和等式(72)对比,我们得到:
将这个表达式对求积分有:
常数部分为某个值。这是单个训练样本对代价的贡献。想得到完整的代价函数,我们必须在所有样本上平均一下,得到:
其中,常数部分是每个训练样本各自常数的平均值。因而我们可以看出,公式(71)和(72)唯一确定了交叉熵的形式,以及一个整体的常数项。交叉熵不是奇迹般凭空产生的,而是我们能够以一种简单自然的方式发现的。
那交叉熵的直观意义是什么?我们又该如何理解它呢?深入地解释这个问题会扯得很远,我就不细说了。但值得一提的是,在信息论领域是有一种标准方式来解释交叉熵的。大致说来,想法就是:交叉熵是对「出乎意料」(译者注:原文使用suprise)的度量。神经元的目标是去计算函数。但是我们让它取而代之计算函数。假设我们把当作等于的概率,是等于的概率。那么,交叉熵衡量的是我们在知道的真实值时的平均「出乎意料」程度。当输出是我们期望的值,我们的「出乎意料」程度比较低;当输出不是我们期望的,我们的「出乎意料」程度就比较高。当然,我没有准确说明「出乎意料」是什么意思,所以这个措辞听起来很空洞。但事实上是有一种精确的信息理论方法来阐述「出乎意料」所表达的意思的。不幸的是,我并不知晓网络上是否能够找到有关该主题的出色、简短、自洽的讨论。但是如果你想深究下去,维基百科上有一个能让你正确入门的简要概述。细节部分可通过研读有关Kraft不等式的材料来补充,这些材料在Cover and Thomas所写的有关信息论的书籍的第五章中可以找到。
问题
- 我们已经详尽地讨论了当我们使用平方代价来训练的神经网络时,会产生输出神经元饱和、学习速率下降的问题。另一个会妨碍学习的因素是等式(61)中x_j项。因为该项的存在,当输入x_j接近于0时,对应的权重w_j会学习得很慢。解释一下,为什么我们不能通过选择一个好的代价函数来消除x_j项。
原文: https://hit-scir.gitbooks.io/neural-networks-and-deep-learning-zh_cn/content/chap3/c3s3.html