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