[参考《TensorFlow实战Google深度学习框架(第2版)》]
作为分类问题中的损失函数
在神经网络的多分类问题中,常常使用one-hot的方法设置n类输出,比如在手写体识别问题中,如果是数字1,神经网络的输出越接近[0,1,0,0,0,0,0,0,0,0]越好。那么如何衡量神经网络与label的接近程度呢?交叉熵是常用的使用方法。其刻画的是两个概率分布之间的距离。
交叉熵是信息论中的概念。对于给定的两个概率分布p和q,交叉熵的计算公式是(PyTorch中对数以自然常数e为底):
H ( p , q ) = − ∑ i p i   l n   q i H(p,q)=-\sum_{i}p_i\,ln\, q_i H(p,q)=−i∑pilnqi
在神经网络中常常通过一个Softmax层将原始输出层变成一个概率分布(神经网络图如下:):
y o u t p u t = s o f t m a x ( y ) i = e y i ∑ j = 1 n e y j y_{output}=softmax(y)_i=\frac{e^{yi}}{\sum_{j=1}^{n}e^{yj}}