损失函数之交叉熵(一般用于分类问题)

一,交叉熵的原理:

交叉熵是用来衡量两个 概率分布 的距离(也可以叫差别)。[概率分布:即[0.1,0.5,0.2,0.1,0.1],每个类别的概率都在0~1,且加起来为1]。

若有两个概率分布p(x)和q(x),通过q来表示p的交叉熵为:(注意,p和q呼唤位置后,交叉熵是不同的)

H(p,q)=-\sum p(x)log q(x)

只要把p作为正确结果(如[0,0,0,1,0,0]),把q作为预测结果(如[0.1,0.1,0.4,0.1,0.2,0.1]),就可以得到两个概率分布的交叉熵了,交叉熵值越低,表示两个概率分布越靠近。

 

交叉熵计算实例:

假设有一个三分类问题,某个样例的正确答案是(1,0,0),某个模型经过softmax回归之后的预测答案是(0.5,0.4,0.1),那么他们的交叉熵为:

H((1,0,0),(0.5,0.4,0.1))=-(1\times log0.5+0\times log0.4+0\times log0.1)\approx 0.3

如果另一个模型的预测概率分布为(0.8,0.1,0.1),则这个预测与真实的交叉熵为:

H((1,0,0),(0.8,0.1,0.1))=-(1\times log0.8+0\times log0.1+0\times log0.1)\approx 0.1

由于0.1小于0.3,所以第二个预测结果要由于第一个。

 

二,使用交叉熵的背景:

通过神经网络解决分类问题时,一般会设置k个输出点,k代表类别的个数,如下图:

损失函数之交叉熵(一般用于分类问题)_第1张图片

每个输出结点,都会输出该结点对应类别的得分,如[cat,dog,car,pedestrian] 为[44,10,22,5]

但是输出结点输出的是得分,而不是概率分布,那么就没有办法用交叉熵来衡量预测结果和真确结果了,那怎么办呢,解决方法是在输出结果后接一层 softmax,softmax的作用就是把输出得分换算为概率分布

 

三,用tensorflow实现交叉熵:

在tensorflow中,有交叉熵的接口,由于交叉熵一般会与softmax一起使用,所以tensorflow对这两个功能进行了统一封装。

接口为:

corss_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=y_,logits=y)

其中,y_为标准答案结果,y为网络输出的预测结果。

你可能感兴趣的:(#,Tensorflow,机器学习)