写在前面
分类问题和回归问题是监督学习的两大种类:分类问题的目标变量是离散的;回归问题的目标变量是连续的数值。
神经网络模型的效果及优化的目标是通过损失函数来定义的。
回归问题解决的是对具体数值的预测。比如房价预测、销量预测等都是回归问题。这些问题需要预测的不是一个事先定义好的类别,而是一个任意实数。解决回顾问题的神经网络一般只有一个输出节点,这个节点的输出值就是预测值。对于回归问题,常用的损失函数是均方误差( MSE,mean squared error )。
分类问题常用的损失函数为交叉熵( Cross Entropy Loss)。
这篇博客我们简单谈谈交叉熵损失函数。
交叉熵描述了两个概率分布之间的距离,当交叉熵越小说明二者之间越接近。[关于交叉熵的原理,我这有一篇简单明白的博客]
尽管交叉熵刻画的是两个概率分布之间的距离,但是神经网络的输出却不一定是一个概率分布。为此我们常常用Softmax回归将神经网络前向传播得到的结果变成概率分布。
softmax常用于多分类过程中,它将多个神经元的输出,归一化到( 0, 1) 区间内,因此Softmax的输出可以看成概率,从而来进行多分类。
假设我们有一个包含k个元素的数组V, i i 表示V中的第 个元素,那么这 i i 个元素的softmax输出就是:
为了举一个具体例子,特意盗了一张图,如下:[关于Softmax更简单明白的原理阐述,特意负责任地推荐我这篇博客]
注:在TensorFlow中使用Cross Entropy Loss时,主要是使用tf.nn.softmax_cross_entropy_with_logits这类函数,但这类函数需要输入的是未经过Softmax的Logits。而所谓的unscaled logits就可以粗略理解为没有经过Softmax的变量。这一点要与数学上的logits ( 一个事件发生与该事件不发生的比值的对数) 进行区分。
进入主题
简单复习了Softmax,开始进入主题:损失函数为什么要用Cross Entropy Loss。
出于直觉,人们会觉得可以使用classification error来做损失函数: