监督学习的两大种类是分类问题和回归问题。
交叉熵损失函数主要应用于分类问题。
先上实现代码,这个函数的功能就是计算labels和logits之间的交叉熵。
tf.nn.softmax_cross_entropy_with_logits(logits=y, labels=y_)
一、交叉熵
首先一个问题,什么是交叉熵?
交叉熵(Cross Entropy)主要用于度量两个概率分布间的差异性信息。
交叉熵刻画了两个概率分布之间的距离。
(概率分布刻画了不同事件发生的概率,而且所有事件的概率求和为 1 )
假设两个概率分布p、q,p为真实分布,q为非真实分布(或预测分布),通过q来表示p的交叉熵为:
交叉熵刻画的是两个概率分布之间的距离,但是神经网络的输出却不一定是一个概率分布。
那么如何将神经网络前向传播得到的结果也编程概率分布呢?
二、Softmax
这就需要用到Softmax回归。
首先看一下加上Softmax回归的神经网络结构图:
从图中可以看出Softmax层其实是一层处理层,原始输出层通过Softmax层转化成一个概率分布,然后作为最终输出。
假设原始的神经网络输出为,那么经过Softmax回归处理之后的输出为:
三、分类问题什么要用交叉熵损失函数?
首先我们要知道损失函数就是为了刻画模型预测值和真实值之间的差异。
上文所述,交叉熵主要用于度量两个概率分布间的差异性信息,刻画了两个概率分布之间的距离。
我们使用Softmax层,它将原始的输出层转化成了一个概率分布,正好可以用交叉熵损失函数。
参考书籍《TensorFlow实战Google深度学习框架》