在使用神经网络进行分类和预测的时候,使用 Cross Entropy Error 来 evaluate 模型比使用 classification error 和 mean squared error 能取得更好的效果。为什么呢?让我来解释一下。基本的 idea 是非常简单的,但是目前有很多对其 main idea 存在误解的看法。首先说明一下我们正在用一个神经网络模型来进行分类任务,比如通过性别、年龄、年收入等预测一个人的党派属性(属于民主党、共和党或者其他党派)。我们不是在用神经网络进行回归任务(其预测值为数值型),或者一个时间序列的神经网络,又或者是其他的什么神经网络。
现在假设你有三个训练数据的样本。你的神经网络在输出层使用 softmax 激活函数将输出值转换为概率。假设神经网络的输出值和样本的实际值如下所示:1
2
3
4
5| computed | targets | correct? |
| -------------- |----------------------|----------|
| 0.3 0.3 0.4 | 0 0 1 (democrat) | yes |
| 0.3 0.4 0.3 | 0 1 0 (republican) | yes |
| 0.1 0.2 0.7 | 1 0 0 (other) | no |
这个神经网络的分类误差为 $\frac{1}{3} = 0.33$ ,其对应的分类准确率为 $\frac{2}{3}=0.67$ 。注意到这个神经网络仅仅将前两个样本分类正确,在第三个样本上却错的离谱。现在来看看另外一个神经网络:1
2
3
4
5computed | targets | correct?
-----------------------------------------------
0.1 0.2 0.7 | 0 0 1 (democrat) | yes
0.1 0.7 0.2 | 0 1 0 (republican) | yes
0.3 0.4 0.3 | 1 0 0 (other) | no
这个神经网络的分类误差也是 $\frac{1}{3} = 0.33$ 。但是这个神经网络的表现要比第一个要好,因为它预测正确分类的概率值要大,且对于第三个样本也仅仅是差一点就预测对了,不像第一个预测的那么离谱。由此看来,分类误差是一个很“粗暴”的误差度量指标。
现在我们看看 cross-entropy error。第一个神经网络对于第一个样本的交叉熵误差为:
注意到在这个神经网络分类中,计算有一点“怪异”,因为除了一项以外都是 0 。(网络上几个讲如何计算交叉熵的解释还不错。)所以,第一个神经网络的平均交叉熵误差计算如下:
第二个神经网络的平均交叉熵误差为:
Notice that the average cross-entropy error for the second, superior neural network is smaller than the ACE error for the first neural network. The ln() function in cross-entropy takes into account the closeness of a prediction and is a more granular way to compute error.