交叉熵
本节内容转自经典损失函数:交叉熵(附tensorflow)
交叉熵是一个信息论中的概念,它原来是用来估算平均编码长度的。给定两个概率分布p和q,通过q来表示p的交叉熵为:
交叉熵刻画的是两个概率分布之间的距离,或可以说它刻画的是通过概率分布q来表达概率分布p的困难程度,p代表正确答案,q代表的是预测值,交叉熵越小,两个概率的分布约接近。
那么,在神经网络中怎样把前向传播得到的结果也变成概率分布呢?Softmax回归就是一个非常有用的方法。(所以面试官会经常问你,为什么交叉熵经常要个softmax一起使用?)
假设原始的神经网络的输出为,那么经过Softmax回归处理之后的输出为:
这样就把神经网络的输出也变成了一个概率分布,从而可以通过交叉熵来计算预测的概率分布和真实答案的概率分布之间的距离了。
二分类的交叉熵
交叉熵公式:y^logy
其中y^为真实样本分类;y为预测样本分类,二者维度为[sample_size, 1]
因为y要么0要么1,所以二分类的交叉熵也可以写成logy
多分类交叉熵
交叉熵公式:y^logy
符号含义同上,二者维度为[sample_size, num_tags]
tensorflow实现交叉熵
# cross_entropy = target * predict
cross_entropy=-tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10,1.0)))
可以借助tensorflow.losses.softmax_cross_entropy
# 主要softmax_cross_entropy中包含softmax操作,因此预测的数据不需要先softmax
cross_entropy = tf.losses.softmax_cross_entropy(y_, y)